From 69168bc29e327d327b14c569b58c2c9f9b4b9795 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Mon, 9 Jan 2023 13:16:41 -0300 Subject: [PATCH 001/578] Update index.md (#1421) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index dc6fe01d95d..5adebfbe85f 100644 --- a/applications/index.md +++ b/applications/index.md @@ -525,7 +525,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Uke](https://github.com/Uke-Messaging) | [Uke Protocol PoC & App (revised)](./uke-protocol.md) | [GitHub](https://github.com/Uke-Messaging) | ☐ | ☒ | ☒ | | [727.ventures](https://727.ventures/) | [Typechain Phase 2](./typechain-polkadot-follow-up.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☐ | ☐ | | [QSTN](https://qstn.us/) | [QSTN](./QSTN.md) | [GitHub](https://github.com/qstnus) | ☐ | ☐ | ☐ | -| [CESS LAB](https://www.cess.cloud/) | [Substats (The framework of lightweight block explorer)](./substats.md) | [GitHub](https://github.com/CESSProject) | ☐ | ☐ | ☐ | +| [CESS LAB](https://www.cess.cloud/) | [Substats (The framework of lightweight block explorer)](./substats.md) | [GitHub](https://github.com/CESSProject) | ☐ | ☒ | ☐ | | [Polket](https://toearn.fun) | [ToEarnFun](./polket_toearnfun.md) | [GitHub](https://github.com/polketio/polket-node) | ☐ | ☒ | ☐ | | ALPHA LABS | [Binary merkle tree](./binary_merkle_tree.md) | [GitHub](https://github.com/frisitano) | ☐ | ☐ | ☐ | | [Standard Protocol](https://standard.tech/) | [New Order - a full onchain orderbook dex with indexers](./Standard_Protocol.md) | [GitHub](https://github.com/standardweb3) | ☐ | ☐ | ☐ | From 16978ac081724a9c3b7434ced7a64cbb78394bde Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Tue, 10 Jan 2023 13:22:28 +0100 Subject: [PATCH 002/578] Update index.md Accept Typechain Phase 2 M1, M2 --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 5adebfbe85f..d6f442ba619 100644 --- a/applications/index.md +++ b/applications/index.md @@ -523,7 +523,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Bela Supernova](https://bsn.si/) | [Rubeus Keeper](./RubeusKeeper.md) | [GitHub](https://github.com/bsn-si) | ☐ | ☒ | ☒ | | [Web3 Labs Ltd](https://www.web3labs.com/epirus-explorer) | [Epirus Substrate Explorer - Phase 2](./epirus_substrate_phase_2.md) | [GitHub](https://github.com/web3labs) | ☐ | ☒ | ☐ | | [Uke](https://github.com/Uke-Messaging) | [Uke Protocol PoC & App (revised)](./uke-protocol.md) | [GitHub](https://github.com/Uke-Messaging) | ☐ | ☒ | ☒ | -| [727.ventures](https://727.ventures/) | [Typechain Phase 2](./typechain-polkadot-follow-up.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☐ | ☐ | +| [727.ventures](https://727.ventures/) | [Typechain Phase 2](./typechain-polkadot-follow-up.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☒ | ☒ | | [QSTN](https://qstn.us/) | [QSTN](./QSTN.md) | [GitHub](https://github.com/qstnus) | ☐ | ☐ | ☐ | | [CESS LAB](https://www.cess.cloud/) | [Substats (The framework of lightweight block explorer)](./substats.md) | [GitHub](https://github.com/CESSProject) | ☐ | ☒ | ☐ | | [Polket](https://toearn.fun) | [ToEarnFun](./polket_toearnfun.md) | [GitHub](https://github.com/polketio/polket-node) | ☐ | ☒ | ☐ | From b01b62418a92453345b152fac9c15bb0c1c44eba Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Tue, 10 Jan 2023 12:51:42 -0300 Subject: [PATCH 003/578] Update index.md (#1426) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index d6f442ba619..9cd1dfe0c3a 100644 --- a/applications/index.md +++ b/applications/index.md @@ -560,7 +560,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Colorful Notion](https://github.com/colorfulnotion) | [Zombienet Explorer: Multi-Chain Substrate Block Explorer](Zombienet-Explorer.md) | [GitHub](https://github.com/colorfulnotion/zombienet-explorer) | ☐ | ☐ | ☐ | | [TwinP](https://github.com/herou) | [Decentralized Invoice](decentralized_invoice.md) | [GitHub](https://github.com/herou) | ☐ | ☐ | ☐ | | [Zondax](http://zondax.ch/) | [Hybrid node research grant](hybrid_node_research.md) | [GitHub](https://github.com/ZondaX) | ☐ | ☐ | ☐ | -| [Bright Inventions](https://brightinventions.pl/) | [ZK-Snarks Tutorial](ZK-Snarks%20tutorial.md) | [GitHub](https://github.com/bright/) | ☐ | ☐ | ☐ | +| [Bright Inventions](https://brightinventions.pl/) | [ZK-Snarks Tutorial](ZK-Snarks%20tutorial.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☐ | | [Common Orbit LLC](https://brson.github.io) | [wasm-opt-for-rust maintenance](../maintenance/wasm-opt-for-rust.md) | [GitHub](https://github.com/brson/wasm-opt-rs) | ☐ | ☒ | ☐ | | [Salaheldin Soliman](https://github.com/salaheldinsoliman) | [Solang developer experience improvements](Solang_developer_experience_improvements.md) | [GitHub](https://github.com/hyperledger/solang) | ☐ | ☐ | ☐ | | [Optymalizacja AI Grzegorz Miebs](https://github.com/miepsik) | [Validator selection](validators_selection.md) | [GitHub](https://github.com/miepsik) | ☐ | ☐ | ☐ | From bb2b69beee8bf164b8c30475027a5c9c44700064 Mon Sep 17 00:00:00 2001 From: Dastan <88332432+dastansam@users.noreply.github.com> Date: Wed, 11 Jan 2023 01:25:10 +0600 Subject: [PATCH 004/578] Fiat on-off ramps amendment (#1423) * add application * feedback to CR * added second feedback * update - API getBalance * Update FIAT-on-off-ramp.md update timeline and add Polkadot Developer * Update milestone 3 Co-authored-by: walter.strametz@gmail.com Co-authored-by: wasabrot <28702988+wasabrot@users.noreply.github.com> --- applications/FIAT-on-off-ramp.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/applications/FIAT-on-off-ramp.md b/applications/FIAT-on-off-ramp.md index d0c4ccaba0d..fabf5a628fb 100644 --- a/applications/FIAT-on-off-ramp.md +++ b/applications/FIAT-on-off-ramp.md @@ -254,17 +254,17 @@ For this proposal we focus on building a simple substrate based chain containing ### Milestone 3 Documentation & Demo-Dapp -* **Estimated Duration:** 1 month +* **Estimated Duration:** 1.5 month * **FTE:** 1 * **Costs:** 5.000 USD | Number | Deliverable | Specification | | -----: | ----------- | ------------- | | 0a. | License | Apache 2.0 | -| 0b. | Tutorial | Installation instruction with "Hello World" example. We want to provide a similar repos like the ones used by our Ethereum solution: https://github.com/element36-io/cash36-ping and a "buy me a coffee" demo app similar to that one here: https://github.com/element36-io/cash36-examples | -| 1. | Coffee Smart Contract | A "buy me a coffee" contract. It will accept a payment and cash out automatically to the benefit of a hardcoded recipient who will be receiving the funds in FIAT. | -| 2. | Dapp | The Dapp which uses the "by me a coffee" Smart Contract. | -| 3. | Docker-Compose: node & Dapp | We will add the Dapp to the docker-compose file of Milestone 2 to demonstrate the full functionality of our chain, the ocw, including a proxy for the FIAT Rest Interface developed in Milestone 1 and the "buy me a coffee" Dapp. | +| 0b. | Tutorial | We will provide a tutorial for using the following app for two different scenarios: donating with stablecoin and donating via bank transfer that ends up in the chain. | +| 1. | Buy me a coffee dApp | DApp where users can accept donations in stablecoin or via bank transfer, similar to **Buy Me a Coffee** service. This will consist of a frontend app in React which serves as an interface for interacting with the chain. Users will be able to link their on-chain `AccountId` to their bank account details (IBAN, balance, etc.), withdraw on-chain balance to their bank account and transfer funds in the bank account via on-chain extrinsic. | +| 2. | Docker-Compose: node & Dapp | We will add the Dapp to the docker-compose file of Milestone 2 to demonstrate the full functionality of our chain, the ocw, including a proxy for the FIAT Rest Interface developed in Milestone 1 and the "buy me a coffee" Dapp. | + ## Future Plans First step is to prove technical feasibility and also to learn more about the concepts of the Polkadot ecosystem. We already have some ideas in which direction we want to continue, but that is to be validated. In other words - maybe our thoughts will not make sense once we know more :) So far, our next milestones and development goals: From 9e145d6f5c9fbe7c76ec63783a1979a50d4c2757 Mon Sep 17 00:00:00 2001 From: Everett Hildenbrandt Date: Tue, 10 Jan 2023 12:26:06 -0700 Subject: [PATCH 005/578] applications/rv-kmir: minor corrections (#1422) applications/rv-kmir: closer to original template applications/rv-kmir: copy application template applications/rv-kmir: first draft applications/rv-kmir: corrections to application --- applications/rv-kmir.md | 275 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 275 insertions(+) create mode 100644 applications/rv-kmir.md diff --git a/applications/rv-kmir.md b/applications/rv-kmir.md new file mode 100644 index 00000000000..bb17cf710e3 --- /dev/null +++ b/applications/rv-kmir.md @@ -0,0 +1,275 @@ +# KMIR: the K semantics of MIR + +- **Team Name:** Runtime Verification, Inc. +- **Payment Address:** 0xA3250Ab6292F2aAe7DE2DE5dC46Ba0D24dcf699E (USDC or DAI) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 3 + +## Project Overview :page_facing_up: + +### Overview + +*Overview:* + +There are many approaches towards (property) testing of Rust programs, such as [proptest](https://docs.rs/proptest/latest/proptest/) or [quickcheck](https://docs.rs/quickcheck/latest/quickcheck/) or [arbitrary](https://docs.rs/arbitrary/latest/arbitrary/). +They are quite effective, and most likely sound, but certainly not complete due to the very notion of a test as opposed to a formal proof. +We would like to build out formal verification capabilities for Rust developers. + +The [K Framework](https://kframework.org/) is a language-agnostic semantic framework, quite suitable for the definition of programming language semantics, from which many compiler and verification related tools can be automatically generated. + +We seek to develop **KMIR: the [K](http://github.com/kframework) semantics of the [MIR language](https://rustc-dev-guide.rust-lang.org/mir/index.html)**, which is an [internal representation for the Rust compiler](https://blog.rust-lang.org/2016/04/19/MIR.html). +This will enable more scalable verification for the Rust programming language. +A robust commitment to security and assurance does not end with a completed security audit (which we have experience doing for various Rust-based projects). +Rather, it requires that all available tools and techniques are used, including rigorous proof-based formal verification (among others). +Supporting the development of the KMIR semantics will enable verification at scale for smart contract developers targeting the Polkadot (and related) ecosystem. + +*Background:* + +Runtime Verification [has attempted verification of Rust programs](https://github.com/runtimeverification/polkadot-verification) in the past. +Our past approach relied on compiling to WebAssembly and then using our KWasm semantics for verification. +This suffered from two problems: + +- The generated WebAssembly was large, making verification less tractable, and +- We could not handle Rust code compiled to a non-WebAssembly target. + +In the WebAssembly setting, even simple Rust programs (just a few hundred lines) were compiled to WebAssembly programs that were ~100 kLOC. +Much of the generated code is boilerplate inserted by the compiler, which is uninteresting when verifying program correctness, but slows the verification process down significantly. + +KMIR solves both problems. +The Rust compiler goes through MIR before compiling to any target language, and MIR is much closer to Rust than (the generated) WebAssembly. +Because of this, verification of MIR should be more tractable as we’ll be dealing with code-sizes that are closer to the original Rust source code size. +This allows the difficulty of verification to be bounded by the complexity of the application rather than the complexity of the compiler toolchain. + +### Project Details + +*Goals:* + +- Develop the KMIR semantics. +- Understand and document how to use KMIR to do verification. +- Initial integration of KMIR into Rust development workflow. + +*Deliverables:* + +- A first draft of the MIR semantics in K. +- Corpus of tests which exercise the feature set of MIR. +- Timeboxed initial KMIR semantics, which makes progress towards passing the tests. +- The **kmir** command-line tool, which allows users to try out the initial semantics on the test-suite and other examples. +- Integration with the [**kup** tool](https://github.com/runtimeverification/kup/), for one-command installation of K semantics and tooling. +- Blog post describing the progress made, and instructing people how they can try out the semantics themselves. + +### Ecosystem Fit + +Our project fits into the ecosystem as **developer tooling**. +This tool will help Rust smart contract developers to improve their quality assurance pipeline and to move towards formal verification on their own. + +The initial version delivered in this workplan will be focused on providing **expert developer tooling**. +In particular, only developers who spend extra time learning K will be able to be effective with the tool. +The next version delivered (seeking funding elsewhere) will be focused on providing **developer tooling**; typical Rust smart contract developers should be able to use it. + +## Team :busts_in_silhouette: + +### Team members + +- Team Lead: Yan Liu +- Team Members: Christiano Braga, Everett Hildenbrandt + +### Contact + +- **Contact Name:** Patrick MacKay +- **Contact Email:** patrick.mackay@runtimeverification.com +- **Website:** https://runtimeverification.com + +### Legal Structure + +- **Registered Address:** 1807 South Neil Street, Champaign, IL 61820 +- **Registered Legal Entity:** Runtime Verification, Inc. + +### Team's experience + +Runtime Verification has significant past experience doing program verification for a variety of programming languages. +In particular, KEVM has been used for verifying Ethereum smart contracts, and KPlutus has been used for verifying Plutus smart contracts. + +### Team Code Repos + +- https://github.com/runtimeverification +- https://github.com/runtimeverification/evm-semantics +- https://github.com/runtimeverification/beacon-chain-verification +- https://github.com/runtimeverification/deposit-contract-verification +- https://github.com/runtimeverification/deposit-contract-verification +- https://github.com/runtimeverification/plutus-core-semantics +- https://github.com/runtimeverification/avm-semantics + +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. + +- https://github.com/yanliu18 +- https://github.com/ChristianoBraga +- https://github.com/ehildenb + +### Team LinkedIn Profiles (if available) + +*N/A* + +## Development Status :open_book: + +Work scheduled to start January 2023. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:**: 14 weeks +- **Full-Time Equivalent (FTE):** 1.5 +- **Total Costs:** 100000 USD +- ***License:** BSD-3 + +This is the workplan submitted for the Web3 Foundation’s consideration. +It is focused on delivering a prototype that can be easily installed, tested, and used by the community. +This prototype will not be a complete semantics for MIR given the proposed timeframe, but it will be thoroughly tested and have a clear path to completion. + +### Milestone 1 - KMIR Tests + +- **Estimated duration:** 3 weeks +- **FTE:** 1.5 +- **Costs:** 21000 USD + +Developing a language semantics requires a test suite to exercise the semantics. +The tests should try to cover all of the language features, while being small and targeted for each individual language feature. +Note that to fit into the 100000 USD budget, the initial **miri** investigation phase has been cut, which may cause delays in this phase as we have to investigate this tool. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | BSD-3 | +| **0b.** | Documentation | A short README will be provided describing how to interperet the tests. | +| **0c.** | Testing and Testing Guide | CI will be set up with K and **miri** pre-installed. | +| **0d.** | Docker | Our CI setup relies on Dockerfiles for reproducibility, so a Dockerfile will be supplied. | +| 1. | MIR code snippets | For each syntactic/semantic feature of MIR language, write a targeted test and the expected execution result. | +| 2. | Generate output from **miri** | Use **miri** (or another suitable tool, if this proves to not work), to confirm the expected output for each test. | +| 3. | **kmir** executable stub | Initial no-op **kmir** executable which fails all the input test, but can be called on CI in parallel to **miri** for conformance testing. | + +### Milestone 2 - KMIR Syntax + +- **Estimated duration:** 3 weeks +- **FTE:** 1.5 +- **Costs:** 22000 USD + +Specify the syntax of MIR programs in K. +Ensure we can parse all the conformance tests developed in the previous step. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | BSD-3 | +| **0b.** | Documentation | The README will be augmented with instructions on calling the parser. | +| **0c.** | Testing and Testing Guide | Tests from the previous step will be parsed on CI to ensure we can parse valid MIR programs. | +| **0d.** | Docker | Our CI setup relies on Dockerfiles for reproducibility, so a Dockerfile will be supplied. | +| 1. | KMIR syntax | Develop the syntactic constructs of KMIR needed to parse the supplied conformance tests. | +| 2. | **kmir** executable extension | Provide subcommand **kmir parse** which can be used on CI or on CLI to parse MIR programs. | + +### Milestone 3 - KMIR Semantics + +- **Estimated duration:** 6 weeks (timeboxed) +- **FTE:** 1.5 +- **Costs:** 50000 USD + +Specify the semantics of MIR programs in K. +Progressively pass more of the conformance test-suite developed prior. +This step is timeboxed because finishing the semantics is unlikely given the timeframe. +We expect significant progress will be made in this timeframe. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | BSD-3 | +| **0b.** | Documentation | The README will be augmented with instructions on calling the interpreter. | +| **0c.** | Testing and Testing Guide | Tests from the previous step will be executed on CI to ensure conformance with **miri**. | +| **0d.** | Docker | Our CI setup relies on Dockerfiles for reproducibility, so a Dockerfile will be supplied. | +| 1. | KMIR semantics | Develop the semantic constructs of KMIR needed to execute the supplied conformance tests (timeboxed to 8 weeks). | +| 2. | **kmir** executable extension | Provide subcommand **kmir run** which can be used on CI or on CLI to run MIR programs. | + +### Milestone 4 - Documentation/Packaging/Announcement + +- **Estimated duration:** 2 weeks +- **FTE:** 1.5 +- **Costs:** 6000 USD + +Write a blog post which outlines: + +- Progress on the semantics, +- How to install **kmir** and try it, and +- Future plans for **kmir**. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | BSD-3 | +| **0b.** | Documentation | README augmented with more instructions on using the developed interpreter. | +| **0c.** | Testing and Testing Guide | Tests from the previous step will be executed on CI to ensure conformance with **miri**. | +| **0d.** | Docker | Our CI setup relies on Dockerfiles for reproducibility, so a Dockerfile will be supplied. | +| 1. | KMIR documentation | Ensure that new users can follow instructions in the README to build the project from source. | +| 2. | **kup** integration | Ensure that [**kup**, the K package manager](https://github.com/runtimeverification/kup), can be used to install the semantics and run MIR programs. | +| 2. | Blog post | A short annuoncement of the progress on the project, including instructions on how to install and use it via **kup**. | + +## Future Plans + +Given the target scope of the project, these tasks have been pushed to future work. +These can be funded in whole or part by the Web3 Foundation at the conclusion of the first phase. + +Future Deliverables (to be submitted as part of future proposal to Web3 Foundation or to additional funding entity): + +- Completion of the KMIR semantics, together with measurement of semantic coverage of the developed conformance test suite. +- Low-level “expert-mode” verification capabilities added to the kmir tool. +- High-level “developer-mode” verification capabilities added to the kmir tool, via connection to Rust property testing. + +### Finish Semantics + +At the end of this step, we should have high confidence that we have an accurate model of the MIR language which can be used to faithfully execute Rust programs using our semantics-derived interpreter. +This groundwork ensures that the verification capabilities developed later will actually be relevant to real Rust programs. + +- *Finish existing tests*: + Make sure that there are no existing tests in the developed conformance test-suite that are not parsing or passing. +- *Testing coverage*: + Set up semantics coverage measurement on CI. + - Automate measuring semantic (rule and branch) coverage of the K definition of the conformance test-suite. + - Publish the coverage reports on CI. + - Extend the test-suite to reach 100% (or close to) coverage. + +### “Expert-mode” Verification Capabilities + +First, we develop the K expert verification tool, because developer-level tools will build directly on this foundation. +This is similar to how our Foundry integration builds on KEVM which allows programmers to write property tests in Solidity that are discharged via symbolic execution with K with no extra manual steps. + +- *Simple verification challenges*: + Try out simple hand-written MIR verification on this semantics. + Common verification challenges for this step are functional correctness of simple arithmetic functions (integer maximum, fixed point multiplication, sum of list, sum to N, etc…). +- *Manual real-world verification*: + Timeboxed verification of chosen real-world Rust smart contract. + This first verification will uncover many inefficiencies we can address in the semantics, as well as giving people a sense of the scale/difficulty of attempting verification using this tool. + Blog post describing: + - How much progress was made on the verification in the given timeframe. + - How the verification was accomplished (for reproducibility). + +### “Developer-mode” Verification Capabilities + +The goal for this part is to provide an interface to KMIR-based verification that is intuitive to Rust developers. +This requires bridging the gap between KMIR and the Rust source language, and property testing has proven to be an effective way to do that. +Here we’ll follow the same approach as KEVM’s Foundry integration mentioned above: + +- *Write Rust property tests*: + Develop a corpus of Rust property tests in one of the frameworks mentioned above which attempts to encompass a wide range of the Rust language. + They should be small tests focused on exploring each of Rust’s features as independently as possible. +- *Rust-level verification*: + Develop the needed infrastructure so that users can write property tests in Rust and discharge them using KMIR symbolic execution (instead of fuzzing or other testing methods for Rust programs). + Start by manually doing so for several simple property tests from the previous step and documenting the steps. + This will involve compiling the property test to MIR, and constructing the appropriate K prover query using the MIR as input. +- *Real-world verification*: + Select a project to attempt verification on (a DeFi app). + We’ll develop (or extend) the property testing for that app. + We’ll also do a best-effort (timeboxed) attempt to discharge the generated verification conditions, improving the semantics (and adding lemmas) to make it possible. + Write blog post describing the outcome, including answers to the following questions: + - How much progress was made in the given timeframe? + - How was the verification accomplished (how to reproduce our work)? + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Direct contact with grants committee. + +There is a large body of testing tools for Rust, e.g. proptest, quickcheck, arbitrary, or creusot, to name a few. +These lack the completeness that "ships for free" with program verification tools such as the K Framework. +Runtime Verification has successfully applied the techniques presented in this proposal to several projects, including other blockchain language semantics such as EVM, Plutus, and AVM. +We are confident that the tooling resulting from this project, should it be financed, will be an important contribution to the Rust community, being a sound, complete and effective approach to Rust program verification. From e805d8e0b274afb2873663cba03cf846b01fb256 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 10 Jan 2023 20:28:12 +0100 Subject: [PATCH 006/578] Update index.md Add KMIR --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 9cd1dfe0c3a..a00ce44f910 100644 --- a/applications/index.md +++ b/applications/index.md @@ -583,4 +583,4 @@ Use this page for an overview of all public grants and their status. Use the sid | [ArtZero](https://artzero.io/) | [ArtZero & InkWhale](ArtZero_InkWhale.md) | [GitHub](https://github.com/artzero-io) | ☐ | ☐ | ☐ | | EightFish | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☐ | ☐ | | [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☐ | ☐ | - +| [Runtime Verification](https://runtimeverification.com/) | KMIR: the K semantics of MIR | [GitHub](https://github.com/runtimeverification) | ☐ | ☐ | ☐ | From 8085a942d636b28db98b50ae00d374ecac76d270 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 10 Jan 2023 20:29:11 +0100 Subject: [PATCH 007/578] Update index.md fix KMIR file link --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index a00ce44f910..a88916bffa4 100644 --- a/applications/index.md +++ b/applications/index.md @@ -583,4 +583,4 @@ Use this page for an overview of all public grants and their status. Use the sid | [ArtZero](https://artzero.io/) | [ArtZero & InkWhale](ArtZero_InkWhale.md) | [GitHub](https://github.com/artzero-io) | ☐ | ☐ | ☐ | | EightFish | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☐ | ☐ | | [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☐ | ☐ | -| [Runtime Verification](https://runtimeverification.com/) | KMIR: the K semantics of MIR | [GitHub](https://github.com/runtimeverification) | ☐ | ☐ | ☐ | +| [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☐ | ☐ | From 755a04cba749c8326bd2c79e851d6cbe98953c3e Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Wed, 11 Jan 2023 10:22:15 +0100 Subject: [PATCH 008/578] Create stale_checker.yml (#1428) The action checks every day at 7:00 UTC if pull requests are on stale. If yes, they get labeled, and a message gets sent to the Matrix channel. See https://github.com/0xCaso/label-stale-pull-requests/ --- .github/workflows/stale_checker.yml | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 .github/workflows/stale_checker.yml diff --git a/.github/workflows/stale_checker.yml b/.github/workflows/stale_checker.yml new file mode 100644 index 00000000000..f8c84235c9b --- /dev/null +++ b/.github/workflows/stale_checker.yml @@ -0,0 +1,25 @@ +name: Stale checker + +on: + schedule: + - cron: '0 7 * * *' # run at 7:00 UTC every day + workflow_dispatch: + +jobs: + mark_as_stale: + if: github.repository_owner == 'w3f' + runs-on: ubuntu-latest + steps: + - id: stale + uses: 0xCaso/label-stale-pull-requests@v1 + with: + context: ${{ toJSON(github) }} + token: ${{ secrets.GITHUB_TOKEN }} + - if: steps.stale.outputs.message != '' + uses: fadenb/matrix-chat-message@v0.0.6 + with: + homeserver: 'matrix.web3.foundation' + token: ${{ secrets.MATRIX_TOKEN }} + channel: ${{ secrets.MATRIX_CHANNEL_ID }} + message: | + ${{ steps.stale.outputs.message }} From 6e103c1743e0a6fc0f71789119ed7f7df94a9913 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Wed, 11 Jan 2023 11:30:20 +0100 Subject: [PATCH 009/578] Update index.md (#1429) Admeta -> first delivery + completed --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index a88916bffa4..02b08936cb3 100644 --- a/applications/index.md +++ b/applications/index.md @@ -404,7 +404,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Koi Metaverse](https://koi.io/) | [Building the Digital Collectibles Platform for Virtual GameFi NFTs](./Koiverse.md) | [GitHub](https://github.com/KoiMetaverse) | ☐ | ☐ | ☐ | | [Health Hero](https://www.gohealthhero.com/) | [Decentralized Well-being Game API](./decentralized_well-being_game_api.md) | [GitHub](https://github.com/iumairazhar) | ☐ | ☐ | ☐ | | [UNIVERSALDOT FOUNDATION](https://universaldot.foundation) | [A freelancing decentralized application](./universaldot.me.md) | [GitHub](https://github.com/UniversalDot) | ☐ | ☒ | ☒ | -| [AdMeta](https://admeta.network/) | [A privacy-preserving Ad Platform](./AdMeta.md) | [GitHub](https://github.com/AdMetaNetwork/admeta) | ☐ | ☐ | ☐ | +| [AdMeta](https://admeta.network/) | [A privacy-preserving Ad Platform](./AdMeta.md) | [GitHub](https://github.com/AdMetaNetwork/admeta) | ☐ | ☒ | ☒ | | Crypto Pay Lab (CPL)) | [Dotpay a github paid task platform using DOT](./DotPay.md) | [GitHub](https://github.com/bytepayment) | ☐ | ☒ | ☐ | ## 2022 From fb8fd50c80fbb80958ade8d0bcf9e580ab4d70f9 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Thu, 12 Jan 2023 03:14:42 -0500 Subject: [PATCH 010/578] Update asylum_follow_up_1.md (#1427) --- applications/asylum_follow_up_1.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/asylum_follow_up_1.md b/applications/asylum_follow_up_1.md index c4fb4903f96..30b1d5ee7c7 100644 --- a/applications/asylum_follow_up_1.md +++ b/applications/asylum_follow_up_1.md @@ -3,6 +3,7 @@ - **Team Name:** Asylum - **Payment Address:** 0xB2a6bF365635ea209d7A824125c1bf249A189866 (USDT (ERC20)) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 +- **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/1000#issuecomment-1377343850) ## Project Overview :page_facing_up: From b8f4cc623ae789c811be9a4cfc15fe5315665763 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Thu, 12 Jan 2023 10:06:58 -0500 Subject: [PATCH 011/578] Update index.md (#1433) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 02b08936cb3..22ae0fb5bd9 100644 --- a/applications/index.md +++ b/applications/index.md @@ -517,7 +517,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [JURIMETRIC TECNOLOGIA LTDA](https://www.jurimetric.com.br/) | [Polkadart](./Polkadart.md) | [GitHub](https://github.com/rankanizer/polkadart) | ☐ | ☒ | ☐ | | [Skye Kiwi](https://skye.kiwi/) | [Choko Wallet](./choko_wallet.md) | [GitHub](https://github.com/skyekiwi) | ☐ | ☒ | ☐ | | [Popular Coding](https://www.popularcoding.com/) | [Ventur](./ventur.md) | [GitHub](https://github.com/popular_coding) | ☐ | ☒ | ☐ | -| [Asylum](https://asylum.space/) | [Asylum follow-up 1](./asylum_follow_up_1.md) | [GitHub](https://gitlab.com/asylum-space/) | ☐ | ☒ | ☐ | +| [Asylum](https://asylum.space/) | [Asylum follow-up 1](./asylum_follow_up_1.md) | [GitHub](https://gitlab.com/asylum-space/) | ☒ | ☒ | ☐ | | [Cyril Carlier](https://github.com/CrommVardek) | [Maki](./Maki.md) | [GitHub](https://github.com/CrommVardek) | ☐ | ☐ | ☐ | | [TopMonks](https://www.topmonks.com/) | [Calamar](./Calamar.md) | [GitHub](https://github.com/topmonks/calamar) | ☐ | ☒ | ☐ | | [Bela Supernova](https://bsn.si/) | [Rubeus Keeper](./RubeusKeeper.md) | [GitHub](https://github.com/bsn-si) | ☐ | ☒ | ☒ | From 5fb8f90ece5d2d2ae2ab6218cf993868e74e2c6b Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Thu, 12 Jan 2023 16:51:31 +0100 Subject: [PATCH 012/578] Update ready_for_review.yml (#1434) Check if this solves the `secrets` issue --- .github/workflows/ready_for_review.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ready_for_review.yml b/.github/workflows/ready_for_review.yml index 1ee754dcb23..980fc308d49 100644 --- a/.github/workflows/ready_for_review.yml +++ b/.github/workflows/ready_for_review.yml @@ -1,12 +1,11 @@ name: Ready for Review notification on: - pull_request: - types: [labeled] + pull_request_target: + types: [ready_for_review] jobs: send_matrix_review_msg: - if: github.event.label.name == 'ready for review' runs-on: ubuntu-latest steps: - uses: fadenb/matrix-chat-message@v0.0.6 From 9b5c02a773cec0185c8ba8318de0465c2bc18f70 Mon Sep 17 00:00:00 2001 From: OAMEN PAUL Date: Thu, 12 Jan 2023 20:24:20 +0100 Subject: [PATCH 013/578] Adding Me Protocol To Grants-Program (#1340) * added me protocol * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * updated info * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * Update MeProtocol.md * updated meprotocol.md with requested changes * updated meprotocol.md with requested changes * Update MeProtocol.md * Made Requested Changes --- applications/MeProtocol.md | 266 +++++++++++++++++++++++++++++++++++++ 1 file changed, 266 insertions(+) create mode 100644 applications/MeProtocol.md diff --git a/applications/MeProtocol.md b/applications/MeProtocol.md new file mode 100644 index 00000000000..1115dd6720f --- /dev/null +++ b/applications/MeProtocol.md @@ -0,0 +1,266 @@ +# W3F Grant Proposal + +- **Project Name:** Me Protocol +- **Team Name:** My AI +- **Payment Address:** Ethereum: 0xB35da2E7380a2580Acdc0ca5DEa9e2B152155e84 (USDC) +- **Level:** 2 + + +## Project Overview :page_facing_up: + +### Overview + +**What is the Me Protocol?** + The Me Protocol is a purpose-built exchange infrastructure for blockchain-based rewards. It provides the fundamental technology for the creation of a frictionless, limitless, and decentralised rewards ecosystem for all companies, large or small, to participate. + +**Background:** + +**Loyalty rewards are moving to a blockchain near you.** +Wouldn’t it be great if you could buy a coffee with unused airline miles? Or if your rewards never expired, and you could trade them? Whether it’s sports teams, airlines, hotels, Highstreet fashion or your local pizzeria, brands from almost every sector are looking to take advantage of what blockchain technology can do to transform the **$180b in global loyalty rewards by allowing rewards to be exchanged and redeemed across brands.** + +**Blockchain-based rewards are great for consumers, but also for brands:** +1. Customers not using rewards are **3x more likely to defect from a brand.** +2. While brands try their best to provide attractive offers, **less than half of rewards are actually used.** This is **$90b of value left on the table.** +3. Rewards on a blockchain can be more easily exchanged than traditional points, meaning **when a current customer cannot immediately use their rewards, they can exchange them with someone who can.** +4. This means **existing customers are happy and new customers are acquired** – unachievable with traditional loyalty programs. + +**Making blockchain-based rewards work in practice however requires solving two general problems:** +- **Accessibility** – Simply creating a reward token that can be exchanged doesn’t mean that it will be exchanged. + 1. Where do you go to redeem the rewards? + 2. How do you exchange them? + 3. Most consumers will not bother to search for loyalty redemption options, then go find a DEX, then a peer and then calculate what they need to swap to get the rewards they need. + + **Solution** – We are building a dedicated **‘reverse’ marketplace** for blockchain-based loyalty rewards. Simplified redemption, for everyone, from every brand, with the exchange complexity hidden in the background. + + - **Liquidity** – Just because a brand wants to release reward tokens, doesn’t mean they can be easily exchanged in a marketplace. + 1. What is the value of these reward tokens? + 2. How do we ensure that the exchange brings benefits to the brand as well? + 3. How do we balance inflow and outflow and drive new customers to brands? + 4. What do we do about tokens on different blockchains? + + **Solution: The Me Protocol.** Specifically designed to power the emerging brand economy by facilitating the exchange of brand loyalty rewards. + +**Why are we motivated to build in the Substrate/Polkadot/Kusama ecosystem?** +We like the ecosystem for several reasons: + +- We share the same philosophy of interoperability. +- Our exchange functionality utilizes the concept of decentralized exchanges but engineered for loyalty rewards, leveraging Polkadot's ecosystem for cross-chain operations. +- As we continue to develop our protocol, it should integrate with other related protocols and be used by other applications without being constrained to one network. + + +## Project Details + +![Polkadot ecosystem](https://user-images.githubusercontent.com/52800276/205578388-a180149c-19f1-4bf2-8333-4f8911a7c986.png) + +### Technologies: + 1. Ink! and RUST (smart contracts), + 2. OpenBrush (smart contract library) + 3. Substrate (smart contract) + 4. Polkadot.js (back end and frontend integration with smart contract) + 5. TypeSript (front end and backend scripts) + 6. NestJs and Reactjs (backend and front end framework) + 7. PostgreSQL with Typeorm (database and connection) + 8. Elastic Search and Redis Cache (searching and indexing) + 9. Fastify Multipart (image management), + 10. Winston (logging) + 11. Docker (containerization) + 12. Nestjs testing and jest (testing) e.t.c + +### Architectural Summary + +newmearchitecture + +Our solution has two major components: the Me App and the Me protocol. + +**The Me App** contains all the necessary interfaces, services, microservices and infrastructure that allows consumers (individual users) to sync/manage/connect their loyalty rewards and interact with offers pushed to them from the various brands and businesses on our platforms that issued those rewards. These users can redeem their rewards for offers in the marketplace. The Me App also handles all the logic for managing brand accounts, allowing them to push offers to their customers and providing them with analytics on the performance of their rewards programs and offers in our ecosystem. + +**The Me Protocol** contains all the contracts, libraries and abstract contracts used to manage tokenized brand rewards, swap them and route them to appropriate wallets. It also contains the various utilities for managing pools such as the brand fee pool, brand treasury pool, and brand bounty pool. + +For a start, the protocol would simply be a set of smart contracts containing all the necessary business and operational logic, but eventually it would evolve into a parachain to further serve the peculiarities and nuances of the loyalty reward space. + +The design of the protocol follows the EIP-2535 pattern originally proposed by nick mudge. + +Screenshot 2022-12-06 at 15 39 56 + +There is a main contract which houses the utility storage for the protocol and some function selectors via which it can route to other contracts called facets, containing the business logic to be executed. The routing is done via delegatecall. + +While other facets serve one business logic or another, the upgrader and loupe help to manage upgrades (following governance decisions) and introspection into the protocol respectively + + + +### Ecosystem Fit + +**Where do we fit in the Web3 ecosystem?** +In as much as we can generalize, our project fits somewhere in the middle of Social (shareable rewards), DeFi/Exchange (rewards economy), Identity (allowing users to own the data keys to their loyalty) spaces. If you consider ‘ecommerce’ a sector, then we are definitely there (decentralized commerce). + + **Target Audience** +We hope the project attracts dapp and other developers to build integrations and participate in the further development of the protocol. +- The protocol will integrate with our marketplace so the target audience for that includes everyday consumers and brands/businesses seeking to transition to blockchain-based loyalty programs + +- Web3-based projects with utility/reward tokens, social protocols, etc. that want to increase the value of their rewards. + +**Needs that we meet** +In addition to those covered in the above sections: +- Web3-based applications with utility tokens/rewards are in need of a way to extend out the value of these rewards beyond saying they are listed on an exchange or that they can be used for gas and a few other redemption options. Our protocol and the apps built around it will provide unlimited redemption options, thus increasing reward value for innumerable Web3 projects. + +- Example: social protocols, leveraging blockchain to facilitate human interaction, can also leverage the Me protocol to boost engagement and provide real value to current and prospective users. + + **Similar projects in the Substrate / Polkadot / Kusama ecosystem?** +A similar project on the DEFI side is Stellaswap (https://stellaswap.com/) and on the loyalty program side is Project Venkmann https://www.venkmanholdings.com/ + + **How are we different?** + - Me Protocol is different from Stellaswap because we are not a typical DEX, we just use the concepts of decentralized exchanges to power our multi-vendor loyalty program and to enable the swapping of loyalty rewards across brands. Consumers of these rewards would hardly know that there is a swap, all they know is that they can spend the same reward across multiple brands. + +- Me Protocol is also different from project Venkmann because we do not set out as a loyalty program manager for brands, rather we are the interoperator of loyalty programs, providing one blockchain protocol that brands and even loyalty program managers can integrate to enable a multivendor loyalty ecosystem where rewards can be moved seamlessly across brands with no overhead. + + +## Team :busts_in_silhouette: + +### Team members + + **Name of team leader** + Robert Wesley (CEO) + + **Names of team members:** + - Robert Wesley (CEO) + - Paul Oamen (CTO) + - Pius Onobhayedo + - John Chimaobi + - Samuel Anthony + - Boluwatife Oguntoyinbo + - Nwele Uchenna + + We will be hiring an additional Rust/Ink! developer + +### Contact + +**Contact Name:** Robert Wesley +**Contact Email:** wesley@meprotocol.io +**Website:** https://meprotocol.io + +### Legal Structure + +- **Registered Address:** My AI Inc. 251 Little Falls Drive, Wilmington, New Castle County, Delaware 19808 USA (registered address); 8 The Green Suite 11901 Dover, DE 19901 (business address) + +- **Registered Legal Entity:** My AI Inc. (Delaware C Corp) + +### Team's experience + +We have founded and co-founded several tech companies (e.g. Kivu Technologies, Cognitive Architectures, Useful Technologies) and worked on a variety of complex software development projects spanning graph computing to blockchain based solutions. + +- **Robert Wesley (CEO)** is an international serial entrepreneur. Having founded five organisations across sectors and continents, Robert's diversity of entrepreneurial experiences spans from graph computing to blockchain to AI. Founder @ Sender Ventures; Founder @ KIVU Technologies; Co-Founder @ Cognitive Architectures; International Diplomat @ UN; MBA @ESADE + +- **Paul Oamen (CTO)** is one of Nigeria's rising Web3 stars, where in addition to venture building, set up and served as the principal instructor at the Pan Atlantic University's Blockchain Programme and is a core contributor to the zone blockchain, Africa's layer-1 Blockchain network for digital payments in fiat and regulated digital currencies. Co-Founder @ Usefull Technologies; Blockchain Instructor @ Pan-Atlantic University, Lagos Business School; + +- **Dr. Pius Onobhayedo** is the Head of the Computer and Information Sciences Department at the Pan-Atlantic University. Aside from building an entire university department, Dr. Onobhayedo’s distinguished career has also included appointments at the University of Southern California in the United States and the University of Navarra in Spain. He has also served as CTO of multiple software companies. + + + + +### Team Code Repos + +- https://github.com/Me-Protocol + + +GitHub accounts of team members + +- https://github.com/AgentPoles +- https://github.com/developeruche +- https://github.com/codemobii +- https://github.com/piosystems +- https://github.com/Teepheh-Git +- https://github.com/thellecodes + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/robert-wesley/ +- https://www.linkedin.com/in/paule-oamen/ +- https://www.linkedin.com/in/piusono/ + + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 4 months +- **Full-Time Equivalent (FTE):** 2400 hrs +- **Total Costs:** 29600 USD + +### Milestone 1 — Implement the Core Parts of the Protocol + +- **Estimated duration:** 1 month +- **FTE:** 800hrs (5 persons) +- **Costs:** 12,500 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | Apache 2.0 / GPLv3 / MIT / Unlicense | +| 0b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user, brand or third party application can interact with our protocol for the various specified use cases | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish a **lite paper** to describe the architecture and its implementation +| 1. |Build out the Pool Component| We will implement the Rewards Pool Component which contains the contracts, libraries and interfaces that describe and manage the sets of AMM pools for brand loyalty rewards. This component primarily consists of the pool contract, which manages all the logic relating to brand liquidity (swapping, adding, removing, multistage swapping, etc.), and the Pool initiator contract, which would create a pool every time a new brand reward is to be supported on our protocol. These are similar in concept to Uniswap Pool and Pool Deployer contracts, but with different requirements/implementation logic and no concentrated liquidity.
**Languages and framework:** Ink!, Openbrush| +| 2. | Build out the rewards factory component | We will implement the Rewards Factory, which allows brands with or without Web3-based rewards to move some or all of their loyalty points to the blockchain using the PSP22 standard (and also PSP34/PSP1155 in the future). It contains the function for creating a new PSP22 token and keeping track of the associated brand.
**Languages and framework:** Ink!, Openbrush | +| 3. | Build out the Rewards Periphery Component| We will implement the Rewards Periphery Component that provides a form of incentivization to brands when their rewards are used to redeem offers across other brands. This component consist of two major contracts: Brand Bounty and Brand Treasury Contracts. Brand Treasuries are small fees paid by brand A to brand B when a customer from brand B chooses to redeem his/her reward with brand A. The treasury is a smart contract that holds these tokens, mapped to the appropriate brand. Brand bounties on the other hand are small amounts of reward tokens charged to a customer when he chooses to redeem that reward with another brand (typically swapping in our protocol). These small fees are stored in the Bounty Contract and when a bounty threshold is reached, they are issued as rewards to promote the issuing brand.
**Languages and framework:** Ink!| +| 4. | Build out the service payment component| We will implement the Service Payment Component that brands and other integrating third-party applications will use to pay for the various services rendered to them through the protocol and business applications. This component consists of the payment/fee contract, which contains the logic to handle the reception of these tokens, mapped to the payer, and the logic to release these tokens when a paid service is rendered to the payer.
**Languages and framework:** Ink!| +| 5. | Build Out the Rewards Valuation Oracle Component| We will implement the Rewards Valuation Oracle Component, which helps to manage all external requests relating to rewards pricing and valuation in the protocol based on the supply and demand of these rewards in the pool. It consists primarily of the oracle contract that provides information on the valuation of rewards in our protocol.
**Languages and framework:** Ink!| + + + +### Milestone 2 — Adding the Protocol Peheripherals and Kickstarting the Frontend and Backend services + +- **Estimated Duration:** 1 month +- **FTE:** 800hrs (5 persons) +- **Costs:** 8,550 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | Apache 2.0 / GPLv3 / MIT / Unlicense | +| 0b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user, brand or third party application can interact with our protocol for the various specified use cases | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish a **lite paper** to describe the architecture and its implementation +| 1. |Build out the Protocol Access Component| We will implement the Access Component, which consists of contract routers that abstract the core protocol services and provide functions that brands, customers, protocol admins, and third-party applications can use to safely interact with the protocol. These are similar to the Uniswap router contracts, but instead of just one general contract, the contracts are split into Customer, Brand, Admin, and in the future Third-Party Contracts, based on the role of the requestor. A brand router, for example, will expose the functions that allow a brand to create a reward (using the reward factory), mint additional rewards or burn existing rewards, add or remove rewards from the liquidity pool, top up fee wallet, etc.
**Languages and framework:** Ink! | +| 2. | Build out the lens component | We will implement the Lens Component that provides introspection into the protocol. This component is comprised of the Secretary and Loupe Modules. The Secretary Contract would provide business information like how many brands are connected to the protocol, total loyalty rewards in pools, etc. The Loupe Contract provides protocol architecture information, such as what functions the protocol supports and where these functions are deployed (it is an implementation of the EIP2535 DiamondLoupe Contract) etc.
**Languages and framework:** Ink!| +| 3. | Building out the Governance Component | We will implement the Governor Facet that will help to manage access control across the protocol and also help to manage governance rules for future proposals and updates.
**Languages and framework:** Ink!| +| 4. |Build out the Backend Service Components for the Me App| We will implement some key utilities for the back-end services to be used by integrated apps, such as logging (Winston); data caching (Redis Cache); search indexing (Elastic search); database and connection (Postgres TypeOrm); mailing service (Nestjs nodemailer with sendgrid abi); image upload with (Fastify multipart); and entities and their relationships (Typescript, NestJs, PostgreSQL).| + + + + + + +### Milestone 3 — Rounding Up with the APP MVP and Integrating the Protocol with the APP + +- **Estimated Duration:** 1 month +- **FTE:** 800hrs (5 persons) +- **Costs:** 8,550 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | Apache 2.0 / GPLv3 / MIT / Unlicense | +| 0b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user, brand or third party application can interact with our protocol for the various specified use cases | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish a **lite paper** to describe the architecture and its implementation +| 1. | Build out the Asset Management Component of the Me APP| We will implement all the necessary screens, services and microservices that let brand customers to keep track of, earn and spend rewards in applications and also for brands to keep track of, distribute and manage their rewards in applications.
**Languages and framework:** TypeScript, Nestjs, Reactjs, Polkadotjs.| +| 2. | Build out the offers management component of the Me APP| We will implement all the necessary screens and provide all the necessary services and microservices that will allow brands to integrate their offers, create new offers and push them to applications and also allow brand customers to search offers, filter offers, view price, see offers whose rewards they have, redeem these offers with their rewards.
**Languages and framework:** TypeScript, Nestjs, Reactjs, Polkadotjs, PostgreSql| + + + + +## Future Plans + +- We will first incorporate the Me Protocol into our own marketplace. This should provide significant exposure to the project and prove-out its utility for additional projects. Our company, My AI, will be dedicated to supporting the protocol as a core developer during near- and long-term. +We will also be establishing a DAO as we move forward that will provide additional governance of the project as we progressively decentralise. + +- We also plan to offer a significant suite of perks, bounties, rewards etc. to contributors of the project to encourage wider participation during the formative period as well as into the longer term. + +- In the end, the Me Protocol should be an integral component of the emerging ‘brand economy’ as a key piece of infrastructure for meta- and non-metaverse rewards. + + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Was recommended that we apply by Daniel Cake-Baly from Parity Technologies. + +**Previous grants:** We received financial support in the form of an investment from the Blockchain Founders Group. From 39425b79856476279d52fb958312a752f5ae0525 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 12 Jan 2023 20:26:44 +0100 Subject: [PATCH 014/578] Update index.md Adding Me Protocol --- applications/index.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/applications/index.md b/applications/index.md index 22ae0fb5bd9..5ecc88343e2 100644 --- a/applications/index.md +++ b/applications/index.md @@ -584,3 +584,5 @@ Use this page for an overview of all public grants and their status. Use the sid | EightFish | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☐ | ☐ | | [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☐ | ☐ | | [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☐ | ☐ | +| [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | + From 9c599edd7e032e7c61fc221098bac2379d1b4e6f Mon Sep 17 00:00:00 2001 From: Noc2 Date: Thu, 12 Jan 2023 20:39:34 +0100 Subject: [PATCH 015/578] fix me protocol --- applications/MeProtocol.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/applications/MeProtocol.md b/applications/MeProtocol.md index 1115dd6720f..34238704627 100644 --- a/applications/MeProtocol.md +++ b/applications/MeProtocol.md @@ -68,7 +68,7 @@ We like the ecosystem for several reasons: ### Architectural Summary -newmearchitecture +newmearchitecture Our solution has two major components: the Me App and the Me protocol. @@ -80,7 +80,7 @@ For a start, the protocol would simply be a set of smart contracts containing al The design of the protocol follows the EIP-2535 pattern originally proposed by nick mudge. -Screenshot 2022-12-06 at 15 39 56 +Screenshot 2022-12-06 at 15 39 56 There is a main contract which houses the utility storage for the protocol and some function selectors via which it can route to other contracts called facets, containing the business logic to be executed. The routing is done via delegatecall. @@ -199,11 +199,11 @@ GitHub accounts of team members | 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | | 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | | 0e. | Article | We will publish a **lite paper** to describe the architecture and its implementation -| 1. |Build out the Pool Component| We will implement the Rewards Pool Component which contains the contracts, libraries and interfaces that describe and manage the sets of AMM pools for brand loyalty rewards. This component primarily consists of the pool contract, which manages all the logic relating to brand liquidity (swapping, adding, removing, multistage swapping, etc.), and the Pool initiator contract, which would create a pool every time a new brand reward is to be supported on our protocol. These are similar in concept to Uniswap Pool and Pool Deployer contracts, but with different requirements/implementation logic and no concentrated liquidity.
**Languages and framework:** Ink!, Openbrush| -| 2. | Build out the rewards factory component | We will implement the Rewards Factory, which allows brands with or without Web3-based rewards to move some or all of their loyalty points to the blockchain using the PSP22 standard (and also PSP34/PSP1155 in the future). It contains the function for creating a new PSP22 token and keeping track of the associated brand.
**Languages and framework:** Ink!, Openbrush | -| 3. | Build out the Rewards Periphery Component| We will implement the Rewards Periphery Component that provides a form of incentivization to brands when their rewards are used to redeem offers across other brands. This component consist of two major contracts: Brand Bounty and Brand Treasury Contracts. Brand Treasuries are small fees paid by brand A to brand B when a customer from brand B chooses to redeem his/her reward with brand A. The treasury is a smart contract that holds these tokens, mapped to the appropriate brand. Brand bounties on the other hand are small amounts of reward tokens charged to a customer when he chooses to redeem that reward with another brand (typically swapping in our protocol). These small fees are stored in the Bounty Contract and when a bounty threshold is reached, they are issued as rewards to promote the issuing brand.
**Languages and framework:** Ink!| -| 4. | Build out the service payment component| We will implement the Service Payment Component that brands and other integrating third-party applications will use to pay for the various services rendered to them through the protocol and business applications. This component consists of the payment/fee contract, which contains the logic to handle the reception of these tokens, mapped to the payer, and the logic to release these tokens when a paid service is rendered to the payer.
**Languages and framework:** Ink!| -| 5. | Build Out the Rewards Valuation Oracle Component| We will implement the Rewards Valuation Oracle Component, which helps to manage all external requests relating to rewards pricing and valuation in the protocol based on the supply and demand of these rewards in the pool. It consists primarily of the oracle contract that provides information on the valuation of rewards in our protocol.
**Languages and framework:** Ink!| +| 1. |Build out the Pool Component| We will implement the Rewards Pool Component which contains the contracts, libraries and interfaces that describe and manage the sets of AMM pools for brand loyalty rewards. This component primarily consists of the pool contract, which manages all the logic relating to brand liquidity (swapping, adding, removing, multistage swapping, etc.), and the Pool initiator contract, which would create a pool every time a new brand reward is to be supported on our protocol. These are similar in concept to Uniswap Pool and Pool Deployer contracts, but with different requirements/implementation logic and no concentrated liquidity.
**Languages and framework:** Ink!, Openbrush| +| 2. | Build out the rewards factory component | We will implement the Rewards Factory, which allows brands with or without Web3-based rewards to move some or all of their loyalty points to the blockchain using the PSP22 standard (and also PSP34/PSP1155 in the future). It contains the function for creating a new PSP22 token and keeping track of the associated brand.
**Languages and framework:** Ink!, Openbrush | +| 3. | Build out the Rewards Periphery Component| We will implement the Rewards Periphery Component that provides a form of incentivization to brands when their rewards are used to redeem offers across other brands. This component consist of two major contracts: Brand Bounty and Brand Treasury Contracts. Brand Treasuries are small fees paid by brand A to brand B when a customer from brand B chooses to redeem his/her reward with brand A. The treasury is a smart contract that holds these tokens, mapped to the appropriate brand. Brand bounties on the other hand are small amounts of reward tokens charged to a customer when he chooses to redeem that reward with another brand (typically swapping in our protocol). These small fees are stored in the Bounty Contract and when a bounty threshold is reached, they are issued as rewards to promote the issuing brand.
**Languages and framework:** Ink!| +| 4. | Build out the service payment component| We will implement the Service Payment Component that brands and other integrating third-party applications will use to pay for the various services rendered to them through the protocol and business applications. This component consists of the payment/fee contract, which contains the logic to handle the reception of these tokens, mapped to the payer, and the logic to release these tokens when a paid service is rendered to the payer.
**Languages and framework:** Ink!| +| 5. | Build Out the Rewards Valuation Oracle Component| We will implement the Rewards Valuation Oracle Component, which helps to manage all external requests relating to rewards pricing and valuation in the protocol based on the supply and demand of these rewards in the pool. It consists primarily of the oracle contract that provides information on the valuation of rewards in our protocol.
**Languages and framework:** Ink!| @@ -220,9 +220,9 @@ GitHub accounts of team members | 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | | 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | | 0e. | Article | We will publish a **lite paper** to describe the architecture and its implementation -| 1. |Build out the Protocol Access Component| We will implement the Access Component, which consists of contract routers that abstract the core protocol services and provide functions that brands, customers, protocol admins, and third-party applications can use to safely interact with the protocol. These are similar to the Uniswap router contracts, but instead of just one general contract, the contracts are split into Customer, Brand, Admin, and in the future Third-Party Contracts, based on the role of the requestor. A brand router, for example, will expose the functions that allow a brand to create a reward (using the reward factory), mint additional rewards or burn existing rewards, add or remove rewards from the liquidity pool, top up fee wallet, etc.
**Languages and framework:** Ink! | -| 2. | Build out the lens component | We will implement the Lens Component that provides introspection into the protocol. This component is comprised of the Secretary and Loupe Modules. The Secretary Contract would provide business information like how many brands are connected to the protocol, total loyalty rewards in pools, etc. The Loupe Contract provides protocol architecture information, such as what functions the protocol supports and where these functions are deployed (it is an implementation of the EIP2535 DiamondLoupe Contract) etc.
**Languages and framework:** Ink!| -| 3. | Building out the Governance Component | We will implement the Governor Facet that will help to manage access control across the protocol and also help to manage governance rules for future proposals and updates.
**Languages and framework:** Ink!| +| 1. |Build out the Protocol Access Component| We will implement the Access Component, which consists of contract routers that abstract the core protocol services and provide functions that brands, customers, protocol admins, and third-party applications can use to safely interact with the protocol. These are similar to the Uniswap router contracts, but instead of just one general contract, the contracts are split into Customer, Brand, Admin, and in the future Third-Party Contracts, based on the role of the requestor. A brand router, for example, will expose the functions that allow a brand to create a reward (using the reward factory), mint additional rewards or burn existing rewards, add or remove rewards from the liquidity pool, top up fee wallet, etc.
**Languages and framework:** Ink! | +| 2. | Build out the lens component | We will implement the Lens Component that provides introspection into the protocol. This component is comprised of the Secretary and Loupe Modules. The Secretary Contract would provide business information like how many brands are connected to the protocol, total loyalty rewards in pools, etc. The Loupe Contract provides protocol architecture information, such as what functions the protocol supports and where these functions are deployed (it is an implementation of the EIP2535 DiamondLoupe Contract) etc.
**Languages and framework:** Ink!| +| 3. | Building out the Governance Component | We will implement the Governor Facet that will help to manage access control across the protocol and also help to manage governance rules for future proposals and updates.
**Languages and framework:** Ink!| | 4. |Build out the Backend Service Components for the Me App| We will implement some key utilities for the back-end services to be used by integrated apps, such as logging (Winston); data caching (Redis Cache); search indexing (Elastic search); database and connection (Postgres TypeOrm); mailing service (Nestjs nodemailer with sendgrid abi); image upload with (Fastify multipart); and entities and their relationships (Typescript, NestJs, PostgreSQL).| @@ -243,8 +243,8 @@ GitHub accounts of team members | 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | | 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | | 0e. | Article | We will publish a **lite paper** to describe the architecture and its implementation -| 1. | Build out the Asset Management Component of the Me APP| We will implement all the necessary screens, services and microservices that let brand customers to keep track of, earn and spend rewards in applications and also for brands to keep track of, distribute and manage their rewards in applications.
**Languages and framework:** TypeScript, Nestjs, Reactjs, Polkadotjs.| -| 2. | Build out the offers management component of the Me APP| We will implement all the necessary screens and provide all the necessary services and microservices that will allow brands to integrate their offers, create new offers and push them to applications and also allow brand customers to search offers, filter offers, view price, see offers whose rewards they have, redeem these offers with their rewards.
**Languages and framework:** TypeScript, Nestjs, Reactjs, Polkadotjs, PostgreSql| +| 1. | Build out the Asset Management Component of the Me APP| We will implement all the necessary screens, services and microservices that let brand customers to keep track of, earn and spend rewards in applications and also for brands to keep track of, distribute and manage their rewards in applications.
**Languages and framework:** TypeScript, Nestjs, Reactjs, Polkadotjs.| +| 2. | Build out the offers management component of the Me APP| We will implement all the necessary screens and provide all the necessary services and microservices that will allow brands to integrate their offers, create new offers and push them to applications and also allow brand customers to search offers, filter offers, view price, see offers whose rewards they have, redeem these offers with their rewards.
**Languages and framework:** TypeScript, Nestjs, Reactjs, Polkadotjs, PostgreSql| From e0545d686b22ac9daeb6763670cceab9c7485945 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Fri, 13 Jan 2023 09:52:22 +0100 Subject: [PATCH 016/578] Update index.md (#1435) dot-marketplace phase 3 -> first delivery --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 5ecc88343e2..918fb2ec30e 100644 --- a/applications/index.md +++ b/applications/index.md @@ -550,7 +550,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Ink Boxes Team](https://github.com/nerdsince98) | [Ink Boxes](ink-boxes.md) | [GitHub](https://github.com/avirajkhare00/ink-boxes/) | ☐ | ☒ | ☒ | | [ParaSpell](https://github.com/paraspell) | [ParaSpell Phase 2](ParaSpell_follow-up.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☐ | | [SubRelay](http://subrelay.xyz/) | [SubRelay](subrelay.md) | [GitHub](https://github.com/subrelay) | ☐ | ☐ | ☐ | -| [Wow Labz](http://www.wowlabz.com) | [Dot Marketplace Phase 3](dot_marketplace-Phase3.md) | [GitHub](https://github.com/orgs/WowLabz) | ☐ | ☐ | ☐ | +| [Wow Labz](http://www.wowlabz.com) | [Dot Marketplace Phase 3](dot_marketplace-Phase3.md) | [GitHub](https://github.com/orgs/WowLabz) | ☐ | ☒ | ☐ | | [10Clouds Sp. z o.o.](https://10clouds.com/) | [Crowdloan Front End Template](crowdloan_frontend_template.md) | [GitHub](https://github.com/10clouds) | ☐ | ☐ | ☐ | | [DodoRare, Inc.](https://dodorare.com/) | [Faterium](faterium.md) | [GitHub](https://github.com/faterium) | ☐ | ☒ | ☐ | | [The Bacon Beacon](https://github.com/random-bacon) | [Pallet Drand Client](pallet-drand-client.md) | [GitHub](https://github.com/random-bacon) | ☐ | ☐ | ☐ | From 79cd9ba2cd4cb52b6f89654391de53198c17bc6a Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Fri, 13 Jan 2023 17:59:24 +0100 Subject: [PATCH 017/578] Update index.md (#1436) dot marketplace phase 3 -> Completed --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 918fb2ec30e..4ddee5c2dcb 100644 --- a/applications/index.md +++ b/applications/index.md @@ -550,7 +550,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Ink Boxes Team](https://github.com/nerdsince98) | [Ink Boxes](ink-boxes.md) | [GitHub](https://github.com/avirajkhare00/ink-boxes/) | ☐ | ☒ | ☒ | | [ParaSpell](https://github.com/paraspell) | [ParaSpell Phase 2](ParaSpell_follow-up.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☐ | | [SubRelay](http://subrelay.xyz/) | [SubRelay](subrelay.md) | [GitHub](https://github.com/subrelay) | ☐ | ☐ | ☐ | -| [Wow Labz](http://www.wowlabz.com) | [Dot Marketplace Phase 3](dot_marketplace-Phase3.md) | [GitHub](https://github.com/orgs/WowLabz) | ☐ | ☒ | ☐ | +| [Wow Labz](http://www.wowlabz.com) | [Dot Marketplace Phase 3](dot_marketplace-Phase3.md) | [GitHub](https://github.com/orgs/WowLabz) | ☐ | ☒ | ☒ | | [10Clouds Sp. z o.o.](https://10clouds.com/) | [Crowdloan Front End Template](crowdloan_frontend_template.md) | [GitHub](https://github.com/10clouds) | ☐ | ☐ | ☐ | | [DodoRare, Inc.](https://dodorare.com/) | [Faterium](faterium.md) | [GitHub](https://github.com/faterium) | ☐ | ☒ | ☐ | | [The Bacon Beacon](https://github.com/random-bacon) | [Pallet Drand Client](pallet-drand-client.md) | [GitHub](https://github.com/random-bacon) | ☐ | ☐ | ☐ | From 9f5d005048b3ce31ad344287efa806906942063a Mon Sep 17 00:00:00 2001 From: Bojidar Marinov Date: Mon, 16 Jan 2023 09:24:51 +0200 Subject: [PATCH 018/578] Fix links in application templates (#1438) --- applications/application-template-research.md | 4 ++-- applications/application-template.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/applications/application-template-research.md b/applications/application-template-research.md index e6ab8beef4d..5e43b3654b4 100644 --- a/applications/application-template-research.md +++ b/applications/application-template-research.md @@ -99,14 +99,14 @@ Please also provide the GitHub accounts of all team members. If they contain no If you've already started working on your project or it is part of a larger project, please provide a link and a description of the research here. In any case, please provide some documentation on the research and other work you have conducted before applying. This could be: -- links to improvement proposals or [RFPs](https://github.com/w3f/Grants-Program/tree/master/rfp-proposal) (requests for proposal), +- links to improvement proposals or [RFPs](https://github.com/w3f/Grants-Program/tree/master/docs/RFPs) (requests for proposal), - academic publications relevant to the problem, - links to your research diary, blog posts, articles, forum discussions or open GitHub issues, - references to conversations you might have had related to this project with anyone from the Web3 Foundation. ## Development Roadmap :nut_and_bolt: -This section should break the research development roadmap down into milestones and deliverables. To assist you in defining it, we have created a document with examples for some grant categories, including research [here](../docs/grant_guidelines_per_category.md). Since these will be part of the agreement, it helps to describe _the deliverable we should expect in as much detail as possible_, plus how we can verify that deliverable. Whenever milestones are delivered, we refer to this document to ensure that everything has been delivered as expected. +This section should break the research development roadmap down into milestones and deliverables. To assist you in defining it, we have created a document with examples for some grant categories, including research [here](../docs/Support%20Docs/grant_guidelines_per_category.md). Since these will be part of the agreement, it helps to describe _the deliverable we should expect in as much detail as possible_, plus how we can verify that deliverable. Whenever milestones are delivered, we refer to this document to ensure that everything has been delivered as expected. Below we provide an **example roadmap**. In the descriptions, it should be clear how your project is related to Substrate, Kusama or Polkadot. We _recommend_ that teams structure their roadmap as 1 milestone ≈ 1 month. diff --git a/applications/application-template.md b/applications/application-template.md index 8c49044e095..29a3e5405b9 100644 --- a/applications/application-template.md +++ b/applications/application-template.md @@ -96,7 +96,7 @@ Please also provide the GitHub accounts of all team members. If they contain no If you've already started implementing your project or it is part of a larger repository, please provide a link and a description of the code here. In any case, please provide some documentation on the research and other work you have conducted before applying. This could be: -- links to improvement proposals or [RFPs](https://github.com/w3f/Grants-Program/tree/master/rfp-proposal) (requests for proposal), +- links to improvement proposals or [RFPs](https://github.com/w3f/Grants-Program/tree/master/docs/RFPs) (requests for proposal), - academic publications relevant to the problem, - links to your research diary, blog posts, articles, forum discussions or open GitHub issues, - references to conversations you might have had related to this project with anyone from the Web3 Foundation, @@ -104,7 +104,7 @@ If you've already started implementing your project or it is part of a larger re ## Development Roadmap :nut_and_bolt: -This section should break the development roadmap down into milestones and deliverables. To assist you in defining it, we have created a document with examples for some grant categories [here](../docs/grant_guidelines_per_category.md). Since these will be part of the agreement, it helps to describe _the functionality we should expect in as much detail as possible_, plus how we can verify and test that functionality. Whenever milestones are delivered, we refer to this document to ensure that everything has been delivered as expected. +This section should break the development roadmap down into milestones and deliverables. To assist you in defining it, we have created a document with examples for some grant categories [here](../docs/Support%20Docs/grant_guidelines_per_category.md). Since these will be part of the agreement, it helps to describe _the functionality we should expect in as much detail as possible_, plus how we can verify and test that functionality. Whenever milestones are delivered, we refer to this document to ensure that everything has been delivered as expected. Below we provide an **example roadmap**. In the descriptions, it should be clear how your project is related to Substrate, Kusama or Polkadot. We _recommend_ that teams structure their roadmap as 1 milestone ≈ 1 month. From f46a031d599cd25bf9e6ce94abbae1b9f93a155d Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Mon, 16 Jan 2023 09:14:30 +0100 Subject: [PATCH 019/578] Remove xmas message (#1441) --- README.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/README.md b/README.md index d63e4a53fbd..e5e9aff98e4 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,3 @@ -> :christmas_tree: Please note that the review process might take longer than usual until January 6, 2023. Merry Christmas and Happy New Year! :christmas_tree: - -___ - # Web3 Foundation Grants Program

From be81e1a363afe13d598829f4ff05448127deff80 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Mon, 16 Jan 2023 11:47:30 +0100 Subject: [PATCH 020/578] Update index.md (#1442) Keysafe -> first delivery --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 4ddee5c2dcb..759325b8357 100644 --- a/applications/index.md +++ b/applications/index.md @@ -467,7 +467,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [gmajor](https://github.com/gmajor-encrypt) | [SCALE Codec Comparator](./scale-codec-comparator.md) | [GitHub](https://github.com/gmajor-encrypt) | ☐ | ☒ | ☐ | | [Rusty Crewmates](http://rustycrewmates.com/) | [Substrate Tutorials](./substrate-tutorials.md) | [GitHub](https://github.com/rusty-crewmates/substrate-tutorials) | ☐ | ☒ | ☐ | | [Sequester](https://github.com/SequesterChain) | [A Common-Good Carbon Sink on Polkadot](./sequester.md) | [GitHub](https://github.com/SequesterChain/pallets) | ☐ | ☒ | ☒ | -| [Keysafe Network](https://github.com/keysafe-protocol) | [A decentralized protocol for private key custody and crypto asset management](./keysafe_network.md) | [GitHub](https://github.com/keysafe-protocol) | ☐ | ☐ | ☐ | +| [Keysafe Network](https://github.com/keysafe-protocol) | [A decentralized protocol for private key custody and crypto asset management](./keysafe_network.md) | [GitHub](https://github.com/keysafe-protocol) | ☐ | ☒ | ☐ | | [Fennel Labs](https://fennellabs.com/) | [Whiteflag on Fennel Protocol](./Fennel_Protocol.md) | [GitHub](https://github.com/fennelLabs) | ☐ | ☒ | ☒ | | [Relationlabs](https://relationlabs.ai/#/home) | [Relation Graph](./Relation-Graph.md) | [GitHub](https://github.com/relationlabs) | ☐ | ☐ | ☐ | | [Decentration](https://kabocha.network) | [Supersig](./pallet_supersig.md) | [GitHub](https://github.com/kabocha-network) | ☐ | ☒ | ☐ | From 93d79cf11d9c5a987b2e1134c48e1a58b52b81b1 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Mon, 16 Jan 2023 11:48:03 +0100 Subject: [PATCH 021/578] Update social-recovery-wallet.md (#1443) Add Keysafe Protocol as Under Development project --- docs/RFPs/Under Development/social-recovery-wallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/RFPs/Under Development/social-recovery-wallet.md b/docs/RFPs/Under Development/social-recovery-wallet.md index 0f374dfc251..b5f51233af6 100644 --- a/docs/RFPs/Under Development/social-recovery-wallet.md +++ b/docs/RFPs/Under Development/social-recovery-wallet.md @@ -1,6 +1,6 @@ # Social Recovery Wallet -* **Status:** [Under Development 1](https://github.com/w3f/Grants-Program/blob/master/applications/Plus-social-recovery-wallet.md), [Under Development 2](https://github.com/w3f/Grants-Program/blob/master/applications/social_recovery_wallet.md) +* **Status:** [Under Development 1](https://github.com/w3f/Grants-Program/blob/master/applications/Plus-social-recovery-wallet.md), [Under Development 2](https://github.com/w3f/Grants-Program/blob/master/applications/social_recovery_wallet.md), [Under Development 3](https://github.com/w3f/Grants-Program/blob/master/applications/keysafe_network.md) * **Proposer:** [Noc2](https://github.com/Noc2) ## Project Description :page_facing_up: From ce1a00d021a01b74727fd9960959b02c3cccbd5d Mon Sep 17 00:00:00 2001 From: Loaki07 <66478092+Loaki07@users.noreply.github.com> Date: Mon, 16 Jan 2023 18:03:25 +0530 Subject: [PATCH 022/578] Update payment address for dot_marketplace-Phase3.md (#1439) --- applications/dot_marketplace-Phase3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/dot_marketplace-Phase3.md b/applications/dot_marketplace-Phase3.md index 7452ac4066b..e5185a48c14 100644 --- a/applications/dot_marketplace-Phase3.md +++ b/applications/dot_marketplace-Phase3.md @@ -3,7 +3,7 @@ - **Status:** Open - **Project Name:** Dot Marketplace - **Team Name:** Wow Labz -- **Payment Address:** 0xF13001401396AA866E8012f31fD939C7E83B8601 (USDT - ERC20) +- **Payment Address:** bc1qv954czydwz72egdzhkkuw85jegwrsmlt8a5xs8 (BTC - Bitcoin) - **Level:** 2 ### Overview From 6c334838b70f2ba4515766777b3f4b9de434531e Mon Sep 17 00:00:00 2001 From: yyd106 Date: Tue, 17 Jan 2023 03:42:27 +0800 Subject: [PATCH 023/578] Change acceptable currency (#1444) Changed the currency to USDC according to [the suggestion](https://github.com/w3f/Grant-Milestone-Delivery/pull/639#issuecomment-1383720873) --- applications/keysafe_network.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/applications/keysafe_network.md b/applications/keysafe_network.md index 5f28f2c972a..475c04339c5 100644 --- a/applications/keysafe_network.md +++ b/applications/keysafe_network.md @@ -1,7 +1,7 @@ # Keysafe Network - **Team Name:** Keysafe -- **Payment Address:** 0x09C08f46d523822cC9D18A077e2e3BDE5BC07a0b (Ethereum (USDT)) +- **Payment Address:** 0x09C08f46d523822cC9D18A077e2e3BDE5BC07a0b (Ethereum (USDC)) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 ## Project Overview :page_facing_up: @@ -132,7 +132,7 @@ The relevant [RFP is here](https://github.com/w3f/Grants-Program/blob/master/rfp - **Total Estimated Duration:** 8 months - **Full-Time Equivalent (FTE):** 3 -- **Total Costs:** $27,000 (payable in Ethereum-USDT) +- **Total Costs:** $27,000 (payable in Ethereum-USDC) ### Milestone 1 — Implement On-chain Modules From 3cd77e289164b163e588f42f69c894bd3ea4c680 Mon Sep 17 00:00:00 2001 From: Bojidar Marinov Date: Mon, 16 Jan 2023 21:48:33 +0200 Subject: [PATCH 024/578] Validated Streams grant application (#1437) --- applications/validated-streams.md | 181 ++++++++++++++++++++++++++++++ 1 file changed, 181 insertions(+) create mode 100644 applications/validated-streams.md diff --git a/applications/validated-streams.md b/applications/validated-streams.md new file mode 100644 index 00000000000..2e8bb78c123 --- /dev/null +++ b/applications/validated-streams.md @@ -0,0 +1,181 @@ +# Validated Streams + +- **Team Name:** [Comrade Coop](https://comrade.coop/) +- **Payment Address:** [0xAE8687d444511a595Cc1EAdbFc1dFe58eB639C5f](https://etherscan.io/address/0xae8687d444511a595cc1eadbfc1dfe58eb639c5f) (DAI) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + +## Project Overview :page_facing_up: + +### Overview + +Validated Streams is a consensus primitive that aims to simplify the process of creating decentralized reactive oracles by providing a mechanism for verifying the authenticity and veracity of the data being used. + +In brief, we are providing a mechanism for proving the occurrence of events streamed from a custom application collocated with each of the validator nodes, facilitating developers of arbitrary off-chain applications in creating on-chain oracles sourced by those applications in a decentralized manner. To ensure the reliability and integrity of the data submitted on-chain, we require that at least two-thirds of the validators witness the event and confirm that it have indeed occurred off-chain. + +By implementing Validated Streams on top of Substrate, we hope it could integrate with Substrate-based smart contracts, allowing developers to build more powerful and sophisticated applications that take advantage of features from both Validated Streams and Smart Contracts. + +Validated Streams is a part of a grander vision of proactive blockchain applications that interact richly with the off-chain world while still remaining trustless and decentralized, that our team has been pushing for some years, and is now building piece-by-piece as we keep seeking the best ways to realize it. + + +### Project Details + +![Diagram of Validated Streams, with Stream service ingesting events from an application, passing them to a gossip, which then leads to on-chain transactions, that, after block finalization, get forwarded back to the application. (validated-streams.drawio.png)](https://user-images.githubusercontent.com/5276727/211316562-ad73fdd0-0dec-4543-884e-fe60cb09ee7a.png) + +A Validated Streams oracle proves the occurrence of off-chain events, after they have been witnessed by at least 2/3-s of its validators. + +Each of validator is a Substrate node that has an attached trusted client. The client submits hashes representing events that have been witnessed locally. Since a malicious client could fabricate data or censor it instead of reporting to the validator, it is necessary that the operators of validators don't trust other validators (or thirdparties in general) with the task of witnessing events, but run their own trusted clients, perhaps even collocating them with the validator node. + +To avoid swamping or stalling the chain with blocks containing as-of-yet-invalid events (especially in cases where trusted clients have just started witnessing an event), after receiving an event hash, the validator first gossips that hash, signed, to other validators (using Substrate's `sc_network_gossip` API). The event hash is submitted as an extrinsic only once it has been witnessed by 2/3 of the validators (weighted by stake). + +Afterwards, the event is finalized through any of the usual on-chain mechanisms (such as GRANDPA), and once final, is considered proven by the Validated Streams oracle. + +As it is possible for momentary disruptions or malfeasance of validators or off-chain services sourcing the data for events to cause the state recorded on-chain and the state existing off-chain to differ, we send the finalized event hashes back to the trusted clients, which can then, depending on the exact use case, use this information to, e.g. adapt its own state to on-chain proceedings, witness some form of correction to the finalized events, or report the discrepancy to its users/operators. + +As noted on the diagram, we are planning to use [a gRPC protocol](https://github.com/comrade-coop/validated-streams/blob/main/proto/streams.proto) for the communication of hashes between the trusted client and the validator node, instead of the more usual JSON-RPC used throughout Substrate, since such an API would allow the final product to be immediately usable with a wider variety of commonly-used programming languages and software development frameworks, and we aim to make the final product as accessible as we can. + +Do note that because the trusted client only ever submits hashes, a separate product (say, IFPS) would be required for it to retrieve the actual event contents. + +We have implemented a [proof-of-concept implementation](https://github.com/comrade-coop/validated-streams) of Validated Streams as we've explored the Substrate API. + +While the Validated Streams concept is generic enough to apply to some existing oracles and maybe even blockchains, we want to encapsulate it in a way that other developers could then use to implement their own blockchain solutions on top. As such, within the scope of this project we will not be creating a new blockchain/consensus network, but only a software package implementing the Validated Streams protocol on top of Substrate, plus the related documentation, tutorials, suggested deployment configurations, and the like. Developers would then be free to take that package and run their own chains validating the events they configure them to. + +In addition, we find it important to note that Validated Streams as currently envisioned would only work in chains where the total number/weight of validators is known, such as proof-of-stake or private/consortium chains; further research might be able to lift that limitation in the future, but this is again outside the scope of this grant proposal. + +### Ecosystem Fit + +Creating reliable oracles can be challenging, as making a protocol, ensuring the accuracy of the data being used, and finding the validators to run one are all hard problems. While the Validated Streams abstraction doesn't automatically solve all of those problems, it allows developers to re-focus on providing validators with accurate data without needing to worry about creating a whole new protocol. + +Once finished, Validated Streams could be used to create decentralized oracles that provide off-chain data to other parts of the Polkadot/Kusama ecosystem, such as blockchains or applications that connect to the network via Polkadot's interchain communication protocols, or just Substrate-based smart contracts in general. In that case, parachain and dApp developers would benefit from having another way to provide real-time data to smart contracts or to build decentralized applications that interact with the real world. + +In addition, we see a use for Validated Streams in the creation of hybrid off-chain/on-chain applications, where developers use it to write traditional applications that are linked to a blockchain using a "validated" output "stream" of events. This can enable traditional application developers (such as ourselves, outside the Cooperative) to build applications that are more secure and trustworthy, as they can rely on the validation provided by the Validated Streams service. + +And, finally, we see some potential use cases around sourcing data for decentralized AI models (where Validated Streams would allow for a single consensus dataset to be built and added to in real-time, without necessarily giving any centralized party a final vote on what's included), and the creation of decentralized news platforms (where parties contribute news stories or verify the accuracy of existing stories), but it is possible that both of those would require additional thought, research, and development before they can be realized. + +There are existing projects similar to Validated Streams, many of which we've taken inspiration from. + +A major one would be Chainlink. While both work on providing ways to create and use oracles, Chainlink is a standalone decentralized oracle network that integrates with a variety of blockchain platforms, while Validated Streams is a Substrate-based blockchain-building framework that can used by decentralized applications directly. Also, Chainlink uses a reputation-based system to ensure the reliability of the data being provided by its oracles, while Validated Streams uses a consensus mechanism based on concrete events being witnessed to ensure the accuracy of the data being used by oracles. + +While a Chainlink Feed pallet already exists within the Polkadot / Kusama network, we hope that by offering something more directly based on top of Substrate, we might provide a viable alternative for developers who don't necessarily want to use Chainlink itself. + +## Team :busts_in_silhouette: + +### Team members + +- Team leader: Bozhidar Marinov +- Team: Salih Houadef +- Advisors: Todor Kolev, Branimir Angelov + +### Contact + +- **Contact Name:** Bozhidar Marinov +- **Contact Email:** b.marinov@comrade.coop +- **Website:** https://comrade.coop/ + +### Legal Structure + +- **Registered Address:** 47, "Cherni vrah" blvd, Sofia 1407, Bulgaria +- **Registered Legal Entity:** Comrade Cooperative + +### Team's experience + +Bozhidar has roughly 13 years of programming experience (started programming at 7) on a wide variety of projects, from web interfaces to games to backend systems to smart contracts. He was once a core developer of Godot Game Engine, actively interacting in the FOSS community and is currently a maintainer of Perper, a reactive microservice framework. + +Salih is a recent college graduate with experience in creating various decentralized systems, in particular Blocksharp, a blockchain framework based on an actor model, used to complete his master's thesis on decentralized voting systems. + +### Team Code Repos + +- https://github.com/obecto/perper +- https://github.com/comrade-coop/apocryph +- https://github.com/comrade-coop/strongforce +- https://github.com/comrade-coop/wetonomy-strongforce +- https://github.com/comrade-coop/apocryph-dao +- https://github.com/revoltez/Blocksharp +- https://github.com/revoltez/RustNet +- https://github.com/revoltez/PBFTDemo +- https://github.com/revoltez/CypherBox +- https://github.com/revoltez/TokenSwap + +**Team GitHub accounts:** + +- Bozhidar Marinov: https://github.com/bojidar-bg +- Salih Houadef: https://github.com/revoltez + +### Team LinkedIn Profiles (if available) + +- Bozhidar Marinov: https://www.linkedin.com/in/bojidar-bg/ +- Salih Houadef: https://www.linkedin.com/in/houadef-salih/ + +Advisors: +- Todor Kolev: https://www.linkedin.com/in/todor/ +- Branimir Angelov: https://www.linkedin.com/in/branimirangelov/ + +### Google Scholar Profiles (only for research projects) + +## Development Status :open_book: + +The current prototype of the Validated Streams code lives in the https://github.com/comrade-coop/validated-streams repository. It's an initial draft that we used to figure out what we want to achieve and if it's possible to use Substrate for it. Now that we have this proof of concept, we are ready to go for a full implementation. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 3 months +- **Full-Time Equivalent (FTE):** 1 +- **Total Costs:** 10,000 USD + +### Milestone 1 — Implementation of Validated Streams gossip using Substrate's GossipEngine + +- **Estimated duration:** 1.5 month +- **FTE:** 1 +- **Costs:** 5,000 USD + +While our initial prototype is roughly functional in terms of delivering witness signatures to other validators, it is currently doing that in a very hacked and insecure manner. For the first milestone, we are looking to change that to use Substrate's existing gossip, as well as clean up the code overall, while also getting some documentation and tests in order. + +Once this milestone is complete, we expect that Validated Streams would be able to deliver its main functionality of validating events, though it might not be the most robust yet to real-world network connectivity issues (and perhaps even to some kinds of malicious interference). + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | MIT (most of the code) / GPLv3 (any sections depending on Substrate Client) | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile and bash script that can be used to test all the functionality delivered with this milestone. | +| 1. | Substrate pallet: Validated Streams | We will create a Substrate pallet that will receive witnessed event extrinsics and communicate them to other Substrate pallets. | +| 2. | Substrate module: Witnessed events gossip | The Witnessed events gossip module will implement part of the Validated Streams protocol as described above, gossiping signatures about event hashes witnessed by the validator node and submitting them to the Tx pool once enough signatures are collected. | +| 3. | Substrate module: Stream service | The Stream service module will allow applications to connect to the validator node as a "trusted client", witnessing events observed in the off-chain world and receiving receipts of completed events. | + +### Milestone 2 — Implementation of block deferral for blocks that contain unvalidated events + +- **Estimated Duration:** 1.5 month +- **FTE:** 1 +- **Costs:** 5,000 USD + +After refactoring our codebase and reworking the gossip protocol used, we would like to work on improving the behavior of the project in real-life conditions, by implement deferral for blocks that arrive before they have been fully witnessed and making any necessary adjustments after testing and benchmarking the code in live settings. + +Once this milestone is complete, we would consider the Validated Streams project functionally ready for incorporation in other projects. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | MIT / GPLv3 (same as above) | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone, including Dockerfiles/scripts which set up simulated poor network conditions. | +| 0e. | Article | We will write up and publish an English article on our blog, making sure to link it on HN and relevant Reddit communities, that explains the Validated Streams project, how it works in brief, and how it can be used by developers to create decentralized oracles for their applications -- including brief notes on what to consider when actually deploying such an oracle. | +| 1. | Substrate module: Witnessed events block import | The Witnessed events block import module will defer blocks before handling them to GRANDPA until all witnessed events included in those blocks are confirmed by the Witnessed events gossip module -- as outlined above. | +| 2. | Real-life testing | We will test the Validated Streams code in a real network, documenting our results, and making adjustments to the code if any performance or reliability issues surface. | +| 3. | .NET client sample | We will deliver a .NET/C# sample application implementing an example trusted client that can be used by developers as a starting point for their own work. | + +## Future Plans + +Our team is interested in utilizing the Validated Streams project as a key component in the development of [Apocryph](https://apocryph.network), a novel (and, we hope, revolutionary) blockchain platform designed to support proactive smart contracts, or "agents", that are capable of autonomously communicating with each other and taking action without the express need for human(/centralized) input. There, the Validated Streams project would allow agents on a future Apocryph platform to react to real-world events as those occur. + +In fact, we are currently exploring the possibility of building (and refining) our vision for Apocryph in a piecemeal fashion where we build each of the components that might be useful in other projects independently, before eventually combining them. + +In the shorter term, we will strive to maintain the repository, bugfixing and perhaps even new features, after the grant is complete, especially if there is interest in the project from outside parties. + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** We found the grants program via GitHub Trending, while simultaneously discovering that Substrate would be a great fit for our project on accident. As that seemed like too good of a coincidence to pass up, we decided to apply. + +While our coop organization has received a previous grant from Aragon Nest for an unrelated project, this is the first grant we are applying to in regards to the Validated Streams project. + +We have worked on the code and vision for Apocryph for a few years now, ever since we noticed that many of our Cooperative's projects were facing very similar issues around moving data and organizing code--and deciding we could do better. While not all of our attempts in bringing it about have been successful, we have been slowly coming to better solutions, and hope that it will all click one day. From 85cdab1f8ac95a40c068ec8d716752d8626d3701 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 16 Jan 2023 20:51:25 +0100 Subject: [PATCH 025/578] Update index.md Add Validated Streams --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 759325b8357..f9135172cf1 100644 --- a/applications/index.md +++ b/applications/index.md @@ -585,4 +585,5 @@ Use this page for an overview of all public grants and their status. Use the sid | [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☐ | ☐ | | [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☐ | ☐ | | [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | +| [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☐ | ☐ | From e955339c3809208bd09bc38da053ec82335c95c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9?= Date: Mon, 16 Jan 2023 15:53:23 -0400 Subject: [PATCH 026/578] Cross-chain Wallet - XCW (#1414) * first draft of cross-chain-wallet.md * Milestones * Update cross-chain-wallet.md * Update cross-chain-wallet.md * Update cross-chain-wallet.md * Update cross-chain-wallet.md * Add wallet mock-up * Update cross-chain-wallet.md * Add Security section Co-authored-by: Fernando Sirni <33009762+fersirni@users.noreply.github.com> --- applications/cross-chain-wallet.md | 229 +++++++++++++++++++++++++++++ 1 file changed, 229 insertions(+) create mode 100644 applications/cross-chain-wallet.md diff --git a/applications/cross-chain-wallet.md b/applications/cross-chain-wallet.md new file mode 100644 index 00000000000..e8f00ade035 --- /dev/null +++ b/applications/cross-chain-wallet.md @@ -0,0 +1,229 @@ +# Cross-chain Wallet - XCW + +- **Team Name:** Blockcoders +- **Payment Address:** Ethereum (USDT/USDC/DAI) 0x1Ff29471bf02399A5B6Bd096A13d43982dFac357 +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 3 + +## Project Overview :page_facing_up: + +Blockcoders is proud to propose the development of a revolutionary cross-chain wallet, capable of importing and creating both EVM and WASM accounts. This wallet will make it easy for users to manage and transfer tokens between the two chains. Built with the user experience in mind, the wallet will feature the same sleek and intuitive design as Astar UI. The term cross-chain in this case refers to the ability to transfer tokens between parachains for both EVM and WASM. +We plan to give constant support to this wallet and open Telegram and Discord channels to have a better feedback from the users, solve issues and add new functionalities. + +### Goals + +- Develop a user-friendly wallet that simplifies the management of EVM and WASM accounts in one place. +- Enable seamless and secure asset transfer between users accounts on different chains. +- Provide a safe and intuitive platform for users to sign messages and interact with dApps. +- Enhance transparency and accountability by displaying transaction details and links to scanner/explorer pages. +- Maintain the wallet's decentralization and open-source nature, ensuring its trustworthiness and security. +- Aim to cover more than 90% of the wallet's main functionalities to provide a comprehensive user experience. + +### Security + +The wallet will implement the Keyring concept, which is the core of the secret storing and account management system in MetaMask. This approach ensures that private keys are stored locally on users' devices using browser built-in storage capabilities such as IndexedDB or WebSQL, making them accessible only to the user. Additionally, we will use encryption techniques similar to MetaMask, such as PBKDF2 iteration and AES-GCM mode, to provide an extra layer of security for the private keys. This wallet will also implement the same feature that Polkadot's extension has, which allows users to see the availability of different parachains before they make a transfer. This feature will provide users with an added layer of security and peace of mind, as they can ensure that their transfer will go through smoothly. + +### Specifications + +In a first approach, we will be using the following technologies: React, Typescript, Polkadot API and Ethers.js. The supported browsers will be: Chrome and Firefox. The default networks will be: Astar, Shiden, Shibuya (testnet), Moonbeam, Moonriver, Moonbase Alpha (testnet), Polkadot and Kusama. The default tokens will be: ASTR, SDN, SBY, GLMR, MOVR, DEV, DOT and KSM. + +### Main functionalities + +- Allow users to easily create and import EVM and WASM accounts. +- Provide a clear and intuitive overview of users' balances for both EVM and WASM accounts. +- Enable the transfer of assets between EVM accounts, WASM accounts, and between EVM and WASM accounts. +- Allow users to sign messages and execute calls and transactions on custom smart contracts. +- Provide links to explorer pages to enhance transparency and accountability. +- Give users the flexibility to add custom networks and tokens to the wallet. +- Implement the XCM format to enable cross-chain functionality, making it easy for users to transfer assets between parachains. +- Design the wallet using React and follow the look and feel of Astar UI, with the option to open in full-screen mode. + +The cross-chain functionality will be implemented using the XCM format, enabling users to easily transfer assets between EVM and WASM parachains. The XCM implementation will be simplified to provide a seamless user experience. The user interface will be built using React, and the design will be inspired by the look and feel of Astar UI. The extension will have the option to open in full-screen mode for a more immersive experience. + + +### Ecosystem Fit + +Help us locate your project in the Polkadot/Substrate/Kusama landscape and what problems it tries to solve by answering each of these questions: + +- Where and how does your project fit into the ecosystem? + - This wallet is a perfect match for the ecosystem as it provides a solution to the problem of having to use multiple wallets to interact with different types of accounts such as EVM and WASM. +- Who is your target audience (parachain/dapp/wallet/UI developers, designers, your own user base, some dapp's userbase, yourself)? + - The target audience is anyone that interacts with the ecosystem using a wallet. From developers to final users. +- What need(s) does your project meet? + - It provides a solution that today it's resolved by using multiple wallets/applications. +- Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem? + - There aren't any other wallets that support both EVM and WASM accounts and the ability to send assets between them. + +## Team :busts_in_silhouette: + +### Team members + +- Jose Ramirez +- Fernando Sirni +- Ruben Gutierrez + +### Contact + +- **Contact Name:** Jose Ramirez +- **Contact Email:** jose@blockcoders.io +- **Website:** http://blockcoders.io/ + +### Legal Structure + +- **Registered Address:** Bouchard 705, Buenos Aires, Argentina +- **Registered Legal Entity:** Blockcoders + +### Team's experience + +We are Blockcoders, a self-managed team building on the blockchain-based in LATAM. We enjoy working on decentralized protocols and blockchains. We put a lot of effort into developing compelling user experiences that will help your project appeal to a constantly expanding market. + +Why Blockcoders? We are a team of engineers with over ten years of experience building world-class applications. We assist engineering teams in scaling fast by focusing on developer tooling, SDKs, and libraries. + +We have experience with many different blockchains, including OL, Harmony, Aptos, Polkadot, and NEAR. With live projects focused on partnering with you to create thoughtful, innovative applications that can support its community's entire lifecycle from awareness through post-purchase behaviors. + +### Team Code Repos + +#### Open Source Projects +- https://github.com/blockcoders/nestjs-ethers +- https://github.com/blockcoders/nestjs-websocket +- https://github.com/blockcoders/nestjs-library-template + +#### Web3 Foundation +- https://github.com/blockcoders/ink-substrate-explorer-api +- https://github.com/blockcoders/ink-substrate-explorer-frontend +- https://github.com/blockcoders/xcm-sdk + +#### Near +- https://github.com/blockcoders/near-rpc-providers + +#### Polkadot Hackathon (Smart contracts - NFTs - Moonbeam) +- https://github.com/blockcoders/dotocracy-frontend +- https://github.com/blockcoders/dotocracy-contracts + +#### Harmony +- https://github.com/blockcoders/harmony-marketplace-sdk + +#### Athena DAO +- https://github.com/athenafarm +- https://github.com/athenafarm/athena-vault-contracts +- https://github.com/athenafarm/athena-sdk +- https://github.com/athenafarm/athena-vault-frontend + +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. + +- https://github.com/blockcoders +- https://github.com/0xslipk +- https://github.com/fersirni +- https://github.com/RubenGutierrezC + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/jarcodallo/ +- https://www.linkedin.com/in/fernando-sirni-1931ba122/ +- https://www.linkedin.com/in/rubengutierrezc/ + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 6 month +- **Full-Time Equivalent (FTE):** 3 +- **Total Costs:** 64000 USD + +### Milestone 1 - Wallet extension + +- **Estimated duration:** 2 month +- **FTE:** 3 +- **Costs:** 24,000 USD + +Create a wallet extension that can be installed on browsers such as Chrome, Firefox, etc. This milestone will include the following features: + +| Number | Deliverable | Specification | +| ------------- | ------------- | ------------- | +| 0a. | License | MIT | +| 0b. | Documentation | We will provide both **english** and **spanish** versions of the documentation. This will cover step by step how to configure the environment and send xcm messages. | +| 0c. | Testing Guide | Unit test and end to end tests will cover the core functions to ensure everything works as expected. The documentation will have an example on how to run these tests. | +| 0d. | Docker | A Dockerfile will be provided that will be able to start the node and run tests for all the functionality delivered within this milestone. | +| 1. | Chrome/Firefox Extension | Develop a browser extension that can be installed on Chrome, Firefox, and other popular browsers. | +| 2. | EVM/WASM accounts | Implement the ability to create and import EVM and WASM accounts. | +| 3. | Switch between networks | Allow users to switch between networks, such as Astar and Moonbeam, with ease. | +| 4. | Display accounts | Display EVM and WASM accounts in the same place for a clear and intuitive overview. | +| 5. | Balances | Show users their balances for both EVM and WASM accounts. | + +### Milestone 2 - Support for WASM and EVM accounts + +- **Estimated duration:** 1 month +- **FTE:** 3 +- **Costs:** 12,000 USD + +The main focus on this milestone will be to allow users to transfer assets between their own accounts. This milestone will include the following features: + +| Number | Deliverable | Specification | +| ------------- | ------------- | ------------- | +| 0a. | License | MIT | +| 0b. | Documentation | We will provide both **english** and **spanish** versions of the documentation. This will cover step by step how to send all kind of xcm messages. | +| 0c. | Testing Guide | Unit test and end to end tests will cover the core functions to ensure everything works as expected. The documentation will have an example on how to run these tests. | +| 0d. | Docker | A Dockerfile will be provided that will be able to start the node and run tests for all the functionality delivered within this milestone. | +| 1. | Custom tokens | Enable users to add custom tokens and networks/chains to the wallet. | +| 2. | Mesasges EVM<>WASM | Provide the ability to sign messages for EVM and WASM accounts. | +| 3. | Transfer EVM<>WASM | Allow users to transfer assets between their own EVM and WASM accounts on the same chain. | +| 4. | Transaction history | Show users their transaction history for both EVM and WASM accounts. | +| 5. | Explorer link | Provide links to explorer pages for enhanced transparency and accountability. | + +### Milestone 3 - Transfer assets between chains + +- **Estimated duration:** 2 month +- **FTE:** 3 +- **Costs:** 24,000 USD + +Milestone number 3 will focus on the transfer of assets between chains. This milestone will include the following features: + +| Number | Deliverable | Specification | +| ------------- | ------------- | ------------- | +| 0a. | License | MIT | +| 0b. | Documentation | We will provide both **english** and **spanish** versions of the documentation. This will cover step by step how to send all kind of xcm messages. | +| 0c. | Testing Guide | Unit test and end to end tests will cover the core functions to ensure everything works as expected. The documentation will have an example on how to run these tests. | +| 0d. | Docker | A Dockerfile will be provided that will be able to start the node and run tests for all the functionality delivered within this milestone. | +| 1. | XCM/XVM standard for transfers | Implement the XCM/XVM standard to enable the transfer of assets between EVM and WASM accounts on different chains. | +| 2. | Call to custom smart contracts | Provide the ability to call custom smart contracts for both EVM and WASM accounts. | +| 3. | Transactions to custom smart contracts | Enable users to execute transactions on custom smart contracts for both EVM and WASM. | +| 4. | Open Beta | Create an open Beta of the wallet for Moonbeam and Astar users to test it (with both mainnets and testnets available). Telegram and Discord channels will be created for the beta that will be announced on Twitter. | + +### Milestone 4 - Improve UX/UI + +- **Estimated duration:** 1 month +- **FTE:** 1 +- **Costs:** 4,000 USD + +The last milestone will focus on improving the UX/UI of the wallet. This milestone will include the following features: + +| Number | Deliverable | Specification | +| ------------- | ------------- | ------------- | +| 0a. | License | MIT | +| 0b. | Documentation | We will provide both **english** and **spanish** versions of the documentation. This will cover step by step how to send all kind of xcm messages. | +| 0c. | Testing Guide | Unit test and end to end tests will cover the core functions to ensure everything works as expected. The documentation will have an example on how to run these tests. | +| 0d. | Docker | A Dockerfile will be provided that will be able to start the node and run tests for all the functionality delivered within this milestone. | +| 0e. | Article | We will post an article on Twitter and Reddit for both english and spanish speakers communities. +| 1. | Polish UX experience | Enhance wallet design and user experience. As the previous milestones will focus on resolving the features from a technical perspective, but not in the "best looking" or "easiest" way, this milestone will be focused on ensuring that the features are easy to use and the user experience is smooth. All suggestions on the Telegram and Discord channels created for the Beta will be considered here to improve UX/UI. | +| 2. | Landing page | Develop a landing page and documentation for the wallet. | +| 3. | Video Tutorial | Create a video tutorial to help users learn how to use the wallet. | +| 4. | End to End Testing | Test the wallet on different browsers and devices to ensure compatibility and stability. | +| 5. | QR code | Add a QR code feature to display the address of users accounts. | + +## Maintaining the wallet + +Once the wallet is released, we will continue to maintain it for at least 2 years. This will include: + +- Bug fixes +- Improvements to the UX/UI +- Support for new features + +#### User Interface + +The wallet interface will be based on this [mock-up](https://www.figma.com/file/EawnVPOMgeTLUHaMfUNaGw/Wallet-XCM?node-id=0%3A1): + +![XCM Wallet](https://cdn.discordapp.com/attachments/892735396847419452/1062025103300362280/Wallet-presentation.png) + +## Future Plans + +- Add support for popular hardware wallets, such as Ledger and Trezor, to provide users with additional security and flexibility +- Add support to move assets between Substrate-based blockchains and other EVM blockchains. This may be done using a bridge that can lock-mint and unlock-burn tokens. From 71412210363db573b13cd9808a45a1f76e1bb789 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 16 Jan 2023 20:57:21 +0100 Subject: [PATCH 027/578] Update index.md Add Cross-chain Wallet --- applications/index.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/applications/index.md b/applications/index.md index f9135172cf1..10be2dbe188 100644 --- a/applications/index.md +++ b/applications/index.md @@ -586,4 +586,6 @@ Use this page for an overview of all public grants and their status. Use the sid | [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☐ | ☐ | | [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | | [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☐ | ☐ | +| [Blockcoders](http://blockcoders.io/) | [Cross-chain Wallet - XCW](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☐ | ☐ | + From ea656cedc3eb2850e4f1f4f15f6a386c41802f12 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Mon, 16 Jan 2023 20:59:41 +0100 Subject: [PATCH 028/578] fix website --- applications/cross-chain-wallet.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/applications/cross-chain-wallet.md b/applications/cross-chain-wallet.md index e8f00ade035..a8ec5927a82 100644 --- a/applications/cross-chain-wallet.md +++ b/applications/cross-chain-wallet.md @@ -164,8 +164,8 @@ The main focus on this milestone will be to allow users to transfer assets betwe | 0c. | Testing Guide | Unit test and end to end tests will cover the core functions to ensure everything works as expected. The documentation will have an example on how to run these tests. | | 0d. | Docker | A Dockerfile will be provided that will be able to start the node and run tests for all the functionality delivered within this milestone. | | 1. | Custom tokens | Enable users to add custom tokens and networks/chains to the wallet. | -| 2. | Mesasges EVM<>WASM | Provide the ability to sign messages for EVM and WASM accounts. | -| 3. | Transfer EVM<>WASM | Allow users to transfer assets between their own EVM and WASM accounts on the same chain. | +| 2. | Mesasges EVM - WASM | Provide the ability to sign messages for EVM and WASM accounts. | +| 3. | Transfer EVM - WASM | Allow users to transfer assets between their own EVM and WASM accounts on the same chain. | | 4. | Transaction history | Show users their transaction history for both EVM and WASM accounts. | | 5. | Explorer link | Provide links to explorer pages for enhanced transparency and accountability. | From 3da1f479781314664d968ee6a29e308f040ba731 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kasia=20=C5=81ukasiewicz?= Date: Tue, 17 Jan 2023 15:11:27 +0100 Subject: [PATCH 029/578] Zk-snarks tutorial (update) (#1446) * ZK-Snarks tutorial ZK-Snarks tutorial grant proposal * Update ZK-Snarks tutorial.md Edited to include requested changes * Updated 0 deliverables for ZK-Snarks tutorial Customised the 0 deliverables to the project * Template compliance of ZK-Snarks tutorial Applied suggestions for better compliance with the grant template Co-authored-by: S E R A Y A * Change wallet address Co-authored-by: S E R A Y A --- applications/ZK-Snarks tutorial.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/ZK-Snarks tutorial.md b/applications/ZK-Snarks tutorial.md index 271e93451b7..a447f39c64f 100644 --- a/applications/ZK-Snarks tutorial.md +++ b/applications/ZK-Snarks tutorial.md @@ -1,6 +1,6 @@ # ZK-Snarks tutorial * **Team Name:** Bright Inventions -* **Payment Address:** 0xDDcfd2a1D4Bcf058cf2828eb78dB59b300e80F8d +* **Payment Address:** 0xD75dDC4Aa3618e1417c68E5Df79ef9D66E4B1Ed9 - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 From 93a5bf1e0373de55935bd7dfdcb1501b2069675b Mon Sep 17 00:00:00 2001 From: Bojidar Marinov Date: Wed, 18 Jan 2023 09:46:38 +0200 Subject: [PATCH 030/578] Update application_accepted.yml (#1449) --- .github/workflows/application_accepted.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/application_accepted.yml b/.github/workflows/application_accepted.yml index 8d836abce2e..275af1523cd 100644 --- a/.github/workflows/application_accepted.yml +++ b/.github/workflows/application_accepted.yml @@ -114,7 +114,7 @@ jobs: [support section of our README](https://github.com/w3f/Grants-Program/blob/master/README.md#support) for more ways to find answers to your questions.

Before you start, take a moment to read through our - [announcement guidelines](https://github.com/w3f/Grants-Program/blob/master/docs/announcement-guidelines.md) + [announcement guidelines](https://github.com/w3f/Grants-Program/blob/master/docs/Support%20Docs/announcement-guidelines.md) for all communications related to the grant or make them known to the right person in your organisation. In particular, please don't announce the grant publicly before at least the first milestone of your project has been approved. At that point or shortly before, you can get in touch with us at From f14f887e088acdeb4f5cf3b7305b49007c7c8756 Mon Sep 17 00:00:00 2001 From: icodezjb <8869892+icodezjb@users.noreply.github.com> Date: Wed, 18 Jan 2023 18:23:56 +0800 Subject: [PATCH 031/578] Add psc.md (#1425) Co-authored-by: icodezjb --- applications/psc.md | 150 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 applications/psc.md diff --git a/applications/psc.md b/applications/psc.md new file mode 100644 index 00000000000..21af32b2048 --- /dev/null +++ b/applications/psc.md @@ -0,0 +1,150 @@ +# Name of your Project + +- **Team Name:** OmniBTC +- **Payment Address:** 0xBC9C045476F5A85A920EF8F8745631CEC687a4e8 (USDC - Ethereum network) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + +## Project Overview :page_facing_up: + +### Overview + +Polkadot Smart Chain (PSC) is an Ethereum-compatible smart contract parachain which uses directly Polkadot Native Currency as the native gas fee. + +Almost all parachains now are custom native currencies. +For Polkadot community users holding Polkadot Native Currency, these currencies are redundant. +While maintaining the security of the Polkadot network (Reserve-Based-Transfer), +PSC have brought an evm parachain that supports rich Dapps to Polkadot Native Currency holders. + +### Project Details + +- Transfer Polkadot Native Currency from Polkadot to PSC by DMP + ![dmp](https://github.com/OmniBTC/PSC/blob/main/docs/dmp.png) +- Transfer Polkadot Native Currency from PSC to Polkadot by UMP + ![ump](https://github.com/OmniBTC/PSC/blob/main/docs/ump.png) +- **[pallet-assets](https://github.com/OmniBTC/PSC/tree/main/pallets/assets)**: + + WASM assets can be sent/received by XCMP. + +- **[AssetsBridgeErc20.sol](https://github.com/OmniBTC/PSC/blob/main/contracts/AssetsBridgeErc20.sol)**: + + Erc20 tokens can be sent/received by ethereum bridges. + +- **[pallet-assets-bridge](https://github.com/OmniBTC/PSC/tree/main/pallets/assets-bridge)**: + + Bind EVM address and Substrate account, bind WASM assets and Erc20 tokens, deposit and withdraw fungible assets between WASM and EVM + +- Deploy EVM contracts with Polkadot Native Currency by truffle/remix/metamask. + +### Ecosystem Fit + +- (1) PSC uses Polkadot Native Currency as the original gas to directly empower Polkadot Native Currency, allowing Polkadot community users who + hold Polkadot Native Currency to cross-chain to PSC through XCMP, deploy and call EVM defi contracts on PSC. + +- (2) Our target audience is most users who hold Polkadot Native Currency, as well as potential parachain teams in the future + (providing them with technical references) + +- (3) The parachain community provides various applications, but they use their own native currency as transaction fee, + and users holding Polkadot Native Currency can only use those applications by selling their Polkadot Native Currency in exchange for their currency. + PSC directly brings these DEFI applications to Polkadot Native Currency users. + +- (4) We are the first team to eat crabs. We directly empower Polkadot Native Currency to make the Polkadot community more united. + +- (5) [Acala](https://github.com/AcalaNetwork/Acala) only uses evm and does not support ethereum api. PSC, [Astar](https://github.com/AstarNetwork/Astar), and [Moonbeam](https://github.com/PureStake/moonbeam) are all based on frontier and fully support ethereum api. + Both Astar and Moonbeam are committed to being an evm contract platform. Although PSC has the same potential, the early goal is to empower Polkadot Native Currency. + Before using the functions of the Acala/Astar/Moonbeam chain, Polkadot Native Currency users must purchase their Native Currencies, and the Native Curreny of PSC is the Polkadot Native Currency transferred from the relay chain, no need to purchase any assets. + +## Team :busts_in_silhouette: + +### Team members + +- *Name of team leader:* Tianling +- *Names of team members:* Jianbing Zhao, AAweidai, LiMing Sun + +### Contact + +- **Contact Name:** Jianbing Zhao +- **Contact Email:** icodezjb@gmail.com +- **Website:** https://omnibtc.finance/ + +### Legal Structure + +- **Registered Address:** 24 RAFFLES PLACE #17-04 CLIFFORD CENTRE Singapore 048621 +- **Registered Legal Entity:** OMNIBTC PTE. LTD. +- **UEN:** 202226651M + +### Team's experience +The team is made up of many experienced professionals in the blockchain industry. + +Tianling(0xhelloweb3) was a former senior expert of Alibaba. After leaving it, he joined a blockchain company as the core developer for 6 years. He is familiar with the underlying blockchain design and substrate development and also was in charge of the architecture design. Now, he is the team leader of OmniBTC team. + +Jianbing Zhao(icodezjb) is a Substrate / Rust Engineer with 5 years blockchain experience, He is also the core developer of ChainX. Now he is the principal blockchain expert of OmniBTC team. + +Wei Dai(AAweidai) is a Substrate / Rust Engineer with 2 years blockchain experience, He is also the core developer of ChainX. Now He is the leader of our DOLA-Protocol which is the core application protocol on PSC. + +LiMing Sun has rich experience in product design and management. He has built many nice and user-friendly internet application. Now he is the senior product manager of OmniBTC team. + +### Team Code Repos + +- https://github.com/OmniBTC/PSC + +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. + +- https://github.com/0xhelloweb3 +- https://github.com/icodezjb +- https://github.com/AAweidai + +### Team LinkedIn Profiles (if available) + +We are not on LinkedIn. + + +## Development Status :open_book: + +We have completed the [Testnet demo](https://github.com/OmniBTC/PSC/blob/main/zombienet/psc-small-network.toml#L4) version of PSC. +The first version is ready to be launch on polkadot as 2053 parachain. + + +## Development Roadmap :nut_and_bolt: + + +### Overview + +- **Total Estimated Duration:** 6 weeks +- **Full-Time Equivalent (FTE):** 1.5-2 FTE +- **Total Costs:** 8000 USDC + +### Milestone 1 — Basic functionality + +- **Estimated duration:** 6 weeks +- **FTE:** 1.5-2 +- **Costs:** 8,000 USDC + + +| Number | Deliverable | Specification | +|--------:|----------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **0a.** | License | GPLv3 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how to complete the Native Currency transfer between relaychain and PSC through DMP/UMP, and how to deploy and call the evm contracts on PSC | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an **article** that explains how are ethereum address and substrste account related. | +| 1. | Substrate module: pallet-assets-bridge | We will create a Substrate module that is a bridge from substrate assets(wasm) into ERC20 tokens(evm). | +| 2. | Polkadot Smart Chain | pallet-assets-bridge of PSC will interact in such a way: Bind EVM address and Substrate account, bind WASM assets and Erc20 tokens, deposit and withdraw fungible assets between WASM and EVM | +| 3. | Smart contracts: AssetsBridgeErc20 | We will deliver a set of evm smart contracts that are Erc20 contracts adapted to pallet-assets-bridge. | + + +## Future Plans + +- PSC will run as a parachain of the Polkadot. +- In phase 1, we first support Polkadot Native Currency's asset cross-chain(through DMP/UMP) and wasm-evm asset bridge. +- In phase 2, receive other parachain native currency through XCMP. +- In phase 3, implement the DOLA protocol, allowing the assets on the PSC to circulate freely to other mainstream chains. +- Finally, our goal is to expand the liquidity of Polkadot ecosystem assets. + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** +Web3 Foundation Website. + +Here you can also add any additional information that you think is relevant to this application but isn't part of it already, such as: + +- [DOLA-Protocol](https://github.com/OmniBTC/DOLA-Protocol) \ No newline at end of file From 5ce0a27d159d9470dca72302a98374750bc18817 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 18 Jan 2023 11:25:36 +0100 Subject: [PATCH 032/578] Update index.md Add Polkadot Smart Chain --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 10be2dbe188..13527d2a9bc 100644 --- a/applications/index.md +++ b/applications/index.md @@ -587,5 +587,5 @@ Use this page for an overview of all public grants and their status. Use the sid | [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | | [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☐ | ☐ | | [Blockcoders](http://blockcoders.io/) | [Cross-chain Wallet - XCW](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☐ | ☐ | - +| [OmniBTC](https://omnibtc.finance/) | [Polkadot Smart Chain](psc.md) | [GitHub](https://github.com/OmniBTC/PSC) | ☐ | ☐ | ☐ | From ebf42451e282048a04a18dda648d1287cea3ce86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Wed, 18 Jan 2023 15:35:10 +0100 Subject: [PATCH 033/578] RFP: Parachain Validation Conformace Testing (#1448) * RFP: Parachain Validation Conformace Testing * Update parachain_validation_conformance_testing.md Just adding some hopefully useful resources for others. Co-authored-by: David Hawig --- ...arachain_validation_conformance_testing.md | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 docs/RFPs/Open/parachain_validation_conformance_testing.md diff --git a/docs/RFPs/Open/parachain_validation_conformance_testing.md b/docs/RFPs/Open/parachain_validation_conformance_testing.md new file mode 100644 index 00000000000..3c28fba93dd --- /dev/null +++ b/docs/RFPs/Open/parachain_validation_conformance_testing.md @@ -0,0 +1,36 @@ +# Parachain Validation Conformance Testing + +* **Status:** Open +* **Proposer:** [bkchr](https://github.com/bkchr) + +## Project Description :page_facing_up: + +Each Polkadot host implementation that wants to take part in consensus needs to implement the Parachains protocol. Part of the Parachains +protocol is the execution of the Parachain Validation Function (`PVF`). The `PVF` is a wasm blob that is required to provide the `validate_block` +function that takes a fixed set of arguments (part is the proof of validity from a collator), validates the proof of validity and returns (on success) some +information back to the Polkadot host implementation. The `PVF` is a black box for the Polkadot node and it can only use the `validate_block` to +make use of it. The execution of these `PVF`s is required to stay in certain limits to reach consensus across different node implementations, +node versions, different hardware configuration and OS configurations. Some of these limits are: + +- A deterministic maximum stack depth. All node implementations should support the same stack depth. +- A deterministic maximum memory. All node implementations should support the same maximum memory usage per `PVF` execution. +- A deterministic maximum execution time. All node implementations should execute a given `PVF` in the same maximum time frame. +- A deterministic compilation/preparation of the `PVF`. All node implementations should compile/prepare a given `PVF` in the same maximum time frame and maximum memory budget. + +There are probably a lot of other limits as well. To ensure that all node implementations/versions are staying in these limits it is required +to have conformance tests. These should include basic execution of valid wasm files over to complex wasm files that ensure that the compilation/preparation +stays in the given limits and/or helps to define these limits properly across different implementations. + +**Useful resources:** +- [The Polkadot Parachain Host Implementers' Guide](https://paritytech.github.io/polkadot/book/index.html) +- [Pre-checking for PVF Compilation time](https://github.com/paritytech/polkadot/issues/3211) + +## Deliverables :nut_and_bolt: + +- Basic conformance tests that are running valid wasm files +- Conformance tests that are resulting in running over the limits. +- Fuzzing across different implementations ensuring that all are coming to the same result + +This is more some never ending task trying to find issues in different implementations, getting them fixed and searching for new vulnerabilities. +In the end these tests should ensure that updating wasm engines, introducing new node implementations +etc can be done in a sane way without hoping for the best. From 536dfc01dee9ceb8a842578fb143a50fedf9163c Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 18 Jan 2023 15:45:22 +0100 Subject: [PATCH 034/578] Update rfps.md Add parachain_validation_conformance_testing.md --- docs/rfps.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/rfps.md b/docs/rfps.md index 855d768da49..99067109e40 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -44,6 +44,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [multi-chain-block-explorer.md](RFPs/Under%20Development/multi-chain-block-explorer.md) | 🟡 | 23.11.2021 | | [on-chain-quadratic-funding.md](RFPs/Implemented/on-chain-quadratic-funding.md) | 🔴 | 29.03.2022 | | [php-api.md](RFPs/Implemented/php-api.md) | 🔴 | 27.05.2022 | +| [parachain_validation_conformance_testing.md](RFPs/Open/parachain_validation_conformance_testing.md) | 🟢 | 18.01.2023 | | [php-scale.md](RFPs/Implemented/php-scale.md) | 🔴 | 23.11.2022 | | [polkadot-collator-setup.md](RFPs/Open/polkadot-collator-setup.md) | 🟢 | 23.11.2021 | | [privacy-enhancement-polkadot-extension.md](RFPs/Under%20Development/privacy-enhancement-polkadot-extension.md) | 🟡 | 27.05.22 | From ca6e9f9da17a18b1d712fe800929246857aaed75 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan <33178835+Tbaut@users.noreply.github.com> Date: Wed, 18 Jan 2023 17:16:42 +0100 Subject: [PATCH 035/578] Multix - a simple interface to use complex multisigs (#1451) * Create Multix-a-simple-UI-for-complex-multisig.md * Update Multix-a-simple-UI-for-complex-multisig.md --- ...Multix-a-simple-UI-for-complex-multisig.md | 138 ++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 applications/Multix-a-simple-UI-for-complex-multisig.md diff --git a/applications/Multix-a-simple-UI-for-complex-multisig.md b/applications/Multix-a-simple-UI-for-complex-multisig.md new file mode 100644 index 00000000000..e112bdd7915 --- /dev/null +++ b/applications/Multix-a-simple-UI-for-complex-multisig.md @@ -0,0 +1,138 @@ +# Multix a simple interface for complex multisigs + +- **Team Name:** ChainSafe +- **Payment Address:** 0x85D81Ab61Fe16CDcaeF2Ca556ED4577A51b9b07C (DAI) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + + +## Project Overview :page_facing_up: + +In response to an ask byt Web3F and Parity. + +### Overview + +Multiple signature requirements can be attractive to organizations seeking protection against a single signer misappropriating funds in a single-sig wallet. +Polkadot and Kusama both have a `multisig` pallet that all users to submit transactions as part of a multi-sig wallet, however the experience around using it is not great. There are several issues around it. The first and probably most critical one is that the multi-sig address that is created once one selects a set of signatories and a threshold is deterministic. It means that if any of the signatory changes, or if the threshold changes, the address of the wallet will change as a result. In an enterprise level setup, it is not uncommon to add/rotate signatories. Having the wallet address changing as a result is not acceptable. Another annoyance that multisig users need to deal with is the fact that they need to have off-chain communication with other signatories in order for the last signatory to submit the pre-image hash, also called `callData` for the last signer to be able to submit the extrinsic. Finally, there is not today a dedicated interface that is easy to use to allow users to create and manage their multisig accounts. + + +### Project Details + +The goal of the project is to solve the above mentioned issues, with the use of existing pallets, namely the `utility` pallet, the `proxy` pallet and obviously the `multisig` pallet. Pure proxies, while adding some complexity to the setup, allow for great flexibility. The interface needs to make sure that these are abstracted as much as possible to make the experience as pleasing as possible. + +The interface should: +- Make address generation easy (users need to supply member/threshold) +- Show the user what calls are pending +- Allow users to approve calls and submit the extrinsic for the last signer +- Optionnaly, the UI should allow to make a transfer + +The system should: +- Allow signatories to be rotated without changing the wallet address +- Allow threshold to be changed without changing the wallet address + +Note that at first, the interface will be minimal and focus on multisig creation and signing. Other feature requests such as the flow to rotate signatories, make more complex extrinsics from the UI or add some proxies to the multisig are no-brainer next steps but are not part of this first proposal. + + +### Ecosystem Fit + +Help us locate your project in the Polkadot/Substrate/Kusama landscape and what problems it tries to solve by answering each of these questions: + + +- Where and how does your project fit into the ecosystem? +This projects aims at democratizing the use of multisigs in the Polkadot/Kusama ecosystem, which is a safe way of handling funds. Multisigs are a key element to get Enterprises and DAOs onboarded onto the ecosystem. + +- Who is your target audience? +Mainly bigger structures, enterprises and DAOs. + +- What need(s) does your project meet? +This has been clearly stated above I think, it solves the current shortcommings of what is available using simple multisigs, and brings it into a nice experience. + +- Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem? +There are many multisig UIs, such as on Subscan or even using the Polkadot-js apps UI but I don't believe that anything like this is available today in the Polkadot ecosystem. In Ethereum however, billions are currently secured by the Safe (formerly gnosis safe) smart contract multisigs. + +## Team :busts_in_silhouette: + +### Team members + +- Thibaut Sardan @tbaut + +### Contact + +- **Contact Name:** Thibaut Sardan +- **Contact Email:** thibaut@chainsafe.io +- **Website:** chainsafe.io + +### Legal Structure + +- **Registered Address:** 251 Spadina Ave, Toronto, Ontario, M5T 2E2, Canada +- **Registered Legal Entity:** ChainSafe Systems + +### Team's experience + +Thibaut worked at Parity for more than 3 years, he has extensive experience in building wallet related UIs and flows, and has been a key contributor to the Polkadot ecosystem accross projects such as Parity Signer, Polkadot-js extension and apps, Polkassembly... + +### Team Code Repos + +- https://github.com/ChainSafe +- https://github.com/tbaut + +## Development Status :open_book: + +No designer is involved in a first step, to validate the flows and start small. Here are mocks of the creation flow. +![Selection_1150](https://user-images.githubusercontent.com/33178835/213197827-24473adb-965e-4951-92cd-4a55f7e31608.png) + +Upon cration, a proxy will be created and signatories will need to approve it. +![Selection_1151](https://user-images.githubusercontent.com/33178835/213197846-289176da-0364-4665-9fe3-ebd3ce55d8df.png) + +Once the first proposal approved, the multisig and its (abstracted) proxy are ready to use. +![Selection_1152](https://user-images.githubusercontent.com/33178835/213197862-f3e562e8-a12f-40a8-a694-ccb5c42e8c3d.png) + +## Development Roadmap :nut_and_bolt: + +This section should break the development roadmap down into milestones and deliverables. To assist you in defining it, we have created a document with examples for some grant categories [here](../docs/grant_guidelines_per_category.md). Since these will be part of the agreement, it helps to describe _the functionality we should expect in as much detail as possible_, plus how we can verify and test that functionality. Whenever milestones are delivered, we refer to this document to ensure that everything has been delivered as expected. + +For each milestone, + +- make sure to include a specification of your software. _Treat it as a contract_; the level of detail must be enough to later verify that the software meets the specification. +- include the amount of funding requested _per milestone_. +- include documentation (tutorials, API specifications, architecture diagrams, whatever is appropriate) in each milestone. This ensures that the code can be widely used by the community. +- provide a test suite, comprising unit and integration tests, along with a guide on how to set up and run them. +- commit to providing Dockerfiles for the delivery of your project. +- indicate milestone duration as well as number of full-time employees working on each milestone. +- **Deliverables 0a-0d are mandatory for all milestones**, and deliverable 0e at least for the last one. If you do not intend to deliver one of these, please state a reason in its specification (e.g. Milestone X is research oriented and as such there is no code to test). + +> :zap: If any of your deliverables is based on somebody else's work, make sure you work and publish _under the terms of the license_ of the respective project and that you **highlight this fact in your milestone documentation** and in the source code if applicable! **Teams that submit others' work without attributing it will be immediately terminated.** + +### Overview + +- **Total Estimated Duration:** 1 month for an engineer full time + finance department +- **Full-Time Equivalent (FTE):** 1.5 FTE +- **Total Costs:** 30000 + +### Milestone 1 - Create and manage multisig calls + +- **Estimated duration:** 1 month +- **FTE:** 1.5 +- **Costs:** 30000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can create a multisig. The steps should be self explanatory for anyone having basic multisig knowledges. | +| 0c. | Testing Guide | The scope of this project being too small, no testing will be done in a first step. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone.. | +| 0e. | Article | We will publish an **article** that explains the basics of multisigs and show the benefits of using this interface to create more complex multisigs. +| 1. | creation screen | Users will be able to create a multisig based on a list of signatories and a threashold. | +| 2. | indexer | To provide a smooth user experience, a subsquid indexer will make sure to track multisig interractions. The Docker will be made available | +| 3. | home screen | The home screen will allow to select the available multisig and see the signatories, the threshold along any pending request | +| 4. | request approval | Upon reviewing pending approvals, users are able to approve pending approvals and submit the final extrinsic without any external communication with other signatories. | +| 5. | pallet support | The multisig will be based on the `[mutlisig](https://github.com/paritytech/substrate/tree/master/frame/multisig)` pallet, also using `[proxy](https://github.com/paritytech/substrate/tree/master/frame/proxy)` and `[utility](https://github.com/paritytech/substrate/tree/master/frame/utility)` pallets to handle the different flows.| +| 6. | stack | Both front-end and back-end are using Typescript. The front-end is built using React, it will connect to a blockchain node for live information such as the pending proposals, and to user wallets such as Polkadot-js extension to allow users to sign extrinsics. The backend is made of a subsquid indexer that is tracking multisig interractions.| + +## Future Plans + +As mentioned above, this is requesting the funding to get things started with a functionnal UI, wihout too many bells and whisles. Many needs have already been identified for institutions and DAOs. Chainsafe is dedicated to make this the stepping stone of a long road. +Other features such as the flow to rotate signatories, make more complex extrinsics from the UI or add some proxies to the multisig can be added at next steps. + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** At W3F and Parity's request From 012a33d792c120feaea9456fca9265a5a6c25ea6 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 18 Jan 2023 17:19:32 +0100 Subject: [PATCH 036/578] Update index.md Add Multix --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 13527d2a9bc..4202478fd4f 100644 --- a/applications/index.md +++ b/applications/index.md @@ -588,4 +588,5 @@ Use this page for an overview of all public grants and their status. Use the sid | [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☐ | ☐ | | [Blockcoders](http://blockcoders.io/) | [Cross-chain Wallet - XCW](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☐ | ☐ | | [OmniBTC](https://omnibtc.finance/) | [Polkadot Smart Chain](psc.md) | [GitHub](https://github.com/OmniBTC/PSC) | ☐ | ☐ | ☐ | +| [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☐ | ☐ | From 8c59d2dcabb963dea380208590f0024eb604fc5c Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Thu, 19 Jan 2023 14:08:10 +0100 Subject: [PATCH 037/578] Update index.md (#1453) Ventur -> Completed --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 4202478fd4f..1bdbba3aeee 100644 --- a/applications/index.md +++ b/applications/index.md @@ -516,7 +516,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Redstone Network](https://github.com/difttt) | [Redstone Network](./RedStone%20Network.md) | [GitHub](https://github.com/difttt) | ☐ | ☐ | ☐ | | [JURIMETRIC TECNOLOGIA LTDA](https://www.jurimetric.com.br/) | [Polkadart](./Polkadart.md) | [GitHub](https://github.com/rankanizer/polkadart) | ☐ | ☒ | ☐ | | [Skye Kiwi](https://skye.kiwi/) | [Choko Wallet](./choko_wallet.md) | [GitHub](https://github.com/skyekiwi) | ☐ | ☒ | ☐ | -| [Popular Coding](https://www.popularcoding.com/) | [Ventur](./ventur.md) | [GitHub](https://github.com/popular_coding) | ☐ | ☒ | ☐ | +| [Popular Coding](https://www.popularcoding.com/) | [Ventur](./ventur.md) | [GitHub](https://github.com/popular_coding) | ☐ | ☒ | ☒ | | [Asylum](https://asylum.space/) | [Asylum follow-up 1](./asylum_follow_up_1.md) | [GitHub](https://gitlab.com/asylum-space/) | ☒ | ☒ | ☐ | | [Cyril Carlier](https://github.com/CrommVardek) | [Maki](./Maki.md) | [GitHub](https://github.com/CrommVardek) | ☐ | ☐ | ☐ | | [TopMonks](https://www.topmonks.com/) | [Calamar](./Calamar.md) | [GitHub](https://github.com/topmonks/calamar) | ☐ | ☒ | ☐ | From a93fe6614f760079af693708cbdd60bba0505048 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Thu, 19 Jan 2023 15:09:04 +0100 Subject: [PATCH 038/578] Update index.md (#1454) decentralized invoice -> first delivery --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 1bdbba3aeee..a17d3b4aab5 100644 --- a/applications/index.md +++ b/applications/index.md @@ -558,7 +558,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Mutai Solutions](https://bryanmutai.co/) | [Crowdloans-FET](Crowdloans-FET.md) | [GitHub](https://github.com/brymut) | ☐ | ☐ | ☐ | | [k/factory](https://k-f.co/) | [Centrifuge Go-Substrate-RPC Client V2](centrifuge-gsrpc-v2.md) | [GitHub](https://github.com/centrifuge/go-substrate-rpc-client) | ☐ | ☐ | ☐ | | [Colorful Notion](https://github.com/colorfulnotion) | [Zombienet Explorer: Multi-Chain Substrate Block Explorer](Zombienet-Explorer.md) | [GitHub](https://github.com/colorfulnotion/zombienet-explorer) | ☐ | ☐ | ☐ | -| [TwinP](https://github.com/herou) | [Decentralized Invoice](decentralized_invoice.md) | [GitHub](https://github.com/herou) | ☐ | ☐ | ☐ | +| [TwinP](https://github.com/herou) | [Decentralized Invoice](decentralized_invoice.md) | [GitHub](https://github.com/herou) | ☐ | ☒ | ☐ | | [Zondax](http://zondax.ch/) | [Hybrid node research grant](hybrid_node_research.md) | [GitHub](https://github.com/ZondaX) | ☐ | ☐ | ☐ | | [Bright Inventions](https://brightinventions.pl/) | [ZK-Snarks Tutorial](ZK-Snarks%20tutorial.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☐ | | [Common Orbit LLC](https://brson.github.io) | [wasm-opt-for-rust maintenance](../maintenance/wasm-opt-for-rust.md) | [GitHub](https://github.com/brson/wasm-opt-rs) | ☐ | ☒ | ☐ | From 76a24eef6bcde1e8ed95089b5c133e60318bcb1b Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 19 Jan 2023 15:10:52 +0100 Subject: [PATCH 039/578] Update README.md Add peaq grants program --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e5e9aff98e4..3bbcb7c4418 100644 --- a/README.md +++ b/README.md @@ -322,6 +322,7 @@ Below is a list of other grant programs in the Polkadot/Substrate ecosystem: - [Interlay Labs Grants Program](https://github.com/interlay/Grants-Program) - [Moonbeam Grants Program](https://moonbeam.foundation/grants/) - [OAK’s Developer Grants](https://oak.tech/community/grants/) +- [peaq Ecosystem Grant Program](https://www.peaq.network/grant-program) - [Picasso / Composable Grants Program](https://grants.composable.finance) - [SubQuery Grants Programme](https://subquery.network/grants) From cd6cf18b540fce3636c550c49b2b5f67cd17d051 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 19 Jan 2023 15:13:04 +0100 Subject: [PATCH 040/578] Update funding.md Update list of grant programs --- docs/funding.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/docs/funding.md b/docs/funding.md index 5f9cebf40c4..827daa7d6ec 100644 --- a/docs/funding.md +++ b/docs/funding.md @@ -23,13 +23,15 @@ The best way to find out about upcoming hackathons is by following Polkadot on t Below is a list of other grant programs in the Polkadot/Substrate ecosystem: -- [Darwinia Grants Program](https://docs.darwinia.network/developers/dev-bounty) -- [Moonbeam Grants Program](https://moonbeam.foundation/grants/) -- [Edgeware Grants and Bounties](https://github.com/edgeware-builders/construction-projects) +- [Acala Grants Program](https://acala.network/ecosystem-program) +- [Astar / Shiden Network Builders Program](https://github.com/PlasmNetwork/Builders-Program) - [Crust Grants Program](https://github.com/crustio/Crust-Grants-Program) +- [Darwinia Grants Program](https://github.com/darwinia-network/collaboration/blob/master/grant/README.md#grant-program) +- [Edgeware Grants and Bounties](https://gov.edgewa.re/discussion/1132-edgeware-proposal-process-and-template) - [HydraDX Grants and Bounties](https://docs.hydradx.io/new_deal/) -- [Astar / Shiden Network Builders Program](https://github.com/PlasmNetwork/Builders-Program) +- [Interlay Labs Grants Program](https://github.com/interlay/Grants-Program) +- [Moonbeam Grants Program](https://moonbeam.foundation/grants/) +- [OAK’s Developer Grants](https://oak.tech/community/grants/) +- [peaq Ecosystem Grant Program](https://www.peaq.network/grant-program) - [Picasso / Composable Grants Program](https://grants.composable.finance) - [SubQuery Grants Programme](https://subquery.network/grants) -- [Acala Grants Program](https://acala.network/ecosystem-program) -- [OAK’s Developer Grants](https://oak.tech/community/grants/) From 1ab013e0aa6961d200c91753b3f3a45b18bc20c3 Mon Sep 17 00:00:00 2001 From: GreenPants <104028553+Martin-Kiss@users.noreply.github.com> Date: Fri, 20 Jan 2023 08:44:58 +0100 Subject: [PATCH 041/578] CosmWasmVM (#1430) * docs(CosmWasmVM) Composable Finance grant application * docs(CosmWasmVM) Apply suggestion from review --- applications/CosmWasmVM-CoreProduct .md | 181 ++++++++++++++++++++++++ 1 file changed, 181 insertions(+) create mode 100644 applications/CosmWasmVM-CoreProduct .md diff --git a/applications/CosmWasmVM-CoreProduct .md b/applications/CosmWasmVM-CoreProduct .md new file mode 100644 index 00000000000..98a4cdd579f --- /dev/null +++ b/applications/CosmWasmVM-CoreProduct .md @@ -0,0 +1,181 @@ +# CosmWasm VM - Core product + +- **Team Name:** Composable Finance LTD +- **Payment Address:** (USDC) 0x7C0776FBfadcB5EeEA5eF1DC5b50d603c9a40621 +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +Composable Finance focuses on trustless, cross-chain communications between Polkadot and other ecosystems. +In this case, a CosmWasm VM is a supplementary component to onboarding a new developer community and a widely adopted smart contract framework. + +### Overview + +The first CosmWasm VM implementation in Substrate for the Polkadot and Kusama ecosystems. + +CosmWasm, short for Cosmos Webassembly, is a smart contract framework designed for use in the Cosmos ecosystem. +Originally, the CosmWasm specification was built as a Cosmos SDK module and currently provides a plug-and-play functionality for Cosmos chains. +CosmWasm was written in half Rust and half Golang (Go), with low-level calls in Rust and high-level dispatching logic, handled in Go. +The actor model is implemented in Go which then calls the low-level Rust library to execute contracts effectively. + +CosmWasm offers a high degree of customization as part of its design philosophy. +A key feature of CosmWasm is that it allows for multi-chain contracts; one dApp, one contract, but multiple chains. +As a result, CosmWasm allows users to benefit from the utility across chains instead of being forced to choose between them. +Implementing the CosmWasm framework in Substrate will allow developers and parachains in the Polkadot and Kusama ecosystems +to seamlessly interact with a well-tested and heavily adopted smart contract framework. + +In terms of security, CosmWasm is designed to avoid the attack vectors found in Ethereum and Solidity, such as Reentrancy, and Default Visibilities. +Its security is further reinforced by its well-developed tooling and testing mechanisms prioritized early in its conception. +Due to these benefits, many projects have adopted CosmWasm as their smart contract framework, +including notable examples like Juno, OKX, and Osmosis. + +Overall, the CosmWasm VM proved to be the best VM for our needs as we found it to be the most portable and robust solution. +CosmWasm was built with interoperability in mind from the very beginning, +the goal being to build a smart contracting framework capable of operating across multiple blockchains. +By utilizing the XCMP as a transport layer, +CosmWasm contracts would be able to communicate with each other on different parachains without the need for any trusted parties. +The entire Dotsama ecosystem has the potential to benefit from CosmWasm. +This means that any team building on Dotsama will have unparalleled reach, +and the potential to create applications that have never been seen before. + + +### Project Details + +In its current state, Confio’s implementation of the CosmWasm VM excludes library components and consists of a single implementation targeting the Cosmos SDK. +Our team is building a library implementation of CosmWasm that can be utilized by different host implementations to minimize the work to port Cosmwasm to different ecosystems. +Currently, the only implementation of CosmWasm consists of half of it written in Rust and half Golang. +Therefore, the current version was not compatible with Substrate and has never been leveraged outside of Cosmos. +This meant we had to build a VM from scratch. + +Furthermore, we have two host implementations which allows developers to integrate CosmWasm in their ecosystems in a straightforward manner. +This ensures that our CosmWasm VM is highly portable with consistent execution semantics regardless of its host. +As a result, this would enable developers to integrate our CosmWasm VM as a pallet, within a frontend app, or inside a CLI tool. + +The official CosmWasm VM uses Wasmd for the runtime. +It ensures that developers follow the same execution semantics, +thus, all CosmWasm contracts will function the same irrespective of the Cosmos blockchain they are executed on. +We utilized the Wasmd reference material to rewrite the Go portions of CosmWasm in Rust for implementation on our parachains. + +![high_level_overview](https://drive.google.com/uc?id=1zcIT6UHveRrUfZunNx6otKuMCerEdX2J) + +- Documentation of core components, protocols, architecture, etc. to be deployed +- https://book.cosmwasm.com/ +- https://docs.cosmwasm.com/docs/1.0/ +- https://cosmwasm.com/resources + + +- PoC/MVP or other relevant prior work or research on the topic: +- https://medium.com/cosmwasm/cosmwasm-for-ctos-f1ffa19cccb8 +- https://medium.com/cosmwasm/cosmwasm-for-ctos-i-the-architecture-59a3e52d9b9c +- https://medium.com/cosmwasm + +### Ecosystem Fit + +CosmWasm would be able to facilitate the orchestration of cross-chain smart contracts between different parachains. + +Our target audience consists of parachain builders, +and dApps in the Dotsama ecosystem that want to leverage a WASM based smart contracting framework. +We hope this VM enables and incentivizes developers to build in the Polkadot ecosystem as CosmWasm has been adopted by a large developer community. + +We are the only team in the Substrate/Polkadot/Kusama ecosystem implementing CosmWasm for Substrate. + +## Team :busts_in_silhouette: + +### Team members + +- Name of team leader: Hussein Ait-Lahcen +- Names of team members: Cor Pruijs, Abduallah Eryuzlu + +### Contact + +- **Contact Name:** Ahmad Wehbi +- **Contact Email:** ahmad@composable.finance +- **Website:** https://www.composable.finance/ + +### Legal Structure + +- **Registered Address:** + + FortGate Offshore Investment and Legal Services LTD, + + 1st Floor, The Sotheby Building, Rodney Bay, Gros-Islet, + + P.O. Box 838, Castries, Saint Lucia +- **Registered Legal Entity:** Composable Finance LTD + +### Team's experience + +- Hussein Ait Lahcen: Principal Blockchain engineer at Composable Finance, previously Core Rust developer at Parity +- Abdullah Eryuzlu: Substrate Rust engineer at Composable Finance, previously Substrate engineer at Webb.tools +- Cor Pruijs: Software engineer at Composable Finance, previously Software engineer at ConsenSys + +### Team Code Repos + +- https://github.com/ComposableFi/cosmwasm-vm + +GitHub accounts of all team members: + +- https://github.com/hussein-aitlahcen +- https://github.com/aeryz +- https://github.com/cor + +### Team LinkedIn Profiles (if available) + +- https://tr.linkedin.com/in/abdullah-eryuzlu-675611182 +- https://fr.linkedin.com/in/hussein-a-967810a7 +- https://nl.linkedin.com/in/corpruijs + +## Development Status :open_book: +https://medium.com/supercolony/a-look-into-virtual-machines-and-smart-contract-runtimes-313cd7d494e3 + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 11 Weeks +- **Full-Time Equivalent (FTE):** 1,5 FTE +- **Total Costs:** 29,700 USD + +### Milestone 1 — Pallet CosmWasm VM + +- **Estimated duration:** 8 weeks +- **FTE:** 1,5 +- **Costs:** $21,600 + +| Number | Deliverable | Specification | +|--------:|----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **0a.** | License | GPLv3 / MIT / | +| **0b.** | Documentation | We will provide both inline documentation of the code and a basic tutorial that explains how a user can test and execute transactions using cosmwasm vm pallet. | +| **0c.** | Testing Guide | Core functions will be fully covered by integration tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile that can be used to test the pallet functionality. | +| **1a.** | Development | We will deliver the core pallet for the CosmWasm VM | +| **1b.** | Development | This milestone includes the pallet supporting the following features: XCM integration, native asset support, allow calling extrinsics, verification through Fuzzing & Kani and Benchmarking. | | +| **1c.** | Testing | A local network setup running a substrate chain with the pallet and a contract showing the functionality described in the milestones, so that it can be inspected and called through Polkadotjs.org. | + +### Milestone 2 — PolkadotJS Integration + +- **Estimated duration:** 3 weeks +- **FTE: 1.5** +- **$8,100** + + +| Number | Deliverable | Specification | +|--------:|---------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **0a.** | License | GPLv3 / MIT | +| **0b.** | Documentation | We will provide both inline documentation of the code and a basic tutorial that explains how contracts interact with PolkadotJS. | +| **0c.** | Testing Guide | Core functions will be fully covered by integration tests to ensure functionality and robustness. | +| **0d.** | Docker | We will provide a Dockerfile that can be used to test all the functionality delivered with this milestone | +| **0e.** | Article | We intend to publish an article which outlines what was achieved as part of the grant, how it benefits the Substrate ecosystem and how other parachains can utilize the pallet. | +| **1.** | Development | This milestone would include PolkadotJS support querying contracts’ state and interacting with CosmWam contracts | + + +## Future Plans + +Composable is continuing to contribute upstream, further pushing the boundaries of cryptographic research and opening up endless possibilities for the Dotama ecosystem as we work in line with our cross-chain/cross-layer interoperability goals. + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** + +Web3 Foundation Medium and Twitter + From ab163563ade572bf73ce097b8174c4275ea957c5 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 20 Jan 2023 08:46:48 +0100 Subject: [PATCH 042/578] Update index.md Add CosmWasm VM --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index a17d3b4aab5..9746fbcac50 100644 --- a/applications/index.md +++ b/applications/index.md @@ -589,4 +589,5 @@ Use this page for an overview of all public grants and their status. Use the sid | [Blockcoders](http://blockcoders.io/) | [Cross-chain Wallet - XCW](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☐ | ☐ | | [OmniBTC](https://omnibtc.finance/) | [Polkadot Smart Chain](psc.md) | [GitHub](https://github.com/OmniBTC/PSC) | ☐ | ☐ | ☐ | | [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☐ | ☐ | +| [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct .md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | From 710ae797be8123f3c6638f380ea25616fadbb375 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 20 Jan 2023 08:47:25 +0100 Subject: [PATCH 043/578] Update index.md --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 9746fbcac50..cf050baedc3 100644 --- a/applications/index.md +++ b/applications/index.md @@ -589,5 +589,5 @@ Use this page for an overview of all public grants and their status. Use the sid | [Blockcoders](http://blockcoders.io/) | [Cross-chain Wallet - XCW](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☐ | ☐ | | [OmniBTC](https://omnibtc.finance/) | [Polkadot Smart Chain](psc.md) | [GitHub](https://github.com/OmniBTC/PSC) | ☐ | ☐ | ☐ | | [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☐ | ☐ | -| [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct .md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | +| [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | From ae5fa0bef5c30e76e0024e253686f33784439df5 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Fri, 20 Jan 2023 08:49:30 +0100 Subject: [PATCH 044/578] fix cosmwasm file name --- .../{CosmWasmVM-CoreProduct .md => CosmWasmVM-CoreProduct.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename applications/{CosmWasmVM-CoreProduct .md => CosmWasmVM-CoreProduct.md} (100%) diff --git a/applications/CosmWasmVM-CoreProduct .md b/applications/CosmWasmVM-CoreProduct.md similarity index 100% rename from applications/CosmWasmVM-CoreProduct .md rename to applications/CosmWasmVM-CoreProduct.md From f726d43496e70a6f9d1cd02905faebbaa924fb31 Mon Sep 17 00:00:00 2001 From: Bai L <94514135+bai-3@users.noreply.github.com> Date: Sat, 21 Jan 2023 01:04:42 +0800 Subject: [PATCH 045/578] Dao-entrance Grant Application: online collaboration tool for web3 (#1445) * add dao-entrance-phase-1.md * fix level and Milestone * fix Article and M4 DAPP desc * fix flutter DAPP rendeing desc * add main ui --- applications/dao-entrance-phase-1.md | 209 +++++++++++++++++++++++++++ 1 file changed, 209 insertions(+) create mode 100644 applications/dao-entrance-phase-1.md diff --git a/applications/dao-entrance-phase-1.md b/applications/dao-entrance-phase-1.md new file mode 100644 index 00000000000..0f6d892818c --- /dev/null +++ b/applications/dao-entrance-phase-1.md @@ -0,0 +1,209 @@ +# DAO-entrance phase 1 + +- **Team Name:** Asyoume inc (点道为址科技有限公司) +- **Payment Address:** 1PE3N5KmEdhE561i5jRTxeQidSuQGrGtLj912GFMw4vxXMG (aUSD) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + + +## Project Overview :page_facing_up: + +### Overview +In recent years, with the rapid development of information technology, people's work mode has gradually changed from centralized work to decentralized work. Besides, the spread and prevalence of COVID-19 in recent years get people know the importance of diverse work modes. With this trend, the concept web3 steps out from its previous version web2. + +Currently, most Web3 companies are still working with tools within Web2, such as Telegram, Discord, Google Drive, Enterprise WeChat, DingTalk, Lark, and etc, Which user's information and initiative are limited. + +**DAO-entrance** is trying to create a safe, efficient, powerful and Web3-based instant collaboration tool, which is a breakthrough. It establishes solid trust relationship among organization members through open and transparent smart contract; it maintain end-to-end encrypted communication, to ensure efficient and confidentiallity; it improves work efficiency with thousands of open-source collaborative tool libraries; it keeps data in safe hands through distributed and decentralized storage. + +**DAO-entrance** focuses on providing DAO with a comprehensive collaborative tool. The tool will help DAO to set up a core team. After the core team authorized by the community, they can make decisions on the daily affairs of DAO, in order to avoiding endless voting. + +### Project Details + +Our long-term goal is to provide a safe, private, efficient and automated DAO tool for enterprises, blockchains and web3 practitioners, in a multi-stage style in different period, and, in the meantime, to offer communication, consensus, production, settlement and other basic needs of members. + +Currently, we provide not only "ink!"-based DAO smart contract templates, but also substrate-based pallet templates, which support instant integration of all substrate-based blockchains. By compatible with existing DAOs through a non-instrusive way, it allows enterprises and organization to create their own DAOs in a more convenient way. + +At this stage, **DAO-entrance** will provide a slack-like client which is based on the matrix protocol for instant messaging. Users can log in with a blockchain account. This tool is designed for modern devices and is compatible with devices equipped with Windows/mac/Linux/android/iOS, and provides organization members with a concise and convenient collaboration platform. + +

+ +

+ +Through DAPP rendering engine which is based on flutter, **DAO-entrance** is compatible with most DAPPs and run at a faster speed. The core business would be materialized by flutter native applications, and DAPPs would be rendered by the dapp engine. + +

+ +

+ +**DAO-entrance** Client is a non-intrusive client that supports layer1 blockchain and layer2 smart contracts, and it's dedicated to adapting DAO scenarios. As an initial stage, we build the **DAO-entrance** chain based on the substrate, and manage the **DAO-entrance** chain by using DAO. After continuous improvement of the Client, we create **DAO-entrance** DAO, which is a fully autonomous and decentralized organization. Through our own requirements of **DAO-entrance** and continuous introduction of other work modes of DAO, we provide substrate pallet and "ink!" smart contracts with a fast DAO solution Polkadot Ecosystem. + +According to business needs, DAO organizations will set up skill groups, called "guilds", and each guild will automatically create public chat channels and Kanbans in **DAO-entrance**. Users can join a guild based on their own strengths or willings. Members can choose whether to participate in projects or events according to their own strengths and willingness. + +We provide DAO templates the substrate pallet and ink! Smart contracts: +1. RoadMap management. +2. Manage DAO share. +3. Management of core team and guild. +4. Workflow management (board/task). +5. Financial management. +6. Task bounty management. +7. Hot-swap voting management. +8. Contribution value and medal management. +9. Level management. + +**DAO-entrance** focuses on providing DAO with a comprehensive collaborative tool. The tool will help DAO to set up a core team. After the core team authorized by the community, they can make decisions on the daily affairs of DAO, in order to avoiding endless voting. + +According to business needs, DAO organizations will set up skill groups, called "guilds", and each guild will automatically create public chat channels and Kanbans in DAO-entrance. Users can join a guild based on their own strengths or willings. Members can choose whether to participate in projects or events according to their own strengths and willingness. + +

+ +

+ +We provide DAO templates the substrate pallet and ink! Smart contracts: +1. RoadMap management. +2. Manage DAO share. +3. Management of core team and guild. +4. Workflow management (board/task). +5. Financial management. +6. Task bounty management. +7. Hot-swap voting management. +8. Contribution value and medal management. +9. Level management. + +### Ecosystem Fit + +Polkadot ecology currently don't have enough efficial tools specifically designed for DAO services. **DAO-entrance** will focus on helping DAOs to achieve synergy, and improve productivity. + +Our Client will actively adapt to the Polkadot Ecotop20 project, and offer Polkadot eco-partners a out-of-the-box online communication and collaboration tool. + +We will make substrate pallets and "ink!" Smart contracts open-sourced to provide templates,which will help the partners of Polkadot ecosystem quickly integrate and publish their own DAOs. + +## Team :busts_in_silhouette: + +### Team members + +- Erica - Product Manager +- Bai L - Blockchain Developer +- Vicent - Data-science Manerger +- Wilson Lin - Market Operator + +### Contact + +- **Contact Name:** Bai L +- **Contact Email:** contact@asyou.me +- **Website:** https://www.asyou.me + +### Legal Structure + +- **Registered Address:** Building 11, No. 6055, Jinhai way, Fengxian District, Shanghai, China +- **Registered Legal Entity:** Diandaoweizhi Technology Co., Ltd. + +### Team's experience + +Erica +- 4-years project management and investing experience in the blockchain industry. She is good at structuring and organizing the teams around the projects. +- 5-years product Manager experience in Alibaba. + +Bai L +- 10-years full stack software development experience +- Solid knowledge and experience with various programming language i.e. Go,Dart,Javascript,Rust +- Blockchain & Substrate enthusiast + +Vicent +- 10-years Data-science Manerger experience. +- 7-years DAO believers + +Wilson Lin +- 15 years management experience in big data industry includes 9 years as CEO of start up company. +- 12 years working experience in globe IT vendor like as Oracle, Sun microsystem, EMC, NCR, etc.. +- The believer of Block Chain, DAO and cryptocurrency + +### Team Code Repos + +- https://github.com/DAO-entrance/app +- https://github.com/DAO-entrance/org-node +- https://github.com/DAO-entrance/dao_pallet + +Team github accounts + +- https://github.com/bai-3 + + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 4 months +- **Full-Time Equivalent (FTE):** 1 FTE +- **Total Costs:** 6000 USD + +### Milestone 1 — Implement substrate runtime and core modules + +- **Estimated duration:** 1 month +- **FTE:** 1 FTE +- **Costs:** 1500 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Substrate module: **DAO-entrance** | we create a substrate pallet specifically designed for DAO, which includes the following functions: 1. RoadMap Target Management 2. DAO Share Management 3. Core Team, Association Management 4. Workflow Management (board/task) 5. Financial Management 6. Task reward management 7. Hot-plug voting management 8. Contribution Value, Medal Management 9. Hierarchical Management | + +### Milestone 2 — Decentralized real-time communication base on matrix  + +- **Estimated duration:** 1 month +- **FTE:** 1 FTE +- **Costs:** 1500 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | DAO desktop and app | We will develop a window/mac/list/ios/android client based on flutter, which includes the following functions: 1. polkadot wallet login. 2. messaging. 3. end-to-end encryption. 4. voice and video calls. 5. matrix node server. | +| 2. | Tests | End to end testing of window/mac/list/ios/android full platform to ensure application security and stability | + + +### Milestone 3 — DAO App/Desktop + +- **Estimated duration:** 1 month +- **FTE:** 1 FTE +- **Costs:** 1500 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | DAO UI on native flutter View | A flutter navive module 1. RoadMap Target Management 2. DAO Share Management 3. Core Team, Association Management 4. Workflow Management (board/task) 5. Financial Management 6. Task reward management 7. Hot-plug voting management 8. Contribution Value, Medal Management 9. Hierarchical Management | +| 2. | Tests | End to end testing of window/mac/list/ios/android full platform to ensure application security and stability | + +### Milestone 4 — Dapp rendering engine and ink! smart contract + +- **Estimated duration:** 1 month +- **FTE:** 1 FTE +- **Costs:** 1500 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an article and a tutorial that explains the work done as part of the grant.| +| 1. | ink! DAO smart contract | we create a smart contract specifically designed for DAO, which includes the following functions: 1. RoadMap Target Management 2. DAO Share Management 3. Core Team, Association Management 4. Workflow Management (board/task) 5. Financial Management 6. Task reward management 7. Hot-plug voting management 8. Contribution Value, Medal Management 9. Hierarchical Management | +| 2. | flutter DAPP rendeing | we create a engine run DAPP on Flutter natively,it is Compatible with Polkadot {. js} extension api | +| 3. | Compatible with Polkadot ecological top20 project | 1. Compatibility of governance tools 2. Blockchain status monitoring 3. Smart contract deployment and operation| + + +## Future Plans + +In the second phase, **DAO-entrance** is committed to combining block chains with privacy computing, providing cloud-like mode to provide secure and efficient privacy computing services. The mode of consensus on the chain and calculation under the chain ensures security while satisfying the operation of complex programs. + +

+ +

+ +At this stage, the Privacy Computing Node provides a public Privacy Computing Platform, while DAO/Enterprise can quickly build block-chain-based trust through our portal chain, and can book Privacy Computing Resources, run secure and trusted programs, and exchange data on the chain. \ No newline at end of file From 1d3f8c7025eabd6e7ea87d9cf0b90e7248a86794 Mon Sep 17 00:00:00 2001 From: Nabil Abdellaoui Date: Fri, 20 Jan 2023 12:05:20 -0500 Subject: [PATCH 046/578] Update applications index (#1458) Subalfred grant completed --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index cf050baedc3..6155743eb74 100644 --- a/applications/index.md +++ b/applications/index.md @@ -529,7 +529,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Polket](https://toearn.fun) | [ToEarnFun](./polket_toearnfun.md) | [GitHub](https://github.com/polketio/polket-node) | ☐ | ☒ | ☐ | | ALPHA LABS | [Binary merkle tree](./binary_merkle_tree.md) | [GitHub](https://github.com/frisitano) | ☐ | ☐ | ☐ | | [Standard Protocol](https://standard.tech/) | [New Order - a full onchain orderbook dex with indexers](./Standard_Protocol.md) | [GitHub](https://github.com/standardweb3) | ☐ | ☐ | ☐ | -| [hack-ink](https://github.com/hack-ink) | [Subalfred](./subalfred.md) | [GitHub](https://github.com/hack-ink/subalfred) | ☐ | ☒ | ☐ | +| [hack-ink](https://github.com/hack-ink) | [Subalfred](./subalfred.md) | [GitHub](https://github.com/hack-ink/subalfred) | ☐ | ☒ | ☒ | ### 🏄‍♀️ Wave 16 - Fourth Quarter 2022 From 8c31837ff78335f81a309f4ff065dd5a555f370f Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 20 Jan 2023 18:07:51 +0100 Subject: [PATCH 047/578] Update index.md add DAO-entrance --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 6155743eb74..d7c5a7ec590 100644 --- a/applications/index.md +++ b/applications/index.md @@ -590,4 +590,5 @@ Use this page for an overview of all public grants and their status. Use the sid | [OmniBTC](https://omnibtc.finance/) | [Polkadot Smart Chain](psc.md) | [GitHub](https://github.com/OmniBTC/PSC) | ☐ | ☐ | ☐ | | [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☐ | ☐ | | [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | +| [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☐ | ☐ | ☐ | From 604d506591ea57eef4fee04aa2cfdf2010e8772c Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Fri, 20 Jan 2023 18:14:25 +0100 Subject: [PATCH 048/578] RFP: Decentralized Security Marketplace (#1452) * RFP: Security Marketplace * Update security-marketplace.md security marketplace -> decentralized security marketplace * Rename security-marketplace.md to decentralized-security-marketplace.md --- .../decentralized-security-marketplace.md | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 docs/RFPs/Open/decentralized-security-marketplace.md diff --git a/docs/RFPs/Open/decentralized-security-marketplace.md b/docs/RFPs/Open/decentralized-security-marketplace.md new file mode 100644 index 00000000000..3c32c753169 --- /dev/null +++ b/docs/RFPs/Open/decentralized-security-marketplace.md @@ -0,0 +1,40 @@ +# Decentralized Security Marketplace + +* **Status:** Open +* **Proposer:** [Matteo Casonato](https://github.com/0xCaso), [Bhargav Batt](https://github.com/bhargavbh) + +## Project Description :page_facing_up: + +According to the [*Immunefi's 2022 annual report*](https://assets.ctfassets.net/t3wqy70tc3bv/1ObYJk9jzWS4ExHICslYep/e2b5cee51268e47ee164c4dffbd78ad4/Immunefi_Crypto_Losses_2022_Report.pdf), there has been a total loss of ~$3.77B because of hacks in the web3 space. To increase the protocol's security, audits and bug bounties can be a useful tool. + +A **decentralized security marketplace** would allow projects to find reviewers/testers/auditors/whitehats, and vice versa. This would benefit everyone: +- **Projects** would increase their security; +- **Developers** would have the possibility to earn while using their skills, improving them; +- The **ecosystem** would be more secure, with more projects being audited and more developers learning about security. + +The original thought is to make it as a smart contract platform, deployable on an existing parachain (that supports WASM smart contracts, such as [Astar](https://docs.astar.network/docs/getting-started) or [Watr](https://docs.watr.org/builders/substrate-contracts)) using [ink!](https://paritytech.github.io/ink/) ([here](https://github.com/paritytech/awesome-ink) you can see some examples). + +**Note**: This use case can be extended/applied to other areas. The main problem to solve here is to find a way to manage the *delayed* transaction between two parties (i.e., [escrow](https://en.wikipedia.org/wiki/Escrow)), and to ensure fairness and transparency (e.g., a reviewer is not able to deliver all the reports in time, and the project's team would like to decide whether to extend the escrow duration or just to pay a lower percentage of the established bounty). + +### Actors :busts_in_silhouette: + +To ensure fairness and transparency, the marketplace could have the following actors: +- **Projects** - The projects that want to be reviewed / tested; +- **Auditors** - The developers that want to perform audits / hunt bugs; +- **Arbiters** - The developers that will arbitrate the disputes between projects and auditors (they will be useful if a project opens a dispute for any reason). They could get a small percentage of the bounty. + +## Deliverables :nut_and_bolt: + + +The followings could be the initial deliverables of the project. Of course, improvements and additions are more than welcome. +1) Initial **research and design** of the protocol: + - You can refer to what [Immunefi](https://immunefi.com/explore/) and [Code4rena](https://code4rena.com/) are doing (but bring that on-chain); + - How to ensure the trustless interaction (e.g., projects could lock a percentage of the bounty to open the request); + - What types of disputes could be risen and how to solve them; + - How to manage time delays; + - Look for other use cases (in or outside the security field); +2) Development of the **protocol**: + - Development of the governance smart contract (e.g. to add/remove projects, auditors, arbiters, etc.); + - Development of the auditing smart contract (e.g. to create audits); + - Development of the arbitration smart contract (e.g. to create/solve disputes); +3) Development of the **frontend**, that enables the actors to interact with the protocol. From 89d7464139fad7b44ff726abfd58cb97cc475350 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Fri, 20 Jan 2023 18:24:28 +0100 Subject: [PATCH 049/578] fix website --- applications/dao-entrance-phase-1.md | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/applications/dao-entrance-phase-1.md b/applications/dao-entrance-phase-1.md index 0f6d892818c..44e8a571aa8 100644 --- a/applications/dao-entrance-phase-1.md +++ b/applications/dao-entrance-phase-1.md @@ -24,15 +24,15 @@ Currently, we provide not only "ink!"-based DAO smart contract templates, but al At this stage, **DAO-entrance** will provide a slack-like client which is based on the matrix protocol for instant messaging. Users can log in with a blockchain account. This tool is designed for modern devices and is compatible with devices equipped with Windows/mac/Linux/android/iOS, and provides organization members with a concise and convenient collaboration platform. -

- -

+ + + Through DAPP rendering engine which is based on flutter, **DAO-entrance** is compatible with most DAPPs and run at a faster speed. The core business would be materialized by flutter native applications, and DAPPs would be rendered by the dapp engine. -

- -

+ + + **DAO-entrance** Client is a non-intrusive client that supports layer1 blockchain and layer2 smart contracts, and it's dedicated to adapting DAO scenarios. As an initial stage, we build the **DAO-entrance** chain based on the substrate, and manage the **DAO-entrance** chain by using DAO. After continuous improvement of the Client, we create **DAO-entrance** DAO, which is a fully autonomous and decentralized organization. Through our own requirements of **DAO-entrance** and continuous introduction of other work modes of DAO, we provide substrate pallet and "ink!" smart contracts with a fast DAO solution Polkadot Ecosystem. @@ -53,9 +53,7 @@ We provide DAO templates the substrate pallet and ink! Smart contracts: According to business needs, DAO organizations will set up skill groups, called "guilds", and each guild will automatically create public chat channels and Kanbans in DAO-entrance. Users can join a guild based on their own strengths or willings. Members can choose whether to participate in projects or events according to their own strengths and willingness. -

- -

+ We provide DAO templates the substrate pallet and ink! Smart contracts: 1. RoadMap management. @@ -202,8 +200,6 @@ Team github accounts In the second phase, **DAO-entrance** is committed to combining block chains with privacy computing, providing cloud-like mode to provide secure and efficient privacy computing services. The mode of consensus on the chain and calculation under the chain ensures security while satisfying the operation of complex programs. -

- -

+ At this stage, the Privacy Computing Node provides a public Privacy Computing Platform, while DAO/Enterprise can quickly build block-chain-based trust through our portal chain, and can book Privacy Computing Resources, run secure and trusted programs, and exchange data on the chain. \ No newline at end of file From 2ae6eaed966dd668e3e606c45fdb67e405d7b24c Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Sat, 21 Jan 2023 04:41:28 -0500 Subject: [PATCH 050/578] Update index.md (#1459) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index d7c5a7ec590..a040c0c9e5f 100644 --- a/applications/index.md +++ b/applications/index.md @@ -545,7 +545,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [walt.id](https://walt.id/) | [NFT infrastructure](walt-id_nft-infra.md) | [GitHub](https://github.com/walt-id) | ☐ | ☐ | ☐ | | [SydTek](https://sydtek.ai/) | [Digital Inheritance in Web3: A Case Study of Soulbound Tokens and Social Recovery Pallets](SydTek.md) | [GitHub](https://github.com/jgophd/Developed-Materials-and-Raw-Data) | ☐ | ☒ | ☐ | | [Anagolay](https://anagolay.network/) | [Multi-token community contributions for verified creators](anagolay-project-idiyanale-multi-token-community-contributions-for-verified-creators.md) | [GitHub](https://github.com/anagolay) | ☐ | ☒ | ☐ | -| [Ink Contracts Wizard Team](https://github.com/amankumar1008/contracts-wizard) | [Ink Smart Contract Wizard](ink-smart-contract-wizard.md) | [GitHub](https://github.com/amankumar1008/contracts-wizard) | ☐ | ☐ | ☐ | +| [Ink Contracts Wizard Team](https://github.com/amankumar1008/contracts-wizard) | [Ink Smart Contract Wizard](ink-smart-contract-wizard.md) | [GitHub](https://github.com/amankumar1008/contracts-wizard) | ☐ | ☒ | ☒ | | [TDSoftware](https://www.tdsoftware.de/) | [Substrate IPFS Utilities](ipfs_utilities.md) | [GitHub](https://github.com/TDSoftware) | ☐ | ☐ | ☐ | | [Ink Boxes Team](https://github.com/nerdsince98) | [Ink Boxes](ink-boxes.md) | [GitHub](https://github.com/avirajkhare00/ink-boxes/) | ☐ | ☒ | ☒ | | [ParaSpell](https://github.com/paraspell) | [ParaSpell Phase 2](ParaSpell_follow-up.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☐ | From 6c7149c0367c4930a8925e750f46dc1ee668cd42 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Mon, 23 Jan 2023 10:55:31 +0100 Subject: [PATCH 051/578] Update rfps.md (#1462) * Update rfps.md Add Decentralized Security Marketplace * Update rfps.md --- docs/rfps.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/rfps.md b/docs/rfps.md index 99067109e40..58b42738c7e 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -33,6 +33,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [appi.md](RFPs/Implemented/appi.md) | 🔴 | 20.07.2021 | | [candle-auction.md](RFPs/Implemented/candle-auction.md) | 🔴 | 02.02.2022 | | [crowdloan_front_end_template.md](RFPs/Under%20Development/crowdloan_front_end_template.md) | 🟡 | 18.11.2022 | +| [decentralized-security-marketplace.md](RFPs/Open/decentralized-security-marketplace.md) | 🟢 | 23.01.2023 | | [epassport-zk-validation.md](RFPs/Open/epassport-zk-validation.md) | 🟢 | 29.11.2021 | | [formal_guarantees_for_grandpa.md](RFPs/Open/formal_guarantees_for_grandpa.md) | 🟢 | 07.10.2022 | | [identity-directory.md](RFPs/Under%20Development/identity-directory.md) | 🟡 | 30.05.2022 | From e4d0b50db478d905daecea617d5f325344e95fa8 Mon Sep 17 00:00:00 2001 From: Nikhil Desai Date: Mon, 23 Jan 2023 17:30:06 +0530 Subject: [PATCH 052/578] ink and pallet benchmarking grant application (#1457) * ink and pallet benchmarking grant application * add default deliverables to milestone 2 --- applications/ink-pallet-benchmarking.md | 110 ++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 applications/ink-pallet-benchmarking.md diff --git a/applications/ink-pallet-benchmarking.md b/applications/ink-pallet-benchmarking.md new file mode 100644 index 00000000000..f7581816f99 --- /dev/null +++ b/applications/ink-pallet-benchmarking.md @@ -0,0 +1,110 @@ +# W3F Grant Proposal +- **Project Name:** ink!/pallet/solidity performance benchmarking +- **Team Name:** Talentica Software +- **Payment Address:** +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + +## Project Overview : +Proposal for the RFP titled [ink!/pallet/solidity performance benchmarking](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/implementation-benchmarking.md). + +### Overview +There are multiple ways to implement the logic in substrate i.e using pallets or ink smart contracts, or even writing solidity code and compiling it to WASM with the help of a solang compiler. We have to benchmark the performance metrics of the logic implemented using each of the above methods. This will help new developers to decide the best tool to implement the logic. + +### Project Details + +We will use following tools to benchmark the ink smart contract/pallet: +- Ink Smart Contract - [Smart Bench](https://github.com/paritytech/smart-bench) +- Pallet - [Substrate Runtime Benchmarking Framework](https://github.com/paritytech/substrate/tree/master/frame/benchmarking) + +### Team Members +- Debasish Ray Chawdhuri - Blockchain and Cryptography Researcher +- Pankaj Mendki -Blockchain expert +- Nikhil Desai - Blockchain Developer https://github.com/Nikhil-Desai-Talentica +- Amit Singh - Blockchain Developer https://github.com/iamit-singh + +### Contact +- **Contact Name:** Nikhil Desai +- **Contact Email:** Nikhil.Desai@talentica.com +- **Website:** https://www.talentica.com/ + +### Legal Structure +- **Registered Address:** B-7/8, Anmol Pride, Baner Road, Baner, Pune, Maharashtra 411045, India +- **Registered Legal Entity:** Talentica Software India Pvt. Ltd. + +### Team Code Repos +- [provenance-usecase](https://github.com/TalenticaSoftware/provenance-usecase) +- [simpleblockchain](https://github.com/Talentica/simpleblockchain) + +### Team LinkedIn Profiles (if available) +- Debasish Ray Chawdhuri - https://www.linkedin.com/in/debasish-ray-chawdhuri-4b444316/ +- Pankaj Mendki - https://www.linkedin.com/in/pankaj-mendki-8576363/ +- Nikhil Desai - https://www.linkedin.com/in/nikhil-desai-1209a38b/ +- Amit Singh - https://www.linkedin.com/in/amit-singh-3637a898/ + +## Development Status : +We have explored the tools specified in the RFP. We have also come up with a high-level implementation plan and will start implementing it soon. + +## Development Roadmap : + +| Number | Objective | Deliverable | Time Estimate | +| -----: | ----------- | ------------- | ----------- | +| 1. | Create a unified framework to work with both, Substrate Runtime Benchmarking Framework and Smart-bench | Milestone 1, Deliverable 4 | 3 days | +| 2. | Test it with existing pallets | Milestone 1, Deliverable 4 | 2 days | +| 3. | Create new pallets for benchmarking | Milestone 1, Deliverable 2 | 3 days | +| 4. | Test it with the new pallets | Milestone 1, Deliverable 2 | 2 days | +| 5. | Create new Ink smart contracts for benchmarking | Milestone 1, Deliverable 3 | 3 days | +| 6. | Test it with the new Ink smart contracts | Milestone 1, Deliverable 3 | 2 days | +| 7. | Adapt Smart Bench to work with arbitrary Solidity smart contracts | Milestone 1, Deliverable 4 | 1 week | +| 8. | Create new Solidity smart contracts for benchmarking | Milestone 2, Deliverable 1 | 3 days | +| 9. | Test it with the new Solidity smart contracts | Milestone 2, Deliverable 1 | 2 days | +| 10. | Adapt the framework to work with the above smart contracts | Milestone 2, Deliverable 2 | 1 Week | + +### Overview +- **Total Estimated Duration:** 6 weeks +- **Full-Time Equivalent (FTE):** 1 +- **Total Costs:** 10,000 DAI + +#### Languages +- Rust +- Solidity + +## Milestones + + +### Milestone 1 — Basic benchmarking +- **Estimated duration:** 3 weeks +- **FTE:** 1 +- **Costs:** 5000 DAI + + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | **License** |Apache 2.0 | +| 0b. | **Documentation** | We will provide both **inline documentation** of the code and a **live demo**. | +| 0c. | **Testing Guide** | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0e. | **Article** | We will publish an **article** that explains how each implementation technique performs, and when to choose which. | +| 1. | **Performance metrics** | After examining the existing benchmarking tools and discussing with their developers, we believe weight alone serves as a good metric to analyse performance.| +| 2. | **Pallet: Basic Read & Write** | We will create some pallets which expose simple methods for writing to storage and reading from on-chain storage.| +| 3. | **Ink Smart Contract: Basic Read & Write** | We will create some ink smart contracts which expose simple methods for writing to storage and reading from on-chain storage.| +| 4. | Library: Benchmarking | We will deliver a Rust library that allows calling both the pallet's extrinsics and contract's public methods multiple times and return the benchmarks.| + + + +### Milestone 2 — Integrate native solidity & solang-compiled solidity +- **Estimated duration:** 3 weeks +- **FTE:** 1 +- **Costs:** 5000 DAI + + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | **License** |Apache 2.0 | +| 0b. | **Documentation** | We will provide both **inline documentation** of the code and a **live demo**. | +| 0c. | **Testing Guide** | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0e. | **Article** | We will publish an **article** that explains how each implementation technique performs, and when to choose which. | +| 1. | **Solidity(native and WASM) Smart Contract: Basic Read & Write** | We will create some solidity smart contracts which expose simple methods for writing to storage and reading from on-chain storage.| +| 2. | **Adapt the benchmarking framework** | We will adapt the benchmarking framework so it can handle WASM and native solidity code benchmarking.| + + +## Additional Information: +Gautam Dhameja told us about the Grants program and encouraged us to apply to the same. From 0f267dfc939ea5c4876791c07d5c47f453d3d33c Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 23 Jan 2023 13:03:06 +0100 Subject: [PATCH 053/578] Update index.md add talentica --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index a040c0c9e5f..b80e7ef211d 100644 --- a/applications/index.md +++ b/applications/index.md @@ -591,4 +591,5 @@ Use this page for an overview of all public grants and their status. Use the sid | [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☐ | ☐ | | [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | | [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☐ | ☐ | ☐ | +| [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | From a56c635563c5122fd741da8aaef7531d19c81dfa Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Mon, 23 Jan 2023 13:05:30 +0100 Subject: [PATCH 054/578] Update dao-entrance-phase-1.md (#1463) table format micro-fix --- applications/dao-entrance-phase-1.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/applications/dao-entrance-phase-1.md b/applications/dao-entrance-phase-1.md index 44e8a571aa8..28689669bfd 100644 --- a/applications/dao-entrance-phase-1.md +++ b/applications/dao-entrance-phase-1.md @@ -140,7 +140,7 @@ Team github accounts - **Costs:** 1500 USD | Number | Deliverable | Specification | -| -----: | ----------- | ------------- | +| ------ | ----------- | ------------- | | **0a.** | License | Apache 2.0 | | **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works. | | **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | @@ -154,7 +154,7 @@ Team github accounts - **Costs:** 1500 USD | Number | Deliverable | Specification | -| -----: | ----------- | ------------- | +| ------ | ----------- | ------------- | | **0a.** | License | Apache 2.0 | | **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works. | | **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | @@ -170,7 +170,7 @@ Team github accounts - **Costs:** 1500 USD | Number | Deliverable | Specification | -| -----: | ----------- | ------------- | +| ------ | ----------- | ------------- | | **0a.** | License | Apache 2.0 | | **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works. | | **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | @@ -185,7 +185,7 @@ Team github accounts - **Costs:** 1500 USD | Number | Deliverable | Specification | -| -----: | ----------- | ------------- | +| ------ | ----------- | ------------- | | **0a.** | License | Apache 2.0 | | **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works. | | **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | @@ -202,4 +202,4 @@ In the second phase, **DAO-entrance** is committed to combining block chains wit -At this stage, the Privacy Computing Node provides a public Privacy Computing Platform, while DAO/Enterprise can quickly build block-chain-based trust through our portal chain, and can book Privacy Computing Resources, run secure and trusted programs, and exchange data on the chain. \ No newline at end of file +At this stage, the Privacy Computing Node provides a public Privacy Computing Platform, while DAO/Enterprise can quickly build block-chain-based trust through our portal chain, and can book Privacy Computing Resources, run secure and trusted programs, and exchange data on the chain. From 36f70959c8188cafa4e72dd3b0994cf83d579c67 Mon Sep 17 00:00:00 2001 From: Bai L <94514135+bai-3@users.noreply.github.com> Date: Mon, 23 Jan 2023 22:01:24 +0800 Subject: [PATCH 055/578] Update dao-entrance-phase-1.md (#1464) --- applications/dao-entrance-phase-1.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/applications/dao-entrance-phase-1.md b/applications/dao-entrance-phase-1.md index 28689669bfd..107c649370a 100644 --- a/applications/dao-entrance-phase-1.md +++ b/applications/dao-entrance-phase-1.md @@ -25,13 +25,13 @@ Currently, we provide not only "ink!"-based DAO smart contract templates, but al At this stage, **DAO-entrance** will provide a slack-like client which is based on the matrix protocol for instant messaging. Users can log in with a blockchain account. This tool is designed for modern devices and is compatible with devices equipped with Windows/mac/Linux/android/iOS, and provides organization members with a concise and convenient collaboration platform. - +![img](https://github.com/dao-entrance/app/raw/main/docs/ui.png) Through DAPP rendering engine which is based on flutter, **DAO-entrance** is compatible with most DAPPs and run at a faster speed. The core business would be materialized by flutter native applications, and DAPPs would be rendered by the dapp engine. - +![img](https://github.com/dao-entrance/app/raw/main/docs/client.png) **DAO-entrance** Client is a non-intrusive client that supports layer1 blockchain and layer2 smart contracts, and it's dedicated to adapting DAO scenarios. As an initial stage, we build the **DAO-entrance** chain based on the substrate, and manage the **DAO-entrance** chain by using DAO. After continuous improvement of the Client, we create **DAO-entrance** DAO, which is a fully autonomous and decentralized organization. Through our own requirements of **DAO-entrance** and continuous introduction of other work modes of DAO, we provide substrate pallet and "ink!" smart contracts with a fast DAO solution Polkadot Ecosystem. @@ -53,7 +53,7 @@ We provide DAO templates the substrate pallet and ink! Smart contracts: According to business needs, DAO organizations will set up skill groups, called "guilds", and each guild will automatically create public chat channels and Kanbans in DAO-entrance. Users can join a guild based on their own strengths or willings. Members can choose whether to participate in projects or events according to their own strengths and willingness. - +![img](https://github.com/dao-entrance/app/raw/main/docs/structure.png) We provide DAO templates the substrate pallet and ink! Smart contracts: 1. RoadMap management. @@ -200,6 +200,6 @@ Team github accounts In the second phase, **DAO-entrance** is committed to combining block chains with privacy computing, providing cloud-like mode to provide secure and efficient privacy computing services. The mode of consensus on the chain and calculation under the chain ensures security while satisfying the operation of complex programs. - +![img](https://github.com/dao-entrance/app/raw/main/docs/tee.png) At this stage, the Privacy Computing Node provides a public Privacy Computing Platform, while DAO/Enterprise can quickly build block-chain-based trust through our portal chain, and can book Privacy Computing Resources, run secure and trusted programs, and exchange data on the chain. From ac68ddb24dee87c3e4a2115d86645916371d56ce Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Tue, 24 Jan 2023 10:55:03 +0100 Subject: [PATCH 056/578] Update index.md (#1466) decentralized_invoice -> completed --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index b80e7ef211d..8812244c990 100644 --- a/applications/index.md +++ b/applications/index.md @@ -558,7 +558,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Mutai Solutions](https://bryanmutai.co/) | [Crowdloans-FET](Crowdloans-FET.md) | [GitHub](https://github.com/brymut) | ☐ | ☐ | ☐ | | [k/factory](https://k-f.co/) | [Centrifuge Go-Substrate-RPC Client V2](centrifuge-gsrpc-v2.md) | [GitHub](https://github.com/centrifuge/go-substrate-rpc-client) | ☐ | ☐ | ☐ | | [Colorful Notion](https://github.com/colorfulnotion) | [Zombienet Explorer: Multi-Chain Substrate Block Explorer](Zombienet-Explorer.md) | [GitHub](https://github.com/colorfulnotion/zombienet-explorer) | ☐ | ☐ | ☐ | -| [TwinP](https://github.com/herou) | [Decentralized Invoice](decentralized_invoice.md) | [GitHub](https://github.com/herou) | ☐ | ☒ | ☐ | +| [TwinP](https://github.com/herou) | [Decentralized Invoice](decentralized_invoice.md) | [GitHub](https://github.com/herou) | ☐ | ☒ | ☒ | | [Zondax](http://zondax.ch/) | [Hybrid node research grant](hybrid_node_research.md) | [GitHub](https://github.com/ZondaX) | ☐ | ☐ | ☐ | | [Bright Inventions](https://brightinventions.pl/) | [ZK-Snarks Tutorial](ZK-Snarks%20tutorial.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☐ | | [Common Orbit LLC](https://brson.github.io) | [wasm-opt-for-rust maintenance](../maintenance/wasm-opt-for-rust.md) | [GitHub](https://github.com/brson/wasm-opt-rs) | ☐ | ☒ | ☐ | From 7a60a7cac923b59d60d82fb1648350fcdc9bca76 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Tue, 24 Jan 2023 16:46:40 +0100 Subject: [PATCH 057/578] Update application_accepted.yml (#1468) remove the field `total_cost_btc`, see this PR: https://github.com/w3f/parse-grant-application-action/pull/2 --- .github/workflows/application_accepted.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/application_accepted.yml b/.github/workflows/application_accepted.yml index 275af1523cd..59d7622ae91 100644 --- a/.github/workflows/application_accepted.yml +++ b/.github/workflows/application_accepted.yml @@ -80,7 +80,7 @@ jobs: "https://github.com/w3f/Grants-Program/pull/${{ github.event.pull_request.number }}", "https://github.com/w3f/Grants-Program/pull/${{ github.event.pull_request.number }}", "USD", "0", "0", "0", - "${{ steps.grant_parser.outputs.total_cost_btc }}", + "", "${{ steps.grant_parser.outputs.total_cost_dai }}", "", "", From 515393da528098e88eb0f5ee6649a2dcbedfe143 Mon Sep 17 00:00:00 2001 From: Graeme Fox <82609877+gfox1@users.noreply.github.com> Date: Tue, 24 Jan 2023 07:47:40 -0800 Subject: [PATCH 058/578] Societal Grant 2 (#1450) * societal grant 2 * update to grant * Update applications/societal_grant2.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> --- applications/societal_grant2.md | 156 ++++++++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 applications/societal_grant2.md diff --git a/applications/societal_grant2.md b/applications/societal_grant2.md new file mode 100644 index 00000000000..49b25a62358 --- /dev/null +++ b/applications/societal_grant2.md @@ -0,0 +1,156 @@ +# Societal + + +- **Team Name:** Societal Labs Ltd. +- **Payment Address:** Ethereum - USDC: 0xcDcCF94f10d8A7165C1A336DD3795430a6CDE530 +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + + +## Project Overview :page_facing_up: +This is the second grant for the Societal Labs team, after the sucessful submission and merge of our first W3F grant. + +- Previous Grant: [Societal.md](https://github.com/w3f/Grants-Program/pull/1249) +- Milestone 1 [Submission](https://github.com/w3f/Grant-Milestone-Delivery/pull/628) +- Milestone 2 [Submission](https://github.com/w3f/Grant-Milestone-Delivery/pull/665) + +### Overview + +Societal is a specialized blockchain for the creation and management of Decentralize Autonomous Organizations (DAOs). Societal allows all types of groups or communities to build their own online, transparent, and decentralized organization. Societal bundles all of the tools required to create and manage a DAO in one place. Creators will be empowered to construct a DAO with fungible, non-fungible, or a combination of governance tokens. Societal also offers DAO management tooling features like treasury management, specialized governance, task boards, legal structuring, and accounting. This removes the need to utilize siloed platforms to manage the operations of a DAO. Whether a creator is looking to build a DAO for their organization, raise and deploy investment capital, or decentralize governance of an NFT project, Societal has the necessary tooling for a seamless end-to-end experience. + +Utilizing Polkdaot’s layer-0 infrastructure and ecosystem, Societal will provide DAOs with both maximum functionality and a cohesive user experience. With features including agnostic token compatibility, zero gas fees, a freemium entry point, and a SaaS-based membership pricing, Societal combines best-in-class features into one vertically integrated product. With integrations into DeFi, privacy, and identity protocols, Societal will enable web3 organizations to seamlessly transition and manage their DAOs into the future. + +The Societal team has been building in the Polkadot ecosystem for the past two years. While at a previous Polkadot project, the Societal team noticed a lack of integrated DAO tooling - not only in the Polkadot ecosystem, but in the broader web3 industry as a whole. After analyzing how we might transition and manage our previous project into a DAO, there was no clear path. This, along with the team being both members and council members of various DAOs and noticing the lack of infrastructure, we decided to build a solution - Societal. + +### Project Details + +Societal Labs has been designing the product vision of the Socital platform for quite some time. We will go over the project details and blockchain architecture in this application and provide references below for more in-depth context. + +In Societal's final state, it will offer four main services; Create, Transition, Transfer and Manage. Create will allow any web3 user to create their own DAO. Transition will allow protocols to progressively move towards community ownership. Transfer will allow DAOs to transfer their DAO from an expensive siloed chain to the Sociteal platform. Manage will provide DAOs all the required product features to manage their organization, whether it is a small investment club or a large community-governed protocol. + +Societal will offer a wide range of features to create and manage a DAO. The features are split into three categories; Operations, Treasury, and Governance. The Operations features are: job & task boards, payroll, customizable feeds, legal tooling, on-chain reputation, and web & mobile application. The Treasury features are as follows: treasury wallets (multi-sig), DeFi integrations, on-chain cap table, accounting and private asset integrations. The governance features are: zero gas fee governance, proposal calendar, built-in governance models, governance treasury execution, and private voting. + +Societal will vertically integrate with projects to advance its tech stack and product offering, something not seen in most web3 projects today. For example, Societal can integrate DeFi services by working with projects like Acala, Parallel, and Composable Finance, which will allow for active treasury management for DAOs managed with Societal. For private assets and voting, projects like Manta and Phala can provide privacy-enabling functions like zero-knowledge proofs and trusted execution environments to make this possible. For on-chain credentials, projects like KILT and Litentry can provide KYC and member credentialing services that can be used by DAOs for governance and recruiting. + +Finally, Societal plans to progressively transition into a DAO itself. Once the token is launched, a community-run treasury will grow over time until the entire network is owned and operated by the community. + +For more information, please refer to the following resources: + +- Societal Whitepaper [here](https://docsend.com/view/2gte2fd8wc4jp4rg) +- Societal Docs [here](https://docs.sctl.xyz/) +- Societal Protoype Demo [here](https://www.loom.com/share/ab646656a62a4776acc1b94ad5059cc4) +- UI Mockups (High Res.) [here](https://photos.app.goo.gl/gE2E13eKggkxK1Uh9) +- Societal MVP [Article](https://medium.com/@societal.xyz/societals-web3-foundation-grant-e74d760c4f27) + + + +### Ecosystem Fit + +As it stands today, the DAO landscape within the Polkadot ecosystem is not as mature as other ecosystems such as Ethereum. This is due to insufficient DAO creation and tooling infrastructure in the ecosystem. Currently, the Polkadot ecosystem does not have the creation, governance, treasury management, and payroll tooling products as other major blockchains. By building these tooling products on Polkadot, both the Polkadot DAO landscape and the broader DAO management tooling space are primed for innovation by utilizing the unique technical abilities that Substrate provides. + +The target audience of the Societal application are web3 users who require a platform to easily create and manage their DAO. Using the technical capabilities that Substrate provides, Societal will design our chain to be token agnostic, allowing current MetaMask users to easily connect to our chain and start using the governance application right away. By doing this, our project will meet the needs of the Polkadot community to create their own DAOs and have the tools to manage them as seen in other ecosystems. + +The projects like Societal in the Polkadot space are Polkassembly, SubDAO, and DoraFactory. Societal differs from these projects in multiple ways. First, Polkassembly is not building their own parachain and is only a governance platform for large Polkadot projects. Societal wants to allow any web3 user to create their own DAO - not just catering to large established protocols. SubDAO has recently been focusing on smart contract deployments on multiple chains and does not appear to be building a parachain. Societal will build its own parachain and use the technical capabilities of Substrate to be truly token agnostic, connecting with widely used wallets such as MetaMask, to avoid doing multiple chain deployments via smart contracts. Dora Factory is similar to Societal in the sense that they are building their own parachian, however we plan to offer zero gas fees and a SaaS based pricing model to enhance our user's experience. Societal will also seek to integrate with other parachains, having cross-chain smart contract execution. + + +## Team :busts_in_silhouette: + +### Team members + +- Graeme Fox +- Tyler Gellatly +- Oleh Kalenyk +- Alibek Sansyzbayev + + +### Contact + +- **Contact Name:** Graeme Fox +- **Contact Email:** graeme@sctl.xyz +- **Website:** https://www.sctl.xyz/ + +### Legal Structure + +- **Registered Address:** Brookfield Place, Suite 2700, 225 6 Ave SW, Calgary, AB T2P 1N2 +- **Registered Legal Entity:** Societal Labs Ltd. + +### Team's experience + +Graeme Fox is the Co-Founder & CEO of Societal, a specialized blockchain designed for the creation and management of DAOs. He was accepted to inaugural the Polkadot Blockchain Academy, held at Cambridge University. Graeme is also a volunteer at the Canadian Blockchain Consortium, where he holds a role on the web3 committee. Prior to this, Graeme has held many roles in and out of web3. In web3, he was previously Head of Product at Ruby Protocol, a privacy project implementing Functional Encryption to combat Trusted Execution Environments (TEEs) and Zero-Knowledge Proofs (ZKPs). Prior to web3 he was the Lead Product Manager at Connectus. During this time, he was in charge of both internal and external development teams that created a web-based application using a MERN stack development, along with a supporting phone application on iOS and Android. It was during this role when Graeme was first introduced to blockchain development, as the main product line integrated with the Corda Blockchain to allow for automatic and secure payments following the completion of specific KPIs. Graeme has held other engineering roles in the past and holds a Bachelor of Engineering from Dalhousie University. He lives and breathes the entrepreneurial mindset, being involved in early-stage startups for the last five years. + +Tyler Gellatly is the Co-Founder & COO of Societal and has been building and scaling early stage start-ups for the last 4+ years. He was employee #1 and Director of Operations & Partnerships at Cuboh (a YC-backed SAAS middleware operating within the ghost kitchen industry) More recently, Tyler helped found Ruby Protocol, a novel privacy protocol building on the Substrate framework, and is still involved in a strategic advisory capacity. Currently, he sits on the DAO council for the Illuminati Collective, which currently has a 1000 ETH treasury under management. Tyler holds a Bachelor of Commerce from the University of Victoria, specializing in corporate strategy and finance. A well-rounded business operations leader with a background in finance, operations, capital fundraising, and strategic partnerships, Tyler is mission driven to bring web3 communities together at scale by utilizing blockchain technology. + + +### Team Code Repos + +Org: + +- https://github.com/sctllabs +- https://github.com/sctllabs/societal-node +- https://github.com/sctllabs/societal-client + +Team: + +- https://github.com/gfox1 +- https://github.com/okalenyk +- https://github.com/asansyzb + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/graemefox/ +- https://www.linkedin.com/in/tngell/ + +## Development Status :open_book: + +Societal has already been working on our project and has completed our MVP. The two main repositories of the Societal project are the [societal-node](https://github.com/sctllabs/societal-node) and the [societal-client](https://github.com/sctllabs/societal-client). These repositories represent the societal blockchain (built with substrate) and the UI. To date or MVP includes the following features: Create a DAO with its own governance token, elect council members, create proposals, and vote on them with your MetaMask wallet. + + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 3 months +- **Full-Time Equivalent (FTE):** 2 FTE +- **Total Costs:** 30,000 USDC + + +### Milestone 1 — Add Reservable & Lockable Traits to Asset Pallet + +- **Estimated Duration:** 1.5 months +- **FTE:** 2 +- **Costs:** 15,000 USDC + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can spin up one of our Societal's nodes and interact with the Reservable & Lockable Asset Pallet.| +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Substrate Module: Reservable & Lockable Asset Pallet | The main delivery of this milestone will be adding the 'ReservableAsset' and 'LockableAsset' Traits to the current Substrate Assets Pallet. By doing this, fungilbe tokens generate from the new Assets Pallet will have the same Reservable and Lockable features as the chain's native token from the balances pallet. These fungible tokens may then be used with the current Substrate Democarcy pallet, allowing DAOs create on Societal's chain to have similar feautres to Polkadot's Governance v1. | +| 2. | Client Modules | A minor UI will be made to allow the user to interact with the new Asset Pallet and show that the functionality works. However, the major UI creation will be completed in milestone 2. | + + +### Milestone 2 — UI To Display Functionality + +- **Estimated duration:** 1.5 months +- **FTE:** 2 +- **Costs:** 15,000 USDC + + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can spin up our Substrate client and test the functionality of the interact with the Reservable & Lockable Asset Pallet via Societal UI. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish a tutorial that explains how to use and interact with the Reservable & Lockable Asset Pallet via Societal UI. | +| 1. | Client Modules | We will create a client facing UI that will interact with the Reservable & Lockable Asset Pallet. The main functionly of the UI will be to show how the fungilbe tokens generated from the new Assets Pallet can be used with the current Substrate Democracy Pallet. This will allow DAOs that have been created on the Societal network to have similar features to Polkdaot Governance v1 system, that only parachains can use right now. | + + +## Future Plans + +Societal plans to secure fundraising and expand the development team. After the completion of the milestones stated above, Societal plans to expand the product offering by implementing a DAO Dapp Market Place and a subscription pricing mechanisim. Societal has also applied to be a part of the Substrate Builders Program. Finally, Societal plans to launch its own parachain and be the go to DAO Creation and Mangament platofrm. + + +## Additional Information :heavy_plus_sign: + +All information already included in above. \ No newline at end of file From 42d2e0b2b3b2faee1450907e4cce4ea1efbcde89 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 24 Jan 2023 16:49:47 +0100 Subject: [PATCH 059/578] Update index.md Societal phase 2 --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 8812244c990..1a3f00400f7 100644 --- a/applications/index.md +++ b/applications/index.md @@ -592,4 +592,4 @@ Use this page for an overview of all public grants and their status. Use the sid | [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | | [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☐ | ☐ | ☐ | | [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | - +| [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☐ | ☐ | From 66e631142b3cbdef8a791f16514765c101913616 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Tue, 24 Jan 2023 17:43:54 +0100 Subject: [PATCH 060/578] RFP: Wallet Aggregator Library (#1465) * RFP: Wallet Aggregator Library * change filename * Add rfp to rfps.md * Update rfps.md fix format * Update docs/RFPs/Open/wallet-aggregator-library.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update docs/RFPs/Open/wallet-aggregator-library.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update docs/RFPs/Open/wallet-aggregator-library.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> --- docs/RFPs/Open/wallet-aggregator-library.md | 23 +++++++++++++++++++++ docs/rfps.md | 1 + 2 files changed, 24 insertions(+) create mode 100644 docs/RFPs/Open/wallet-aggregator-library.md diff --git a/docs/RFPs/Open/wallet-aggregator-library.md b/docs/RFPs/Open/wallet-aggregator-library.md new file mode 100644 index 00000000000..0f3cb2d8c45 --- /dev/null +++ b/docs/RFPs/Open/wallet-aggregator-library.md @@ -0,0 +1,23 @@ +# Wallet Aggregator Library + +* **Status:** Open +* **Proposer:** [Matteo Casonato](https://github.com/0xCaso) + +## Project Description :page_facing_up: + +Users of Polkadot and Substrate-based projects need to connect their wallet to a front-end when using a dApp. At the moment, there are [several wallets and browser extensions](https://wiki.polkadot.network/docs/build-wallets) that can be used (Polkadot-JS, Talisman, Fearless, just to name a few). However, it's common that the frontends don't support all of them, and the users need to install a new wallet or browser extension to connect to the frontend. + +This project aims to create a **React library** that allows users to connect with any wallet or browser extension to the frontends that adopts it. This way, the users can use the wallet they prefer, and the frontends can support all of them without the need to implement the connection logic for each wallet, just integrating one library (making life easier for developers). Though we would prefer a React library, we would also consider implementations for other libraries as well. + +## Deliverables :nut_and_bolt: + +The following items could be the initial deliverables of the project. Of course, improvements and additions are more than welcome. +- Initial **research**: + - study from the [RainbowKit](https://www.rainbowkit.com/docs/introduction) library (which is the same thing, already developed for EVM chains); + - understand which wallets/extensions can be integrated, what is needed to connect to them, etc.; +- Library **development**: + - various connectors for each wallet; + - UI components (connect button, account and chain selector, etc.); +- UI/UX (for both users/devs) **improvement**: + - addition of a tool that scaffolds a new project with the wallet connection library (firable, for example, with `npm init @user/wallet-aggregator@latest`); + - selective account disclosure implementation (view [this](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Under%20Development/privacy-enhancement-polkadot-extension.md) RFP). diff --git a/docs/rfps.md b/docs/rfps.md index 58b42738c7e..2b3e18f5a57 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -57,6 +57,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [uncollateralized-stablecoin-research.md](RFPs/Implemented/uncollateralized-stablecoin-research.md) | 🔴 | 01.01.23 | | [validator-setup-maintenance.md](RFPs/Open/validator-setup-maintenance.md) | 🟢 | 23.11.2021 | | [validator-selection-algorithm.md](RFPs/Under%20Development/validator-selection-algorithm.md) | 🟡 | 07.12.2022 | +| [wallet-aggregator-library.md](RFPs/Open/wallet-aggregator-library.md) | 🟢 | 23.01.2023 | | [xcm-tool.md](RFPs/Open/xcm-tool.md) | 🟢 | 20.07.2021 | ## :mailbox_with_mail: Suggest an RFP From 38d804830bc97e6ad119eb87d3b63036064f2da5 Mon Sep 17 00:00:00 2001 From: Nabil Abdellaoui Date: Wed, 25 Jan 2023 03:38:46 -0500 Subject: [PATCH 061/578] Fix project name in psc application (#1470) --- applications/psc.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/applications/psc.md b/applications/psc.md index 21af32b2048..4d863ab334f 100644 --- a/applications/psc.md +++ b/applications/psc.md @@ -1,4 +1,4 @@ -# Name of your Project +# Polkadot Smart Chain - **Team Name:** OmniBTC - **Payment Address:** 0xBC9C045476F5A85A920EF8F8745631CEC687a4e8 (USDC - Ethereum network) @@ -147,4 +147,4 @@ Web3 Foundation Website. Here you can also add any additional information that you think is relevant to this application but isn't part of it already, such as: -- [DOLA-Protocol](https://github.com/OmniBTC/DOLA-Protocol) \ No newline at end of file +- [DOLA-Protocol](https://github.com/OmniBTC/DOLA-Protocol) From 0dd299c7c2fa02177fa4c8d33f746f9c193c3765 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Wed, 25 Jan 2023 10:42:18 -0300 Subject: [PATCH 062/578] Update index.md (#1471) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 1a3f00400f7..ca52ed95713 100644 --- a/applications/index.md +++ b/applications/index.md @@ -536,7 +536,7 @@ Use this page for an overview of all public grants and their status. Use the sid | Team | Project | Link | Terminated | First Delivery | Completed | | :----------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------- | :--------- | :------------: | :-------: | | [CrossChain Labs](https://github.com/CrossChainLabs) | [DotPulse](DotPulse.md) | [GitHub](https://github.com/CrossChainLabs) | ☐ | ☒ | ☒ | -| [Jett Hays](https://github.com/jettblu) | [Distributed Key Management](DistributedKeyManagement.md) | [GitHub](https://github.com/KryptikApp) | ☐ | ☐ | ☐ | +| [Jett Hays](https://github.com/jettblu) | [Distributed Key Management](DistributedKeyManagement.md) | [GitHub](https://github.com/KryptikApp) | ☐ | ☒ | ☐ | | [NexToken Technology](https://github.com/NexTokenTech) | [TREX - Timed Release Encryption Xing chains](TREX_Network.md) | [GitHub](https://github.com/NexTokenTech/TREX) | ☐ | ☐ | ☐ | | [Blockcoders](http://blockcoders.io/) | [Cross-Consensus Messaging Software Development Kit](xcm-sdk.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☐ | ☐ | | [Keystone Wallet](https://keyst.one/) | [Polkadot Snap](PolkadotSnap.md) | [GitHub](https://github.com/KeystoneHQ) | ☐ | ☐ | ☐ | From 739a51f057bc4b08665c1085327811916caab8af Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Wed, 25 Jan 2023 10:47:11 -0300 Subject: [PATCH 063/578] Data Analysis Tools for Substrate-based Blockchains. (#1467) * Create data_analysis_tools.md * Update docs/RFPs/Open/data_analysis_tools.md grammar suggestions Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update docs/RFPs/Open/data_analysis_tools.md grammar suggestions Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update docs/RFPs/Open/data_analysis_tools.md grammar suggestions Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> --- docs/RFPs/Open/data_analysis_tools.md | 33 +++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 docs/RFPs/Open/data_analysis_tools.md diff --git a/docs/RFPs/Open/data_analysis_tools.md b/docs/RFPs/Open/data_analysis_tools.md new file mode 100644 index 00000000000..ab2211d29a2 --- /dev/null +++ b/docs/RFPs/Open/data_analysis_tools.md @@ -0,0 +1,33 @@ +# Data Analysis Tools for Substrate-based Blockchains + +* **Status:** Open +* **Proposer:** [dsm-w3f](https://github.com/dsm-w3f), [michalisFr](https://github.com/michalisFr) + +## Project Description :page_facing_up: + +Block Explorers are tools that index blockchain data and allow people to easily exhibit it using a web user interface. Examples of Block Explorers in the Polkadot/Kusama ecosystem are (not exhaustive) Subscan, Calamar, and Statescan. For common users, the features commonly found in block explorers are enough. However, for advanced users, the data analysis involves accessing many screens and following long paths through blockchain data. + + +For example, Accounts has some provenance information that is pretty difficult or currently impossible to extract in block explorers. The account reference counter, account balance reserved provenance (see: https://docs.substrate.io/reference/account-data-structures/), and OpenGov delegations are examples of it. Some questions raised that use this data: + + +- Which transactions/accounts were responsible for the reserved balance in an account? +- What modules currently depend on consumers, providers, and sufficients reference counters for a certain account, and which transactions introduced/removed those references? +- Which accounts have delegated OpenGov votes to an account or to which accounts the account in question has delegated their votes to for each track, taking into account indirect delegations too (e.g. Account A delegates to Account B which delegates to Account C)? + +This information is useful and requested for actual heavy users of the Polkadot/Kusama ecosystem. + +This RFP is not limited to the example above and intends to support other analyses. This RFP is also not limited to adding new features to the existent block explorer, as applicants can propose new analysis tools as well. Please notice that the intention here is not to create new block explorers that would have the same information, presented in the same way, as the current ones. + +## Deliverables :nut_and_bolt: + +The expected deliverables are the tool features that provide specific data analysis. The data analysis provided by the tool should be detailed in the deliverables. Each analysis should be dynamic, reflecting the current state of the blockchain, and be presented in a web user interface, in a way that advanced non-technical users can consume, i.e., the user does not need to have programming skills. Please list each data analysis that will be supported by the tool in the deliverables including: + +- The data analysis question. (ex: Which transactions were responsible to reserve the balance amount in an account?) +- The expected input for the data analysis (ex: an account) +- The expected output for the data analysis (ex: a set of transactions that made/removed a balance reserve in the input account) + + +The proposed analysis should not overlap with existing ones if the information is easy to extract in block explorers of the Polkadot/Kusama ecosystem. They can, however, overlap if the information is not simple or can't intuitively be found by non-technical users in the current block explorers (ex. based on multiple steps in the block explorer or based on events data). + +The user interface provided should allow the users to make or find the questions that can be answered by the tool. The tools should NOT demand that users need to know or learn technical query languages such as SQL, GraphQL, or any other. From c032ede0e8a0e0e9ec7115fd33e9aea727e71652 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Thu, 26 Jan 2023 02:59:20 -0500 Subject: [PATCH 064/578] Update index.md (#1472) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index ca52ed95713..db3282536c2 100644 --- a/applications/index.md +++ b/applications/index.md @@ -464,7 +464,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Verida](https://www.verida.io/) | [Single Sign-On for Apps](./verida_network.md) | [GitHub](https://github.com/verida) | ☐ | ☐ | ☐ | | [Kami Ekbatanifard](https://github.com/Nick-1979/) | [Polkadot js plus / Nomination pools](./Plus-follow-up.md) | [GitHub](https://github.com/Nick-1979/polkadot-Js-Plus-extension/wiki) | ☐ | ☒ | ☒ | | [Afloat Inc](https://stayafloat.io/#/) | [Tax Infrastructure Polkadot Integration](./Afloat.md) | [GitHub](https://github.com/hashed-io) | ☐ | ☒ | ☐ | -| [gmajor](https://github.com/gmajor-encrypt) | [SCALE Codec Comparator](./scale-codec-comparator.md) | [GitHub](https://github.com/gmajor-encrypt) | ☐ | ☒ | ☐ | +| [gmajor](https://github.com/gmajor-encrypt) | [SCALE Codec Comparator](./scale-codec-comparator.md) | [GitHub](https://github.com/gmajor-encrypt) | ☐ | ☒ | ☒ | | [Rusty Crewmates](http://rustycrewmates.com/) | [Substrate Tutorials](./substrate-tutorials.md) | [GitHub](https://github.com/rusty-crewmates/substrate-tutorials) | ☐ | ☒ | ☐ | | [Sequester](https://github.com/SequesterChain) | [A Common-Good Carbon Sink on Polkadot](./sequester.md) | [GitHub](https://github.com/SequesterChain/pallets) | ☐ | ☒ | ☒ | | [Keysafe Network](https://github.com/keysafe-protocol) | [A decentralized protocol for private key custody and crypto asset management](./keysafe_network.md) | [GitHub](https://github.com/keysafe-protocol) | ☐ | ☒ | ☐ | From 2326ea4775b674bd26a20218394d61e297bf3d74 Mon Sep 17 00:00:00 2001 From: xiyu <83746881+xiyu1984@users.noreply.github.com> Date: Thu, 26 Jan 2023 16:02:04 +0800 Subject: [PATCH 065/578] Grant Application: Omniverse DLT (#1431) * application for o-dlt * update * update * update * Update Omniverse DLT.md * update application * update application * update application * update application * update application * update application * remove solidity in milestone and fix `user-defined waiting time` * remove solidity in milestone and fix `user-defined waiting time` * Update applications/Omniverse DLT.md * Update applications/Omniverse DLT.md Co-authored-by: S E R A Y A --- applications/Omniverse DLT.md | 263 ++++++++++++++++++++++++++++++++++ 1 file changed, 263 insertions(+) create mode 100644 applications/Omniverse DLT.md diff --git a/applications/Omniverse DLT.md b/applications/Omniverse DLT.md new file mode 100644 index 00000000000..84d975bfd5e --- /dev/null +++ b/applications/Omniverse DLT.md @@ -0,0 +1,263 @@ +# Omniverse DLT + +> This document will be part of the terms and conditions of your agreement and therefore needs to contain all the required information about the project. Don't remove any of the mandatory parts presented in bold letters or as headlines (except for the title)! Lines starting with a `>` (such as this one) should be removed. Please use markdown instead of HTML (e.g. `![](image.png)` instead of ``). +> +> See the [Grants Program Process](https://github.com/w3f/Grants-Program/#pencil-process) on how to submit a proposal. +- **Team Name:** Omniverse Labs (Formerly Dante Team) +- **Payment Address:** 14yr1tovebKbRbxggduV1vbTPtRQtgzTXh9tdZ34w3pGbc4W (Polkadot (Statemint) USDT) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +> :exclamation: *The combination of your GitHub account submitting the application and the payment address above will be your unique identifier during the program. Please keep them safe.* +## Project Overview :page_facing_up: + +- [Previous Proposal: Dante Network](https://github.com/w3f/Grants-Program/blob/master/applications/Dante_Network.md) + - [Milestone 1 Delivery](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/deliveries/Dante_Network_milestone_1.md) + - [Milestone 2 Delivery](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/deliveries/Dante_Network_milestone_2.md) + +As we know, Dante Network is a protocol that serves heterogeneous consensus and can help Polkadot expand the outer edge. In the previous work, Dante has completed its basic technology abilities. Now we come to the **technical form** of the token, and we have mentioned in the [future work](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/deliveries/Dante_Network_milestone_2.md#future-work) of the last delivery that as an infrastructure for multi-chains, the first thing is that the token of Dante would be used on all chains we support. More importantly, we want the token of Dante to be treated as **a whole**, instead of being divided into different parts as current assets bridges did. +So in our research, we innovatively found a more suitable Token model - Omniverse DLT. A more interesting thing is that, Omniverse DLT can be used not only for Dante, but also for all kinds of assets on Polkadot/Kusama. We will present the details in the [Ecosystem Fit](#ecosystem-fit) section. + +### Overview +#### Tag Line +Omniverse DLT, **O-DLT** for short. + +#### Brief description +The Omniverse DLT is a new **application-level** token protocol built **over** multiple existing L1 public chains, enabling asset-related operations such as transfers and receptions running **over** different consensus spaces **synchronously and equivalently**. + +The core meaning of **Omniverse** is that ***The legitimacy of all on-chain states and operations can be equivalently verified and recorded simultaneously over different consensus spaces, regardless of where they were initiated.*** + +O-DLT works at an **application level**, which means everything related is processed in **smart contracts** or **pallets**. **Nothing** relates to the native transactions of a single chain. + +#### Relates to Polkadot +In this application, three forms of implementation of the Omniverse DLT will be provided. +- It will be implemented as a `substrate pallet`, which can be used as a basic component in any `Substrate Parachain` project. The omniverse assets part will derive from `pallet assets`. +- It will be implemented as `ink!` smart contracts, which is an upgrade to the current FT/NFT smart contract for `Substrate Ink!`. +- It will be implemented as `solidity` smart contracts (for Moonbeam), which is an upgrade to the current ERC20/ERC721 smart contract. **This is not part of this grant, but we will still provide it**. + +Besides being used for Dante's token, everyone in Polkadot can use O-DLT as a component to build their own project if they want their tokens to be global. + +- In addition, we will implement a swap platform especially for different Omniverse tokens, which will be implemented as a `substrate pallet`. + +#### Why we are intrested in it +As an infrastructure serving multiple chains, we definitely want Dante's token to be accessed anywhere. However, we do not believe that the asset-bridge paradigm is appropriate. +- We want Dante's token to be treated as a whole instead of being devided into different parts on different public chains. O-DLT can get it. +- When one chain breaks down, we don't want to lose our assets along with it. Assets-bridge paradigm cannot provide a guarantee for this. O-DLT can provide this guarantee even if there's only one chain that works. +- Not just for Dante's token, we are willing to help other projects make their token omniverse if they need it. O-DLT is such a new kind of asset paradigm at the application-level. + +### Project Details +#### Architecture +![image](https://user-images.githubusercontent.com/83746881/211817046-8c42543b-0dcc-49d3-8219-b1d2af06368b.png) +

Figure.1 Architecture

+Generally, this project is composited with the O-DLT components, a swap component for Omniverse tokens, and the off-chain synchronizers. + +#### Components +- O-DLT is implemented as a `substrate pallet` and `ink! smart contract` on Polkadot, and as smart contracts on other chains(EVM chains for instance). A special cryptographic commitment is used to make a verification when a change in ownership of the token occurs, which can be verified in an equivalent approach on different tech stacks of different blockchains. The special commitment is unfakeable and non-deniable. Moreover, the transfer of Omniverse tokens happened on an Omniverse Account Protocol, and be guaranteed by an Omniverse Transaction Protocol. + - The implementation of the Omniverse Account is not very hard, and we temporarily choose a common elliptic curve secp256k1 to make it out, which has been already supported by many blockchains. + - The `Omniverse Transaction` guarantees the ultimate consistency of omniverse transactions(**o-transaction** for short) across all chains. + - We will define an **application-level** data structure to describe omniverse transactions, which can be treated in the same way in different tech stacks. The [example code of the *TransactionData*](https://github.com/Omniverse-Web3-Labs/omniverse-swap/blob/69cebda3e567df1c807a9cb0cda180528f4de091/pallets/omni-protocol/src/types.rs#L60) will be similar to the following: + ```Rust + #[derive(Clone, PartialEq, Eq, Debug, Encode, Decode, TypeInfo)] + pub struct OmniverseTransactionData { + pub nonce: u128, // Global o-transaction identifier + pub chain_id: u32, // The chain where the o-transaction is initiated + pub Initiator_address: Vec, // The identifier of an Omniverse Token. This is globally unique + pub from: [u8; 64], // The Omniverse account transfer from + pub op_type: u8, // The operation type(mint, burn, transfer, ...) + pub op_data: Vec, // The operation data, `to` account for instance + pub amount: u128, // The amount of assets + pub signature: [u8; 65], // The signature of the above informations + } + ``` + - The `nonce` is very important, which is the key point to **synchronize** the states globally, which will be described later. + - The `nonce` appears at two places, one is `nonce in o-transaction` data as above, the other is `account nonce` maintained by on-chain O-DLT pallets/smart-contracts([example codes](https://github.com/Omniverse-Web3-Labs/omniverse-swap/blob/69cebda3e567df1c807a9cb0cda180528f4de091/pallets/omni-protocol/src/lib.rs#L61)). + - The `nonce in o-transaction` data will be verified according to the `account nonce` managed by on-chain `Omniverse DLT` pallets/smart-contracts. Some [example codes](https://github.com/Omniverse-Web3-Labs/omniverse-swap/blob/69cebda3e567df1c807a9cb0cda180528f4de091/pallets/omni-protocol/src/functions.rs#L39) can be found here. + - The core operations of the O-DLT are `omniverse_transfer`, `omniverse_mint`, and `omniverse_burn`, in which the first thing is verifying the signature of the o-transaction data. Then the operation will be added to a pre-execution cache, and **wait for a fixed time** until being executed. The waiting time will be able to be settled by the deployer and this will be determined until fully tested, in addition, we will provide the least recommended time. The off-chain synchronizer will carry the o-transaction data to other chains. If another o-transaction data with the same nonce and the same sender account is received within the waiting time, and if there's any sector different, a malicious thing happens and the related account will be punished. We provide some example codes [here](https://github.com/Omniverse-Web3-Labs/omniverse-swap/blob/69cebda3e567df1c807a9cb0cda180528f4de091/pallets/assets/src/functions.rs#L877) and [here](https://github.com/Omniverse-Web3-Labs/omniverse-swap/blob/69cebda3e567df1c807a9cb0cda180528f4de091/pallets/assets/src/functions.rs#L932) to explain how it works. + - The commitment verification protocol is an underly mechanism, which is a newest research result of Dante. It provides an absolute cryptographic way to make verifications for omniverse operations, in which malicious things could be found out determinedly. + +- The OSC(Omniverse Swap Component) is a direct swap platform for exchanges of Omniverse tokens. The calculation of the o-transaction amount is done by an O-AMM model we create. The details of the underlying mechanisms can be found in the [Principle of Omniverse-AMM](https://github.com/Omniverse-Web3-Labs/Omniverse-DLT-Introduction/blob/main/docs/Principle%20of%20Omniverse%20AMM.md). An omniverse swap operation can be initiated based on the O-DLT. OSC is implemented as a substrate pallet, and a mechanism similar to *abstract account smart contract* will be made out to operate an abstract account for the omniverse swap along with the substrate consensus. + +- The bottom is the off-chain synchronizer layer. The synchronizer is a very light off-chain procedure, and it just listens to the Omniverse events happening on-chain and makes the information synchronization. As everything in Omniverse paradigm is along with a commitment(signature for instance) and is verified by cryptographic algorithms, there's no need to worry about synchronizers doing malicious things. So the off-chain part of O-DLT is indeed trust-free. Everyone can launch a synchronizer to get rewards by helping synchronize information. The detailed steps can be found in the next chapter. + +#### Implementation & Example +- The O-DLT has the following features: + - The omniverse token(o-token for short) based on O-DLT deployed on different chains is not separated but as a whole. If someone has one o-token on Polkadot, he will have an equivalent one on Ethereum and other chains at the same time. + - The state of the tokens based on O-DLT is synchronous on different chains. If someone sends/receives one token on Polkadot, he will send/receive one token on Ethereum and other chains at the same time. + - The workflow of O-DLT is as below. ***Note that in an Omniverse token o-transaction the user only needs to initiate a sending transaction on whatever blockchain he prefers, and the rest things are all processed by the underlying protocols.*** +

Figure.2 An Example

+ + ![image](https://user-images.githubusercontent.com/83746881/211828536-bca481a5-588e-49ec-818b-0b5d6685ffd7.png) + - Suppose a common user `A` and the related operation `account nonce` is $k$. + - `A` initiate an omniverse transfer operation on Near by calling `omniverse_transfer`. The current `account nonce` of `A` in O-DLT deployed on Near is $k$ so the valid value of `nonce in o-transaction` needs to be $k+1$. + - The O-DLT smart contracts on Near verify the signature of the o-transaction data at an **application level**. If the verification for the signature and data succeeds, the o-transaction data will be published. The verification for the data includes: + - whether the amount is valid + - and whether the `nonce in o-transaction` is 1 larger than the `account nonce` maintained by the on-chain O-DLT + - Now, `A`'s newest submitted `nonce in o-transaction` on Near is $k+1$, but still $k$ on Polkadot, Ethereum, and Flow. + - The off-chain synchronizers find the new published o-transaction, and they will find the `nonce in o-transaction` is larger than the related `account nonce` on other chains. + - These synchronizers will rush to carry this message, because whoever submits to the destination chain first will get a reward. There's no will for independent synchronizers to do evil, because they just carry `A`'s o-transaction data. + - Finally, the O-DLT smart contracts/pallets deployed on other chains will all receive the o-transaction data, verify the signature and execute it when the **waiting time is up**. After execution, the underlying `account nonce` will add 1. Now all the `account nonce` of account `A` will be $k+1$. + +We have provide a detailed [proof for the **ultimate consistency**](https://github.com/Omniverse-Web3-Labs/o-amm/blob/main/docs/Proof-of-ultimate-consistency.md) for better understanding of the **synchronization** mechanisms. + +#### Attack Vector Analysis +According to the [above](#implementations), there are two roles: +- **common users** who initiate a o-transaction (at the application level) +- and **synchronizers** who just carry the o-transaction data if they find differences between different chains. + +The two roles might be where the attack happens: +- **Will the *synchronizers* cheat?** + - Simply speaking, it's none of the **synchronizer**'s business as **they cannot create other users' signatures** unless some **common users** tell him, but at this point, we think it's a problem with the role **common user**. + - The **synchronizer** has no will and cannot do evil because the transastion data they carry is verified by the related **signature** of others(a **common user**). + - The **synchronizers** will be rewarded as long as they submit a valid o-transaction data, and *valid* only means that the signature and the amount are both valid even if the `nonce in o-transaction` is **invalid**. This will be detailed explained later when analyzing the role **common user**. + - The **synchronizers** will do the delivery once they find differences between different chains: + - If the current `account nonce` on one chain is smaller than a published `nonce in o-transaction` on another chain + - If the transaction data related to a specific `nonce in o-transaction` on one chain is different from another published o-transaction data with the same `nonce in o-transaction` on another chain + + - **Conclusion: The *synchronizers* won't cheat because there's no benifits and no way for them to do so.** + +- **Will the *common user* cheat?** + - Simply speaking, **yes they will**, but fortunately, **they can't succeed**. + - Suppose current `account nonce` of a **common user** `A` is $k$ on all chains. + - Common user `A` initiates an o-transaction on a Parachain of Polkadot first, in which `A` transfer `10` o-tokens to an o-account of a **common user** `B`. The `nonce in o-transaction` needs to be $k+1$. After signature and data verification, the o-transaction data(`ot-P-ab` for short) will be published on Polkadot. + - At the same time, `A` initiates an o-transaction with the same nonce $k+1$ but different data(transfer `10` o-tokens to another o-account `C`) on Ethereum. This o-transaction(named as `ot-E-ac`) will pass the verification on Ethereum first, and be published. + - At this point, it seems `A` finished a ***double spend attack*** and the O-DLT states on Polkadot and Ethereum are different. + - **Response strategy**: + - As we mentioned above, the synchronizers will deliver `ot-P-ab` to the O-DLT on Ethereum and deliver `ot-E-ac` to the O-DLT on Polkadot because they are different although with the same nonce. The synchronizer who submits the o-transaction first will be rewarded as the signature is valid. + - Both the O-DLTs on Polkadot and Ethereum will find that `A` did cheating after they received `ot-E-ac` and `ot-P-ab` respectively as the signature of `A` is non-deniable. + - We mentioned above that the execution of an o-transaction will not be done immediately and instead there needs to be an fixed waiting time. So the `double spend attack` caused by `A` won't succeed. + - There will be many synchronizers waiting for delivering o-transactions to get rewards. So although it's almost impossible that a **common user** can submit two o-transactions to two chains, none of the synchronizers deliver the o-transactions successfully because of a network problem or something else, we still provide a solution: + - The synchronizers will connect to several native nodes of every public chain to avoid the malicious native nodes. + - If it indeed happened that all synchronizers' network break, the o-transaction will be synchronized when the network recovered. If the waiting time is up and the cheating o-transaction has been executed, we will revert it from where the cheating happens according to the `nonce in o-transaction` and `account nonce`. + - `A` will be punished(lock his account or something else, and this is about the tokenomics, so we won't discuss it according to [application-template.md](./application-template.md#L40)). + - **Conclusion: The *common user* will cheat but won't succeed.** + +#### Demos +- We have provide a [demo video](https://o20k.s3.us-west-2.amazonaws.com/omniverse-swap.mp4) to explain how O-DLT works. +- We also provide a [manually trying tutorial](https://github.com/Omniverse-Web3-Labs/Omniverse-DLT-Introduction/blob/main/docs/README.md) + +### Ecosystem Fit + +Intuitively but non-rigorously, we consider a single public chain as a country, and any country wants their currency to be common in other countries as well. +We are trying to provide an infrastructure to help all assets on Polkadot/kusama be global without being divided into different parts as current assets-bridges did, and the breaking of any other chain will not influence the assets on Polkadot/kusama ecosystem. +We will make the O-DLT an open source-protocol so that everyone in Polkadot/Kusama ecosystem can use it to publish their own omniverse tokens all by themselves. We will provide the following things to Polkadot/Kusama: +- O-DLT `substrate pallets` +- O-DLT `ink! smart contracts` +- O-DLT `solidity smart contracts` for Moonbeam. **This is not part of this grant and we will still provide it**. +- O-Swap `substrate pallets` + +The above components can be uses as single component for all developers of Polkadot/kusama. + +## Team :busts_in_silhouette: + +### Team members + +- Shawn Zheng + - GitHub: https://github.com/xiyu1984 + - Email: xiyuzheng1984@gmail.com +- Members: + - George Huang + - GitHub: https://github.com/virgil2019 + - Email: hht2015ily@gmail.com + - Kay Lin + - GitHub: https://github.com/kay404 + - Email: kay20475@gmail.com + +### Contact + +- **Contact Name:** Shawn Zheng +- **Contact Email:** xiyuzheng1984@gmail.com +- **Website:** https://dantenetwork.notion.site/Dante-Network-37b3fb6b70a845ecb4f6bc9d0f23229b +- **Twitter:** https://twitter.com/DanteNetwork +- **Medium:** https://dante-network.medium.com/ +- **Telegram:** https://t.me/DanteNetworkEN + +### Legal Structure + +- **Registered Address:** 5001 BEACH ROAD #07-37, Golden Mile Complex, Singapore +- **Registered Legal Entity:** Kvanace Technology Foundation Ltd. + +### Team's experience + +We are Dante Network team and our team is composed of several skilled Web3 geeks, and some of us have more than 10 years of technology working experience. +We have got several hackathon rewards, especially the first prize in the Polkadot Asian Hackathon in 2022 summer. +We have finished the first step of Dante Network granted by Web3 Foundation. Details can be found [here](https://github.com/w3f/Grants-Program/blob/master/applications/Dante_Network.md) and [here](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/deliveries/Dante_Network_milestone_2.md). + +### Team Code Repos + +To be more clearly, we have created a new organization to manage the related code: +- https://github.com/Omniverse-Web3-Labs/ + +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. + +- https://github.com/xiyu1984 +- https://github.com/virgil2019 +- https://github.com/kay404 + +## Development Status :open_book: + +Before apply for this grant, we have done some neccessary researches and built some prototypes to verify them. + - [Simulation of Omniverse DLT on Substrate Pallets](https://github.com/Omniverse-Web3-Labs/omniverse-swap) + - [Off-Chain Simulation of O-AMM mathematic model](https://github.com/Omniverse-Web3-Labs/o-amm) + - [On-Chain Simulation of O-AMM mathematic model](https://github.com/Omniverse-Web3-Labs/O-AMM-ParaSim) + +After the simulation, we believe that the Omniverse DLT is achievable on Polkadot and other chains. + +## Development Roadmap :nut_and_bolt: +### Overview + +- **Total Estimated Duration:** 4 months +- **Full-Time Equivalent (FTE):** 3 FTE +- **Total Costs:** 30,000 USD. + +### Milestone 1 — O-DLT: Substrate Pallet + +- **Estimated duration:** 2 month +- **FTE:** 3 +- **Costs:** 15,000 USD + +> :exclamation: **The default deliverables 0a-0d below are mandatory for all milestones**, and deliverable 0e at least for the last one. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | GPLv3 | +| **0b.** | Documentation | - We will provide docs to explain how O-DLT works in a high-level
- We will provide dev docs to explain how to develop an O-DLT component in Substrate Pallet
- We will provide tutorial docs to explain how to use it | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Article | We will publish an **article** that explains what was done/achieved in this milestone as part of the grant. | +| 1. | Substrate module: omniverse assets | We will create a Substrate module that will manage the Omniverse tokens, which will be derived from standard `pallet assets` | +| 2. | Substrate module: omniverse protocol | We will create a Substrate module that will manage the underlying omniverse functions like omniverse account, omniverse signature, omniverse verification, etc. | +| 3. | Substrate chain | Modules omniverse assets, protocol of our custom chain will interact in such a way that can make creation, omniverse mint, burn, and transferring for o-tokens | +| 4. | Off-Chain Tools: Operate the o-tokens | We will provide off-chain tools to operate o-tokens for both `Substrate Pallets` | + +### Milestone 2 — Ink! tech stack and Omniverse Swap + +- **Estimated Duration:** 2 month +- **FTE:** 3 +- **Costs:** 15,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | GPLv3 | +| **0b.** | Documentation | - We will provide docs to explain how the Omniverse Swap based on O-DLT works in a high-level
- We will provide dev docs to explain how to develop an O-DLT component in `Ink!` smart contract
- We will provide tutorial docs to explain how to use the omniverse swap | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) to run Synchronizers along with the documentation of the setup. | +| 0e. | Article | We will publish an **article** that explains what was done/achieved in this milestone as part of the grant. | +| 1. | Substrate module: swap | We will create a Substrate module that will make exchanges for different o-tokens. | +| 2. | Substrate chain | Modules omniverse assets, protocol & swap of our custom chain will interact in such a way that can make swaps between two different kind of o-tokens, user can add liquidity themselves, the O-AMM model can be calculated off-chain and verified on-chain. | +| 3. | Ink! smart contract implementation | We will create the fully O-DLT protocol in `Ink!` tech stack. It will have the same functions as in `Substrate Pallets` | +| 4. | Off-Chain Synchronizer | We will provide the source code and the executable program of the off-chain synchronizer. | + +## Future Plans + +- Firstly, we will make out a mechanism similar to abstract account smart contract to make omniverse tokens absolutely compatible to current native and ERC20/721 like tokens so that o-tokens on Polkadot/kusama can exchange with current tokens. +- Secondly, we will provide a mechanism to make omniverse tokens exchange with current native and ERC20/721 like tokens in other DEX like Uniswap. +- Thirdly, we will make the token of Dante omniverse so that it will be better to integrate with the inter-operability functions of the Dante Network. + +## Additional Information :heavy_plus_sign: + +Firstly, we really appriciate the help and support we have got from Web3 Foundation, with which we have completed the first steps of Dante Network. + +Secondly, we want to report some new progresses and plans of Dante Network. +- On one side, Dante's token will base on O-DLT, and we believe it will be a brand-new asset paradigm. +- On another side, we are trying to make more steps be deterministic when interactions happen between heterogeneous consensus spaces. We have found a multi-layer gaming model that may provide higher security and more efficiency. Maybe we will apply for another grant after we finish the detailed designation. + +Thirdly, as always, we highly endorse the philosophy of the Web3 Foundation. We are continuing to build more and deeper on Polkadot. + \ No newline at end of file From ecd09e6e936b9f4fde718055a7ddbd4bd03164b8 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 26 Jan 2023 09:11:52 +0100 Subject: [PATCH 066/578] Update index.md Add Omniverse --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index db3282536c2..60867a5225c 100644 --- a/applications/index.md +++ b/applications/index.md @@ -593,3 +593,4 @@ Use this page for an overview of all public grants and their status. Use the sid | [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☐ | ☐ | ☐ | | [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | | [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☐ | ☐ | +| [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](Omniverse DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☐ | ☐ | From 24a55aae00fd193a08d6db46552202100a35b45b Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Thu, 26 Jan 2023 10:02:11 +0100 Subject: [PATCH 067/578] Update Omniverse DLT.md (#1475) To fix website --- applications/Omniverse DLT.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/applications/Omniverse DLT.md b/applications/Omniverse DLT.md index 84d975bfd5e..194bca436e8 100644 --- a/applications/Omniverse DLT.md +++ b/applications/Omniverse DLT.md @@ -219,7 +219,7 @@ After the simulation, we believe that the Omniverse DLT is achievable on Polkado | Number | Deliverable | Specification | | -----: | ----------- | ------------- | | **0a.** | License | GPLv3 | -| **0b.** | Documentation | - We will provide docs to explain how O-DLT works in a high-level
- We will provide dev docs to explain how to develop an O-DLT component in Substrate Pallet
- We will provide tutorial docs to explain how to use it | +| **0b.** | Documentation | - We will provide docs to explain how O-DLT works in a high-level
- We will provide dev docs to explain how to develop an O-DLT component in Substrate Pallet
- We will provide tutorial docs to explain how to use it | | **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | | 0d. | Article | We will publish an **article** that explains what was done/achieved in this milestone as part of the grant. | | 1. | Substrate module: omniverse assets | We will create a Substrate module that will manage the Omniverse tokens, which will be derived from standard `pallet assets` | @@ -236,7 +236,7 @@ After the simulation, we believe that the Omniverse DLT is achievable on Polkado | Number | Deliverable | Specification | | -----: | ----------- | ------------- | | **0a.** | License | GPLv3 | -| **0b.** | Documentation | - We will provide docs to explain how the Omniverse Swap based on O-DLT works in a high-level
- We will provide dev docs to explain how to develop an O-DLT component in `Ink!` smart contract
- We will provide tutorial docs to explain how to use the omniverse swap | +| **0b.** | Documentation | - We will provide docs to explain how the Omniverse Swap based on O-DLT works in a high-level
- We will provide dev docs to explain how to develop an O-DLT component in `Ink!` smart contract
- We will provide tutorial docs to explain how to use the omniverse swap | | **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | | **0d.** | Docker | We will provide a Dockerfile(s) to run Synchronizers along with the documentation of the setup. | | 0e. | Article | We will publish an **article** that explains what was done/achieved in this milestone as part of the grant. | @@ -260,4 +260,4 @@ Secondly, we want to report some new progresses and plans of Dante Network. - On another side, we are trying to make more steps be deterministic when interactions happen between heterogeneous consensus spaces. We have found a multi-layer gaming model that may provide higher security and more efficiency. Maybe we will apply for another grant after we finish the detailed designation. Thirdly, as always, we highly endorse the philosophy of the Web3 Foundation. We are continuing to build more and deeper on Polkadot. - \ No newline at end of file + From d518465d7c54c18dae544ddeae7b47e9a3c0c864 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 26 Jan 2023 14:02:38 +0100 Subject: [PATCH 068/578] Update Subsembly-GRANDPA.md (#1476) --- applications/Subsembly-GRANDPA.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/Subsembly-GRANDPA.md b/applications/Subsembly-GRANDPA.md index 458b114f1e4..9321a234dc6 100644 --- a/applications/Subsembly-GRANDPA.md +++ b/applications/Subsembly-GRANDPA.md @@ -2,6 +2,7 @@ * **Team Name:** [LimeChain](https://github.com/LimeChain) * **Payment Address:** `0x6eDf76FD16Bb290A544fDc14fBB4b403D1DEeD9f` (USDT) +* **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/563#issuecomment-1404941967) ## Project Overview :page_facing_up: From feb44dc9909c3d2eea6a54f7555dbe3d0353d565 Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Thu, 26 Jan 2023 20:13:23 +0700 Subject: [PATCH 069/578] Terminate JuniDB (#1474) --- applications/JuniDB.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/JuniDB.md b/applications/JuniDB.md index 15150b0b44b..5321bb76610 100644 --- a/applications/JuniDB.md +++ b/applications/JuniDB.md @@ -2,6 +2,7 @@ * **Team Name:** Uddug * **Payment Address:** 0xc45eAd98E95D1962133d9c15847e2EA4E16dfD0b +* **Status:** [Terminated](https://github.com/w3f/Grant-Milestone-Delivery/pull/254#issuecomment-1404647441) ## Project Overview :page_facing_up: From aeb0223c40143c5f89c23db516089bc24afde44e Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Thu, 26 Jan 2023 16:42:13 +0100 Subject: [PATCH 070/578] Add application parser action (#1477) --- .../workflows/check_application_document.yml | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 .github/workflows/check_application_document.yml diff --git a/.github/workflows/check_application_document.yml b/.github/workflows/check_application_document.yml new file mode 100644 index 00000000000..e24db790cce --- /dev/null +++ b/.github/workflows/check_application_document.yml @@ -0,0 +1,35 @@ +name: Check application document + +on: + pull_request: + types: [opened] + +jobs: + get_filename: + if: contains(github.event.pull_request.body, 'Project Abstract') + runs-on: ubuntu-latest + outputs: + filename: ${{ steps.files.outputs.added }} + steps: + + - name: Get application filename # We assume there's only one + id: 'files' + uses: Ana06/get-changed-files@v2.0.0 + with: + filter: 'applications/*.md' + format: 'csv' + + parse_document: + needs: get_filename + if: needs.get_filename.outputs.filename + runs-on: ubuntu-latest + steps: + + - name: Checkout + uses: actions/checkout@v2 + + - name: Parse application file + id: grant_parser + uses: w3f/parse-grant-application-action@master + with: + path: "${{ github.workspace }}/${{ needs.get_filename.outputs.filename }}" From 9c1f249cf88992abaa0d7260ebe3c70132eacc99 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Thu, 26 Jan 2023 17:06:16 -0300 Subject: [PATCH 071/578] Update index.md (#1478) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 60867a5225c..d47e8235b34 100644 --- a/applications/index.md +++ b/applications/index.md @@ -513,7 +513,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [ParaSpell](https://github.com/paraspell) | [ParaSpell](./ParaSpell.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | | [Primis Labs](https://github.com/Primis-Labs) | [Primis](./Primis.md) | [GitHub](https://github.com/Primis-Labs/client) | ☐ | ☒ | ☒ | | [Uke](https://github.com/Uke-Messaging) | [Uke Messaging - PoC - Phase 1](./uke.md) | [GitHub](https://github.com/Uke-Messaging) | ☒ | ☐ | ☐ | -| [Redstone Network](https://github.com/difttt) | [Redstone Network](./RedStone%20Network.md) | [GitHub](https://github.com/difttt) | ☐ | ☐ | ☐ | +| [Redstone Network](https://github.com/difttt) | [Redstone Network](./RedStone%20Network.md) | [GitHub](https://github.com/difttt) | ☐ | ☒ | ☐ | | [JURIMETRIC TECNOLOGIA LTDA](https://www.jurimetric.com.br/) | [Polkadart](./Polkadart.md) | [GitHub](https://github.com/rankanizer/polkadart) | ☐ | ☒ | ☐ | | [Skye Kiwi](https://skye.kiwi/) | [Choko Wallet](./choko_wallet.md) | [GitHub](https://github.com/skyekiwi) | ☐ | ☒ | ☐ | | [Popular Coding](https://www.popularcoding.com/) | [Ventur](./ventur.md) | [GitHub](https://github.com/popular_coding) | ☐ | ☒ | ☒ | From 390db1cfe77f04f617b1f8d8e6686cf313854976 Mon Sep 17 00:00:00 2001 From: 327istesting <86153748+327istesting@users.noreply.github.com> Date: Fri, 27 Jan 2023 18:24:33 +1100 Subject: [PATCH 072/578] Revised milestone and timeline (#1473) * Timeline changed * Revised milestone and deadline --- applications/Meta_Defender.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/applications/Meta_Defender.md b/applications/Meta_Defender.md index d1eade6d964..ff1cc032d33 100644 --- a/applications/Meta_Defender.md +++ b/applications/Meta_Defender.md @@ -320,7 +320,7 @@ Angie: Angie is a Data Scientist in a ASX-listed Fintech in Australia. She has e ### Milestone 1 — Basic Functionalities -- **Estimated Duration:** 5.5 months +- **Estimated Duration:** 7.5 months - **FTE:** 2 - **Costs:** 4,000 USD @@ -331,11 +331,11 @@ Angie: Angie is a Data Scientist in a ASX-listed Fintech in Australia. She has e | 0c. | Testing Guide | Core functions will be covered by unit tests, along with detailed explanation step by step. | | 0d. | Docker | We will provide a Dockerfile that can be used to test all the functionality delivered with this milestone. | | 1. | ink! smart contract | An ink! smart contract that will enable the digital assets holders to buy cover and the capital holder to become an underwriter. | -| 2. | Manual of interaction between ink! and front-end | We will provide a manual regarding constructing an interface for the interaction between front-end and ink! smart contract & Polkadot.js wallet, just like what web3.js and ethers.js have done in the EVM ecosystem. | +| 2. | Front-end e2e test | We will use Cypress.io as an e2e testing framework for the Front-end automated test. | ### Milestone 2 Substrate + XCM -- **Estimated Duration:** 5 months +- **Estimated Duration:** 6 months - **FTE:** 2 - **Costs:** 4,000 USD @@ -347,6 +347,7 @@ Angie: Angie is a Data Scientist in a ASX-listed Fintech in Australia. She has e | 0d. | Docker | We will provide a Dockerfile that can be used to test all the functionality delivered with this milestone. | | 0e. | Article | We will publish an **article** that explains the functionalities Meta Defender provides, which will cover: 1. auto-pricing model; 2. economic model of insuring and underwriting; 3. how we achieve cross-chain insurance through substrate and XCM and open source this part of code. | | 1. | Cross-chain support | Establish a local parachain testnet and two local parachains A and B with sovereign account in each other. With smart contract deployed on A parachain, allow the user to buy cover and receive his claim from addresses on the B parachain through XCM. | +| 2. | Manual of interaction between ink! and front-end | We will provide a manual regarding constructing an interface for the interaction between front-end and ink! smart contract & Polkadot.js wallet, just like what web3.js and ethers.js have done in the EVM ecosystem. | ## Future Plans From e00778871bfb55231a18cbde28bd9551c49f6154 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Fri, 27 Jan 2023 02:26:04 -0500 Subject: [PATCH 073/578] Update README.md (#1483) --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3bbcb7c4418..b72665bee8a 100644 --- a/README.md +++ b/README.md @@ -157,7 +157,7 @@ The W3F Grants Program offers different grant levels to help you best depending 2. In the newly created fork, create a copy of the application template ([`applications/application-template.md`](applications/application-template.md)). If you're using the GitHub web interface, you will need to create a new file and copy the [contents](https://raw.githubusercontent.com/w3f/Grants-Program/master/applications/application-template.md) of the template inside the new one. Make sure you **do not modify the template file directly**. In the case of a maintenance application, use the maintenance template ([`maintenance template`](maintenance/maintenance-template.md)) instead. In the case of a research application, use the research template ([`research template`](applications/application-template-research.md)) instead. 3. Name the new file after your project: `project_name.md`. 4. Fill out the template with the details of your project. The more information you provide, the faster the review. Please refer to our [Grant guidelines for most popular grant categories](https://github.com/w3f/Grants-Program/blob/master/docs/Support%20Docs/grant_guidelines_per_category.md) and make sure your deliverables present a similar same level of detail. To get an idea of what a strong application looks like, you can have a look at the following examples: [1](https://github.com/w3f/Grants-Program/blob/master/applications/project_aurras_mvp_phase_1.md), [2](https://github.com/w3f/Grants-Program/blob/master/applications/project_bodhi.md), [3](https://github.com/w3f/Grants-Program/blob/master/applications/pontem.md), [4](https://github.com/w3f/Grants-Program/blob/master/applications/spartan_poc_consensus_module.md). Naturally, if you're only applying for a smaller grant that only consists of, say, UI work, you don't need to provide as much detail. - 5. Once you're done, create a pull request. The pull request should only contain _one new file_—the Markdown file you created from the template. + 5. Once you're done, create a pull request in our main [Grants-Program repository](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/README.md). The pull request should only contain _one new file_—the Markdown file you created from the template. 6. You will see a comment template that contains a checklist. You can leave it as is and tick the checkboxes once the pull request has been created. Please read through these items and check all of them. 7. Sign off on the [terms and conditions](https://github.com/w3f/Grants-Program/blob/master/docs/Support%20Docs/T%26Cs.md) presented by the [CLA assistant](https://github.com/claassistantio) bot as a Contributor License Agreement. You might need to reload the pull request to see its comment. @@ -194,7 +194,7 @@ Ideas generally have better chances of being implemented if they're presented in 2. In the newly created fork, create a copy of the suggestion template ([`rfps/suggestion-template.md`](https://github.com/w3f/Grants-Program/blob/master/docs/rfps/suggestion-template.md)) inside the [`rfps`](https://github.com/w3f/Grants-Program/tree/master/docs/rfps) folder. Make sure you create a new file and copy the [contents](https://raw.githubusercontent.com/w3f/Grants-Program/master/docs/rfps/suggestion-template.md) of the template into the new one, and _do not modify the template file directly._ 3. Name the file after your idea: `project_name.md`. 4. Fill out the template with the project details. Please include as many details as possible. -5. Once you're done, create a pull request. The pull request should only contain _one new file_—the Markdown file you created from the template. +5. Once you're done, create a pull request in our main [Grants-Program repository](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/README.md). The pull request should only contain _one new file_—the Markdown file you created from the template. 6. You will see the same template as for creating an application. Please replace it with [this one](.github/PULL_REQUEST_TEMPLATE/rfp_pr_template.md). 7. The RFP will be accepted and merged as soon as it receives three approvals from [W3F Grants Committee](https://github.com/w3f/Grants-Program#w3f-grants-committee) members. From 26729038f356956c736a3fdcbce9f77eea75114f Mon Sep 17 00:00:00 2001 From: Noc2 Date: Fri, 27 Jan 2023 09:12:36 +0100 Subject: [PATCH 074/578] specify that a PR needs to be opened in our main grants program repo --- README.md | 4 ++-- docs/Process/how-to-apply.md | 2 +- docs/suggesting.md | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index b72665bee8a..d96228080be 100644 --- a/README.md +++ b/README.md @@ -157,7 +157,7 @@ The W3F Grants Program offers different grant levels to help you best depending 2. In the newly created fork, create a copy of the application template ([`applications/application-template.md`](applications/application-template.md)). If you're using the GitHub web interface, you will need to create a new file and copy the [contents](https://raw.githubusercontent.com/w3f/Grants-Program/master/applications/application-template.md) of the template inside the new one. Make sure you **do not modify the template file directly**. In the case of a maintenance application, use the maintenance template ([`maintenance template`](maintenance/maintenance-template.md)) instead. In the case of a research application, use the research template ([`research template`](applications/application-template-research.md)) instead. 3. Name the new file after your project: `project_name.md`. 4. Fill out the template with the details of your project. The more information you provide, the faster the review. Please refer to our [Grant guidelines for most popular grant categories](https://github.com/w3f/Grants-Program/blob/master/docs/Support%20Docs/grant_guidelines_per_category.md) and make sure your deliverables present a similar same level of detail. To get an idea of what a strong application looks like, you can have a look at the following examples: [1](https://github.com/w3f/Grants-Program/blob/master/applications/project_aurras_mvp_phase_1.md), [2](https://github.com/w3f/Grants-Program/blob/master/applications/project_bodhi.md), [3](https://github.com/w3f/Grants-Program/blob/master/applications/pontem.md), [4](https://github.com/w3f/Grants-Program/blob/master/applications/spartan_poc_consensus_module.md). Naturally, if you're only applying for a smaller grant that only consists of, say, UI work, you don't need to provide as much detail. - 5. Once you're done, create a pull request in our main [Grants-Program repository](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/README.md). The pull request should only contain _one new file_—the Markdown file you created from the template. + 5. Once you're done, create a pull request in **our** main [Grants-Program repository](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/README.md). The pull request should only contain _one new file_—the Markdown file you created from the template. 6. You will see a comment template that contains a checklist. You can leave it as is and tick the checkboxes once the pull request has been created. Please read through these items and check all of them. 7. Sign off on the [terms and conditions](https://github.com/w3f/Grants-Program/blob/master/docs/Support%20Docs/T%26Cs.md) presented by the [CLA assistant](https://github.com/claassistantio) bot as a Contributor License Agreement. You might need to reload the pull request to see its comment. @@ -194,7 +194,7 @@ Ideas generally have better chances of being implemented if they're presented in 2. In the newly created fork, create a copy of the suggestion template ([`rfps/suggestion-template.md`](https://github.com/w3f/Grants-Program/blob/master/docs/rfps/suggestion-template.md)) inside the [`rfps`](https://github.com/w3f/Grants-Program/tree/master/docs/rfps) folder. Make sure you create a new file and copy the [contents](https://raw.githubusercontent.com/w3f/Grants-Program/master/docs/rfps/suggestion-template.md) of the template into the new one, and _do not modify the template file directly._ 3. Name the file after your idea: `project_name.md`. 4. Fill out the template with the project details. Please include as many details as possible. -5. Once you're done, create a pull request in our main [Grants-Program repository](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/README.md). The pull request should only contain _one new file_—the Markdown file you created from the template. +5. Once you're done, create a pull request in **our** main [Grants-Program repository](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/README.md). The pull request should only contain _one new file_—the Markdown file you created from the template. 6. You will see the same template as for creating an application. Please replace it with [this one](.github/PULL_REQUEST_TEMPLATE/rfp_pr_template.md). 7. The RFP will be accepted and merged as soon as it receives three approvals from [W3F Grants Committee](https://github.com/w3f/Grants-Program#w3f-grants-committee) members. diff --git a/docs/Process/how-to-apply.md b/docs/Process/how-to-apply.md index 4e055053e88..892fbcb0703 100644 --- a/docs/Process/how-to-apply.md +++ b/docs/Process/how-to-apply.md @@ -18,6 +18,6 @@ The process below is independent of the [level](../Introduction/levels.md). Paym 3. In the newly created fork, create a copy of the [application template](https://github.com/w3f/Grants-Program/blob/master/applications/application-template.md). If you're using the GitHub web interface, you will need to create a new file and copy the [contents](https://raw.githubusercontent.com/w3f/Grants-Program/master/applications/application-template.md) of the template inside the new one. Make sure you **do not modify the template file directly**. In the case of a maintenance application, use the [maintenance template](https://github.com/w3f/Grants-Program/blob/master/maintenance/maintenance-template.md) instead. 4. Name the new file after your project: `project_name.md`. 5. Fill out the template with the details of your project. The more information you provide, the faster the review. Please refer to our [Grant guidelines for most popular grant categories](../Support%20Docs/grant_guidelines_per_category.md) and make sure your deliverables present a similar same level of detail. To get an idea of what a strong application looks like, you can have a look at the following examples: [1](https://github.com/w3f/Grants-Program/blob/master/applications/project_aurras_mvp_phase_1.md), [2](https://github.com/w3f/Grants-Program/blob/master/applications/project_bodhi.md), [3](https://github.com/w3f/Grants-Program/blob/master/applications/pontem.md), [4](https://github.com/w3f/Grants-Program/blob/master/applications/spartan_poc_consensus_module.md). Naturally, if you're only applying for a smaller grant that only consists of, say, UI work, you don't need to provide as much detail. - 6. Once you're done, create a pull request. The pull request should only contain _one new file_—the Markdown file you created from the template. + 6. Once you're done, create a pull request in **our** main [Grants-Program repository](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/README.md). The pull request should only contain _one new file_—the Markdown file you created from the template. 7. You will see a comment template that contains a checklist. You can leave it as is and tick the checkboxes once the pull request has been created. Please read through these items and check all of them. 8. Sign off on the [terms and conditions](../Support%20Docs/T&Cs.md) presented by the [CLA assistant](https://github.com/claassistantio) bot as a Contributor License Agreement. You might need to reload the pull request to see its comment. diff --git a/docs/suggesting.md b/docs/suggesting.md index 888c3ee7771..27c6606e585 100644 --- a/docs/suggesting.md +++ b/docs/suggesting.md @@ -19,6 +19,6 @@ Ideas generally have better chances of being implemented if they're presented in 2. In the newly created fork, create a copy of the suggestion template ([`rfps/suggestion-template.md`](https://github.com/w3f/Grants-Program/blob/web-test-branch/docs/rfps/suggestion-template.md)) inside the [`rfps`](https://github.com/w3f/Grants-Program/blob/web-test-branch/docs/rfps/) folder. Make sure you create a new file and copy the [contents](https://raw.githubusercontent.com/w3f/Grants-Program/web-test-branch/docs/rfps/suggestion-template.md) of the template into the new one, and _do not modify the template file directly._ 3. Name the file after your idea: `project_name.md`. 4. Fill out the template with the project details. Please include as many details as possible. -5. Once you're done, create a pull request. The pull request should only contain _one new file_—the Markdown file you created from the template. +5. Once you're done, create a pull request in **our** main [Grants-Program repository](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/README.md). The pull request should only contain _one new file_—the Markdown file you created from the template. 6. You will see the same template as for creating an application. Please replace it with [the RFP PR template](https://github.com/w3f/Grants-Program/blob/web-test-branch/.github/PULL_REQUEST_TEMPLATE/rfp_pr_template.md). 7. The RFP will be accepted and merged as soon as it receives three approvals from [W3F Grants Committee](./Introduction/team.md#w3f-grants-committee) members. From bc7fce642c7b9ff32fb5915726d2837ba953ac19 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Fri, 27 Jan 2023 11:48:54 +0100 Subject: [PATCH 075/578] Update pallet-drand-client.md (#1484) fix typo --- applications/pallet-drand-client.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/pallet-drand-client.md b/applications/pallet-drand-client.md index fd200afe450..25df3df9a03 100644 --- a/applications/pallet-drand-client.md +++ b/applications/pallet-drand-client.md @@ -118,7 +118,7 @@ We will create a new Rust library that | 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. We will use standardized testing methods so tests can be pragmatically executed and updated by anyone. | | 1. | Drand client library | We will build out a drand client library with the requirements mentioned in the Milestoke 1 overview. -### Milestoke 2: Build a Substrate pallet with a fully-featured/configured example chain +### Milestone 2: Build a Substrate pallet with a fully-featured/configured example chain We will write a Substrate pallet that: - implements the drand client library from Milestone 1 From 2f1ce8b2a73abfe13552eb7ee5e2b2d68d94275e Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Fri, 27 Jan 2023 09:50:04 -0300 Subject: [PATCH 076/578] Terminate Zero Network (#1480) * Update zero-network.md * Update index.md * Update index.md --- applications/zero-network.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/zero-network.md b/applications/zero-network.md index d0cc95847ea..a42191016af 100644 --- a/applications/zero-network.md +++ b/applications/zero-network.md @@ -5,6 +5,7 @@ - **Team Name:** Zero Network - **Payment Address:** 0x9061b0787D28d0fDaD845d670F7505EAE5F3B01B (DAI) - **Level:** 2 +- **Status:** Terminated ## Project Overview :page_facing_up: From ce184304f186afc7929540badb91e9291ebf0c21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafael=20Brand=C3=A3o?= Date: Fri, 27 Jan 2023 09:50:30 -0300 Subject: [PATCH 077/578] A Knowledge-Oriented Approach to Enhance Integration and Communicability in the Polkadot Ecosystem (#1420) * Creating research grant proposal A Knowledge-Oriented Approach to Enhance Integration and Communicability in the Polkadot Ecosystem * Adding template for mandatory deliverables Adding placeholders, we need to specify each of the mandatory deliverables for the respective milestone. * Update Knowledge-Oriented-Framework.md Adding mandatory deliverables for each milestone * Update Knowledge-Oriented-Framework.md Adding required info about article deliverable in last milestone. * Update Knowledge-Oriented-Framework.md Adjusting last milestone, merging deliverables 0e and 1 (article and scientific paper). --- applications/Knowledge-Oriented-Framework.md | 265 +++++++++++++++++++ 1 file changed, 265 insertions(+) create mode 100644 applications/Knowledge-Oriented-Framework.md diff --git a/applications/Knowledge-Oriented-Framework.md b/applications/Knowledge-Oriented-Framework.md new file mode 100644 index 00000000000..cc8338074ae --- /dev/null +++ b/applications/Knowledge-Oriented-Framework.md @@ -0,0 +1,265 @@ +# A Knowledge-Oriented Approach to Enhance Integration and Communicability in the Polkadot Ecosystem + +- **Team Name:** MOBR Systems + +- **Payment Address:** 0x504779E1d616Ff75aFA0D4417bc2A5cCB678c671 (USDC) + +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +### Overview + +This project is an R&D initiative towards enhancing integration and communicability in the Polkadot ecosystem. The first step encompasses a theoretical contribution to map, structure and formalize Polkadot's multi-chain environment concepts and relationships, by adopting an ontological approach. Afterwards, we expect this ontological framework to be applied on the building of a controlled natural language (CNL) and a querying engine for the Polkadot ecosystem. + +Ontologies represent concepts and relationships in a manner that approximate the way humans perceive interconnected abstractions, while promoting machine reasoning on top of that representation to offer insights to users, developers and intelligent applications. In addition to supporting reasoning capability, ontologies provide a coherent and easy interpretation, enhancing communication in the ecosystem. They allow users to navigate from one concept to another, supporting the current understanding about the fundamentals of the modeled domain, and also its natural expansion. The R&D process and contributions will be documented in a scientific paper and an ontology representation. Both will be publicly available on github. + + +Initially, the proposed ontology will focus on the Polkadot multi-chain environment to identify, describe and relate core concepts of the technology. That is, we will create a conceptual framework that represents the ecosystem behind Polkadot, including parachains, nodes, transaction settlement, cross-chain communication, assets, primitives, etc. With the fundamental aspects defined, it would be possible to expand the ontology to model the concepts and relationships between the Substrate blockchain framework and Polkadot’s canary network, Kusama. + + +Moving forward with the state-of-the-art and innovation that tackles real issues is what inspires the MOBR team. As an R&D-oriented startup, we target research opportunities where we can apply AI in a user-centric approach. As Web3 developers and enthusiasts, we are always looking for potential improvements for the technology and its community. The lack of a formal definition and terminology for blockchain environments is an open issue, since it remains open to interpretation and does not offer a consistent representation for its developers, users, and applications. + +### Project Details + +- The problem + +There is no doubt that the Polkadot's multi-chain environment is a highly disruptive platform. However, the lack of a formal definition of its terminology is an issue since it remains open to interpretation and does not offer a structured representation for its applications. Currently, Polkadot literature is predominantly written either from a purely technical or from an economical perspective. Aiming at supporting the growth of the Polkadot community in both formal knowledge and applications, it is critical that users, developers, and stakeholders have a formal and fundamental understanding on how the platform is built and how it works. Without such formal representation, application developers may struggle to integrate software components and data, as well as to build querying and reasoning features in a standardized manner. Unstructured development combined with lack of expressiveness about the ecosystem may jeopardize interoperation and wide adoption of Polkadot, especially in heterogeneous socio-technical environments. + +- Research questions/hypothesis + +The general research question we want to answer is: how a knowledge-oriented approach may benefit the communicability, integration, usage and development of blockchains? + +And more specifically, how an ontology-supported development impacts design and building of Polkadot’s parachains and cross-chain communication? + +- The methodology + +Our approach will begin by conducting a comprehensive literature review to identify key concepts and principles in ontologies for blockchains. This includes studying the existing applications and ontological frameworks that have been developed for blockchains, as well as other relevant research in the fields of symbolic representation. Once the key concepts and principles have been identified, the next step is to create a conceptual framework that incorporates and relates these concepts and principles. This framework will be designed to express the fundamental entities and relationships that govern the Polkadot ecosystem, and will be flexible enough to accommodate the ongoing evolution of the technology. With the conceptual framework specified, the next step will be applying it to a specific Polkadot-related use case scenario. This includes conducting case studies to explore the future application of the ontological framework to support the building of a controlled natural language (CNL) and a querying engine in Polkadot's multi-chain environment. Another important aspect of creating an ontology is to engage with experts from application domains to gain their insights and perspectives. This engagement helps to ensure that the ontological framework is grounded in real-world experience and reflects the current understanding of representative personas in the applied fields. In this sense, the final step of the proposed approach is to present and discuss the ontology with members of the Polkadot team. + +- Data collection and analysis procedures + +An ontology is a representation of a set of concepts within a domain and the relationships between those concepts. The data collection consists in the search for relevant concepts and their relationships. The initial data for defining the basics of the ontology will be collected through analysis of the available literature, including technical reports from Polkadot documentation. The engagement with the Polkadot team will also produce valuable data to be collected and analyzed. During the consolidation of the basic ontology, analysis will be carried out qualitatively. In the future, after having a consolidated ontology, dynamic tests can be developed to assess more quantitative aspects regarding the coverage of the formal definition. + +- Expected results + +The main expected result is an ontology representing the fundamental entities and relationships that govern the Polkadot ecosystem. We will work with the grants team to conduct a qualitative analysis to assess the correctness of the model. + +- Relevant related work + +Researchers have been exploring the potential applications and support of ontology to the field of blockchain and DApps in general. For example, ontology has been used to study the concept of trust in blockchain systems, to develop more robust and secure smart contract systems, and to address potential ethical and philosophical issues in the use of blockchain technology [1, 2, 3]. + +Currently, blockchain literature is predominantly written either from a purely technical or from an economic perspective. The use of ontologies in blockchain is an emerging field with significant potential for bridging both technical and economic perspectives, advancing the understanding of this technology while improving its design and use. Research is needed to better explore the potential use cases and applications on top of formal ontologies and to develop a comprehensive ontological framework for this type of technology. + +[1] Besançon, L., Da Silva, C. F., Ghodous, P., & Gelas, J. P. (2022). A Blockchain Ontology for DApps Development. IEEE Access, 10, 49905-49933. + +[2] Hang, L., Chen, C., Zhang, L., & Yang, J. (2022). Blockchain for applications of clinical trials: Taxonomy, challenges, and future directions. IET Communications. + +[3] Baqa, Hamza & Truong, Nguyen & Crespi, Noel & Lee, Gyu Myoung & Le Gall, Franck. (2019). Semantic Smart Contracts for Blockchain-based Services in the Internet of Things. 1-5. 10.1109/NCA.2019.8935016. + + +- Intended venue for results publication and the timeline for publication + +We deem the proposed work would be a good fit for venues such as the following: + +International Congress on Blockchain and Applications (ICBA) + +IEEE International Conference on Blockchain and Cryptocurrency (ICBC) + +International Semantic Web Conference (ISWC) + +In terms of timeline, and considering 4 months of project, it will depend on the dates for these venues. + +For the ISWC 2023, the dates are still TBD. But considering the 2022 calendar, it would be possible to submit by Q2-Q3 and publish by Q3-Q4 in 2023. + +For the ICBA 2024, the submission would be at Mar/2024 and the publication would be around July 2025. + +For the ICBC 2024, the submission would be at Dec/2023 and the publication would be around May/2024 + + +- What the project is _not_ or will _not_ provide or implement + +Our research proposal is a first-step towards creating a rich and convenient asset for performing query searching and data analytics on the Polkadot's multi-chain environment. For now, we are proposing a conceptual model that will be capable of formalizing the key Polkadot concepts and their relationships. In this proposal we are not considering the development and deployment of any functional asset or prototype, but specifically the ontology representation and a case study to explore the future application of the ontological framework to support building a controlled natural language (CNL) and a query engine in Polkadot’s multi-chain ecosystem. + +### Ecosystem Fit + +As mentioned, the proposed ontology will focus on the Polkadot multi-chain environment to identify, describe and relate core concepts of the technology. That is, we will create a conceptual framework that represents the ecosystem behind Polkadot, including parachains, nodes, transaction settlement, cross-chain communication, assets, primitives, etc. With the fundamental aspects defined, it would be possible to expand the ontology to model the concepts and relationships between the Substrate blockchain framework and Polkadot’s canary network, Kusama. + +- Target audience (parachain/dapp/wallet/UI developers, designers, your own user base, some dapp's userbase, yourself)? + +The target audience is the Web3 community in general, and those specifically interested in the Polkadot multi-chain ecosystem, since we will provide a formal definition of the Polkadot terminology. + +- What need(s) does your project meet? + +At first, the need for a formal definition addressing the issue of having a terminology open to interpretation or that does not offer a structured representation for its applications. In the future, the project will allow ecosystem users and developers to retrieve and manipulate data from Polkadot using a controlled natural language. That is, users will be able to intuitively and correctly specify their queries. For instance: How many transactions were carried out for the past 30 min on all parachains? What are the top five wallets with DOT tokens? How many wallets have more DOT tokens than me? What is the total NFT sales volume on the Polkadot ecosystem? + +- Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem? + +To the best of our knowledge, there is no similar project in the ecosystem using a knowledge-oriented approach to support CNL querying. Currently, users without programming skills depend on blockchain explorers to have access to chain data. There is a lack of solutions providing natural language querying. + +There is a project [1] providing querying capabilities on Polkadot. +[1] https://academy.subquery.network/ + +In addition, there is no formal ontology currently specified and maintained for the ecosystem. + + - If so, how is your project different? + +The SubQuery project uses GraphQL and does not support querying specific concepts inherent from the ecosystem. However, as mentioned this project demands programming skills from its users. + + - If not, are there similar projects in related ecosystems? + +Specifically regarding our first step for defining a formal ontology, there is the EthOn project, which is an Ethereum Ontology described in http://ethon.consensys.net + +Concerning the query-answering asset using CNL, there is no similar project in related ecosystems, as far as we know. + +## Team :busts_in_silhouette: + +### Team members + +- Name of team leader +**Dr. Marcio Moreno**, marcio@mobr.ai, Co-Founder, Research Scientist and CEO at MOBR Systems (https://www.mobr.ai). + +- Names of team members +**Dr. Rafael Brandao**, rafael@mobr.ai, Co-Founder, Research Scientist and COO at MOBR Systems (https://www.mobr.ai). + +### Contact + +- **Contact Name:** Marcio Ferreira Moreno + +- **Contact Email:** marcio@mobr.ai + +- **Website:** https://www.mobr.ai + +### Legal Structure + +- **Registered Address:** +Av Paulista, 1106 Sala 01 / ANDAR 16 - Bairro: Bela Vista, Sao Paulo - SP CEP 01310914 + +- **Registered Legal Entity:** +MOBR SYSTEMS LTDA + +### Team's experience + +Both applicants worked as Research Scientists at IBM for 7 years. Earlier, Dr. Moreno (full CV on [1]) was a postdoctoral researcher at CWI (Centrum Wiskunde & Informatica) in the Netherlands, and worked at the Pontifical Catholic University of Rio (PUC-Rio) in Brazil. Dr. Brandão (full CV on [2]) worked at the TecGraf Institute, from PUC-Rio, during his doctoral studies. The team has published multiple research papers and patents, their background includes Web3, AI, Knowledge Engineering, Distributed and Decentralized Systems, Multimedia and Hypermedia Systems, Human-Centered Computing, among other research topics. + +For a complete list of peer-reviewed published papers and granted patents, please visit the following google scholar links + +- Marcio Moreno, PhD: https://scholar.google.com/citations?user=PfdmrPUAAAAJ +- Rafael Brandao, PhD: https://scholar.google.com/citations?user=3ta0InEAAAAJ + +### Team Code Repos + +MOBR Systems: +- https://github.com/mobr-ai + +Our personal accounts: +- https://github.com/mfmoreno +- https://github.com/rbrandao + + +### Team LinkedIn Profiles (if available) + +- https://linkedin.com/in/marcio-moreno-phd-598a459a/ +- https://linkedin.com/in/rafaelrmb/ + +### Google Scholar Profiles (Or other research indexer profile, ex. Researchgate) +- https://scholar.google.com/citations?user=PfdmrPUAAAAJ +- https://scholar.google.com/citations?user=3ta0InEAAAAJ + +## Development Status :open_book: + +Not initiated yet. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** We expect to conclude the proposed first step of the project in 4 months + +- **Full-Time Equivalent (FTE):** 1 FTE (two PhDs each dedicating about 30 days of work during a 4 months project) + +- **Total Costs:** The total budget requested is US$ 29900 for two PhDs dedicating about 30 days of work during a 4 months project. Considering that for academic, scientific, consultancy on average a PhD daily rate is about US$500. + +### Milestone 1 — Literature review and conceptual framework specification + +Our approach will begin by conducting a comprehensive literature review to identify key concepts and principles in ontologies for blockchains. This includes studying the existing applications and ontological frameworks that have been developed for blockchain systems, as well as other relevant research in the fields of symbolic representation + +Once the key concepts and principles have been identified, the next step is to specify a conceptual framework that incorporates and relates these concepts and principles. This framework will be designed to express the fundamental entities and relationships that govern the Polkadot ecosystem, and it will be flexible enough to accommodate the ongoing evolution of the technology. + +- **Estimated Duration:** 2 months +- **FTE:** 1 +- **Costs:** 15,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | Copyright and Licenses | MIT | +| **0b.** | Documentation/Tutorial | We will provide a PDF document identifying and reviewing related work, concepts and principles in blockchain ontologies. For the ontology, the specification will be delivered as an OWL file with formal description of the Polkadot ecosystem abstractions. | +| **0c.** | Methodology | PDF document detailing how we carried out a systematic review of related blockchain ontologies, and the correlation with the main abstractions of Polkadot's conceptual framework. | +| **0d.** | Infrastructure | We will provide the list of all infrastructure requirements (text editors with proper versions, software packages, data packages, etc) that can be used to verify the deliveries with this milestone. | +| **0e.** | Article | We will write a draft **article** (along with source code) explaining what was achieved in this milestone. | +| **1.** | Literature survey | Document identifying and reviewing related work, concepts and principles in blockchain ontologies | +| **2.** | Conceptual framework | Ontology in OWL format with formal description of the Polkadot ecosystem| + + +### Milestone #2 – Case study for query engine + +With the conceptual framework specified and developed, the next step will be applying it to a specific Polkadot-related use case scenario. This includes conducting a case study to explore the future application of the ontological framework to support building a controlled natural language (CNL) and a query engine in Polkadot’s multi-chain ecosystem. + +- **Estimated Duration:** 1 month +- **FTE:** 1 +- **Costs:** 8,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | Copyright and Licenses | Unlicense | +| **0b.** | Documentation/Tutorial | We will provide a PDF document describing a use case to the future application of the ontological framework supporting the building of a controlled natural language (CNL) and a querying engine in Polkadot's multi-chain environment. | +| **0c.** | Methodology | The use case will be developed based on our expert perspective and also requirements identified from the engagement with other blockchain experts. That is, the requirements for the query engine will be grounded in real-world experience needs. | +| **0d.** | Infrastructure | We will provide the list of all infrastructure requirements (text editors with proper versions, software packages, data packages, etc) that can be used to verify the deliveries with this milestone. | +| **0e.** | Article | We will write a draft **article** explaining what was achieved in this milestone. | +| **1.** | Case study | Document describing case study on conceptual framework application with query engine | + +### Milestone #3 – Polkadot team brainstorming / workshop + +An important aspect of creating an ontology is to engage with experts from application domains to gain their insights and perspectives. This engagement helps to ensure that the ontological framework is grounded in real-world experience and reflects the current understanding of representative personas in the applied fields. In this sense, a key step of the proposed approach is to present and discuss the ontology with the Polkadot team. + +- **Estimated Duration:** 1 month +- **FTE:** 1 +- **Costs:** 6,900 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | Copyright and Licenses | CC BY 4.0 | +| **0b.** | Documentation/Tutorial | We will provide two PDF documents, one reporting scientific and technical findings and the other presenting reflections over the discussed content and action items | +| **0c.** | Methodology | The methodology for the team discussion will be loosely based on a Design Thinking process. We will guide the team during discussion in order to extract relevant feedback from experts. The idea is to carry this activity remotely. | +| **0d.** | Infrastructure | We will suggest tool options for carrying out the collab session. That can be Mural or other equivalent free cloud collaborative tool available (e.g. Google Drive, MS Teams).| +| **0e.** | Article | We will write a full **article** detailing what was achieved in the project. The article will have an acknowledgment in the body of it stating the research was supported by Web3 Foundation. It will be public available on arXiv.org and submited to listed scientific venues | +| **1.** | Presentation deck | Slide deck with reflections over the discussed content and action items| + + + + +## Future Plans + +- Our intention is that the conceptual framework constructed during the proposed research be used to support future knowledge-oriented assets. That is, assets that can take advantage of the Polkadot ecosystem’s formal definition, producing new knowledge, consuming it, and performing reasoning procedures. + +- In the short term, we will provide a case study for bootstrapping use cases to guide the design and building of a query engine tool. This asset will provide semantic searching features based on a controlled natural language (CNL). + +- The development roadmap for such an asset would be the long term plan related to this project proposal. Which would enrich the user experience within the Polkadot community. + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** + +Web3 Foundation Website + +- Work already done + +We have work in progress assets being developed in our recently founded startup. More info can be found at: https://mobr.ai + +We also previously developed a technology that became widely adopted within IBM Research. It is a toolset to deal with knowledge engineering and ontology construction. More info can be found here: +1. https://github.com/ibm-hyperknowledge +2. https://ibm-hyperknowledge.github.io/possibility-link-demo-iswc2022/ + +- Previous applied grants + +We have already submited proposals to Waves and VeChain grant programs. + From 4b09e38f8feb07cdf1fdb5dd7219c83980a518c9 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 27 Jan 2023 13:54:07 +0100 Subject: [PATCH 078/578] Update index.md Add Knowledge Oriented Framework --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index d47e8235b34..dd32177f3bb 100644 --- a/applications/index.md +++ b/applications/index.md @@ -594,3 +594,4 @@ Use this page for an overview of all public grants and their status. Use the sid | [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | | [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☐ | ☐ | | [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](Omniverse DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☐ | ☐ | +| [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | From 26d8463b731d2f3b3d8a7799dbfe7bbc2952dae3 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 27 Jan 2023 13:55:18 +0100 Subject: [PATCH 079/578] Update index.md Fix Omniverse%20DLT --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index dd32177f3bb..e00e2b06f8b 100644 --- a/applications/index.md +++ b/applications/index.md @@ -593,5 +593,5 @@ Use this page for an overview of all public grants and their status. Use the sid | [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☐ | ☐ | ☐ | | [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | | [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☐ | ☐ | -| [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](Omniverse DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☐ | ☐ | +| [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☐ | ☐ | | [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | From 88d992173c6c16931716c6ef6e8f09d0a1c13c3f Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Fri, 27 Jan 2023 13:57:09 +0100 Subject: [PATCH 080/578] Update index.md (#1485) pallet-drand-client first delivery --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index e00e2b06f8b..369eacf6aef 100644 --- a/applications/index.md +++ b/applications/index.md @@ -553,7 +553,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Wow Labz](http://www.wowlabz.com) | [Dot Marketplace Phase 3](dot_marketplace-Phase3.md) | [GitHub](https://github.com/orgs/WowLabz) | ☐ | ☒ | ☒ | | [10Clouds Sp. z o.o.](https://10clouds.com/) | [Crowdloan Front End Template](crowdloan_frontend_template.md) | [GitHub](https://github.com/10clouds) | ☐ | ☐ | ☐ | | [DodoRare, Inc.](https://dodorare.com/) | [Faterium](faterium.md) | [GitHub](https://github.com/faterium) | ☐ | ☒ | ☐ | -| [The Bacon Beacon](https://github.com/random-bacon) | [Pallet Drand Client](pallet-drand-client.md) | [GitHub](https://github.com/random-bacon) | ☐ | ☐ | ☐ | +| [The Bacon Beacon](https://github.com/random-bacon) | [Pallet Drand Client](pallet-drand-client.md) | [GitHub](https://github.com/random-bacon) | ☐ | ☒ | ☐ | | [Helikon Labs](https://helikon.io/) | [ChainViz v1](chainviz.md) | [GitHub](https://github.com/helikon-labs/chainviz) | ☐ | ☐ | ☐ | | [Mutai Solutions](https://bryanmutai.co/) | [Crowdloans-FET](Crowdloans-FET.md) | [GitHub](https://github.com/brymut) | ☐ | ☐ | ☐ | | [k/factory](https://k-f.co/) | [Centrifuge Go-Substrate-RPC Client V2](centrifuge-gsrpc-v2.md) | [GitHub](https://github.com/centrifuge/go-substrate-rpc-client) | ☐ | ☐ | ☐ | From c6bc3fe9f608832ceb8b120c746e88795bd7d4a8 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Mon, 30 Jan 2023 10:00:47 -0300 Subject: [PATCH 081/578] Update rfps.md to add open RFPs to the list (#1489) * Update rfps.md * fix sorting --- docs/rfps.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/rfps.md b/docs/rfps.md index 2b3e18f5a57..c2deeec56e8 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -31,8 +31,10 @@ If you find an open RFP here that you think you can address, feel free to [submi | [alternative_polkadot_host_implementations.md](RFPs/Open/alternative_polkadot_host_implementations.md) | 🟢 | 29.11.2021 | | [anti-collusion_infrastructure.md](RFPs/Open/anti-collusion_infrastructure.md) | 🟢 | 29.11.2021 | | [appi.md](RFPs/Implemented/appi.md) | 🔴 | 20.07.2021 | +| [bpf-contracts.md](RFPs/Open/bpf-contracts.md) | 🟢 | 06.01.2023 | | [candle-auction.md](RFPs/Implemented/candle-auction.md) | 🔴 | 02.02.2022 | | [crowdloan_front_end_template.md](RFPs/Under%20Development/crowdloan_front_end_template.md) | 🟡 | 18.11.2022 | +| [data_analysis_tools.md](RFPs/Open/data_analysis_tools.md) | 🟢 | 25.01.2023 | | [decentralized-security-marketplace.md](RFPs/Open/decentralized-security-marketplace.md) | 🟢 | 23.01.2023 | | [epassport-zk-validation.md](RFPs/Open/epassport-zk-validation.md) | 🟢 | 29.11.2021 | | [formal_guarantees_for_grandpa.md](RFPs/Open/formal_guarantees_for_grandpa.md) | 🟢 | 07.10.2022 | @@ -42,6 +44,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [ISO_20022.md](RFPs/Open/ISO_20022.md) | 🟢 | 31.05.2022 | | [ISO_8583.md](RFPs/Under%20Development/ISO_8583.md) | 🟡 | 31.05.2022 | | [ksm-tipping-button.md](RFPs/Implemented/ksm-tipping-button.md) | 🔴 | 20.07.2021 | +| [move_smart_contract_pallet.md](RFPs/Open/move_smart_contract_pallet.md) | 🟢 | 22.12.2022 | | [multi-chain-block-explorer.md](RFPs/Under%20Development/multi-chain-block-explorer.md) | 🟡 | 23.11.2021 | | [on-chain-quadratic-funding.md](RFPs/Implemented/on-chain-quadratic-funding.md) | 🔴 | 29.03.2022 | | [php-api.md](RFPs/Implemented/php-api.md) | 🔴 | 27.05.2022 | @@ -55,6 +58,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [staking-rewards-collector-front-end.md](RFPs/Implemented/staking-rewards-collector-front-end.md) | 🔴 | 20.07.2021 | | [sub-consensus.md](RFPs/Open/sub-consensus.md) | 🟢 | 23.11.2021 | | [uncollateralized-stablecoin-research.md](RFPs/Implemented/uncollateralized-stablecoin-research.md) | 🔴 | 01.01.23 | +| [user-account-access-analysis.md](RFPs/Open/user-account-access-analysis.md) | 🟢 | 07.01.2023 | | [validator-setup-maintenance.md](RFPs/Open/validator-setup-maintenance.md) | 🟢 | 23.11.2021 | | [validator-selection-algorithm.md](RFPs/Under%20Development/validator-selection-algorithm.md) | 🟡 | 07.12.2022 | | [wallet-aggregator-library.md](RFPs/Open/wallet-aggregator-library.md) | 🟢 | 23.01.2023 | From bfbeffda8787fe8d98ded3b09dd600485c24efef Mon Sep 17 00:00:00 2001 From: Aviraj Khare <49766964+avirajkhare00@users.noreply.github.com> Date: Mon, 30 Jan 2023 20:59:33 +0530 Subject: [PATCH 082/578] Added polkasearch application (#1461) * [Aviraj] Added Ink Boxes follow up grant * [Aviraj] Amend Ink Smart Contract Wizard * [Aviraj] Amend ink smart contract wizard * [Aviraj] Added polkasearch application * [Aviraj] Added more details to the application * [Aviraj] Added 0e in M2 * [Aviraj] Added wireframes * [Aviraj] Updated application --- applications/polkasearch.md | 206 ++++++++++++++++++++++++++++++++++++ 1 file changed, 206 insertions(+) create mode 100644 applications/polkasearch.md diff --git a/applications/polkasearch.md b/applications/polkasearch.md new file mode 100644 index 00000000000..1154ebceabf --- /dev/null +++ b/applications/polkasearch.md @@ -0,0 +1,206 @@ +# polkasearch.xyz + +- **Team Name:** Aviraj Khare +- **Payment Address:** Bitcoin Address: bc1qtr9993ch6zlr29j5c22zzax57h62x5gj24wtxk +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + +## Project Overview :page_facing_up: + +### Overview + +Polkasearch.xyz aims to become a discovery platform where users can discover Grants, Bounties, Jobs, Tools, Educational material for Polkadot/Substrate, all under one roof. + +**Grants:** Various DAOs can place their grant information on this website for free. They will have the CRM given by us or they can point user to external website if they wish for the user to submit grant application on their own end. + +**Bounties:** Bounties are great way to outsource the work. You can list a task as a bounty and let developers apply for it in case it is technical bounty. A bounty is not only scoped to Technical development, it can be UI/UX, writing, etc. They can either use our CRM or can point bounty to external website. + +**Jobs:** Various companies who are building on top of Polkadot ecosystem can place their jobs for free. They can either use our own CRM or they can point job to external portal of their own. + +**Tools:** It's hard to find libraries, tools, packages on top of Substrate ecosystem. We aim to build and integrate directory of tools. User can filter tools according to their specification. User will be able to upload information regarding a tool on the website. + +**Educational Material:** Get articles, educational videos, links of various substrate topics on the website. User will be able to upload tool/library name on the website. + +### Project Details + +#### Tech Stack + + - [Django](https://www.djangoproject.com/): We will be using Django as our Web framework. + - Database: We will be using Postgresql database. + - Wallet: We will be using polkadot{JS} extension wallet so that user can signup/login in the website by signing a message. + +#### API Schema + + - `/`: home page, different for both authenticated and non-authenticated users. + - `/login`: Used to login. + - `/signup`: Used to signup. + - `/signout`: Used to signout. + - `/grants`: Used to see all the grants. + - `/grants/`: Used to look for a grant. + - `/api/v1/grants/apply?grant=grant_slug`: Used to apply for a grant. Only candidate can use this. + - `/grants/new`: Used to create a new grant. + - `/bounties`: Used to view bounties. + - `/bounties/`: Used to view a bounty. + - `/api/v1/bounties/apply?bounty=bounty_slug`: Used to apply for a bounty. Only candidate can use this. + - `/bounties/new`: Used to create a new bounty. + - `/jobs`: Used to look for all the jobs. + - `/jobs/`: Used to look for a specific job. + - `/api/v1/jobs/apply?job=job_slug`: Used to apply for a job. Only candidate can use this. + - `/jobs/new`: Used to create a new job. + - `/tools`: Used to view all the tools, libraries, packages, etc. + - `/tools/`: Used to view a tool. + - `/tools/new`: Used to create a new tool. + - `/learn`: Used to view all the learning resources. + - `/learn/`: Used to view detail about a learning resource. + - `/learn/new`: Used to submit a new educational material. + +There are going to be **19** urls which means **19** HTML templates that would be rendered by Django. +There are going to be atleast **3** APIs which will be called by the frontend. + +#### Primary Entities + +Here we have **6** primary entities. + +1. User: A user can either be a `candidate` or an `employer`. A candidate can apply for a job, bounty, grant. Candidate cannot create job, bounty, grant. Candidate can only submit a tool or educational material. An employer can create Grant, Bounty, Job. She can also submit tool, educational material. An employer cannot apply for job, bounty or grant. +2. Grant: A `grant` can only be created by an employer. A candidate or multiple candidates can apply for a grant. +3. Bounty: A `bounty` can only be created by an employer. A candidate or multiple candidates can apply for a bounty. +4. Job: A `job` can only be created by an employer. A candidate or multiple candidate can apply for a job. +5. Tool: Both candidate and employer can add a `tool`. +6. Learn: Both candidate and employer can add a `learning material`. + +#### Designs + +Designs of few pages. + +1. ![Home Page](https://i.imgur.com/O5nd7q9.png) +2. ![Signup Page](https://i.imgur.com/2Tg5bAc.png) +3. ![Create a Job Page](https://i.imgur.com/2dIRPza.png) + +### Ecosystem Fit + +Help us locate your project in the Polkadot/Substrate/Kusama landscape and what problems it tries to solve by answering each of these questions: + +- Where and how does your project fit into the ecosystem? +We will become the discovery layer of Polkadot ecosystem. +- Who is your target audience (parachain/dapp/wallet/UI developers, designers, your own user base, some dapp's userbase, yourself)? +Developers, writers, UI/UX, etc. all will be benifited by the project. +- What need(s) does your project meet? +Our project can provide user with earning opportunities, learning material and tools required to build on top of Substrate ecosystem. +- Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem? + - If so, how is your project different? + - If not, are there similar projects in related ecosystems? + + There is one project: https://earn.superteam.fun in solana ecosystem. + In polkadot ecosystem, https://polkassembly.io/ and https://polkasearch.xyz have a few things in the intersection but our platform is more about providing opportunities to the end user in this ecosystem. + +## Team :busts_in_silhouette: + +### Team members + +- Aviraj Khare + +### Contact + +- **Contact Name:** Aviraj Khare +- **Contact Email:** avirajkhare00@gmail.com +- **Website:** https://avirajkhare00.com + +### Legal Structure + +- **Registered Legal Entity:** About to get registered + +### Team's experience + +**Aviraj Khare:** Ex Gojek. Into Web3 space since 2016. Completed two grants of Web3 foundation. + +### Team Code Repos + +- https://github.com/avirajkhare00/ink-boxes +- https://github.com/avirajkhare00/ink-wizard + +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. + +- https://github.com/avirajkhare00 + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/avirajkhare00 + + +## Development Status :open_book: + +Yet to start the development of the project. + +## Development Roadmap :nut_and_bolt: + +This section should break the development roadmap down into milestones and deliverables. To assist you in defining it, we have created a document with examples for some grant categories [here](../docs/Support%20Docs/grant_guidelines_per_category.md). Since these will be part of the agreement, it helps to describe _the functionality we should expect in as much detail as possible_, plus how we can verify and test that functionality. Whenever milestones are delivered, we refer to this document to ensure that everything has been delivered as expected. + +Below we provide an **example roadmap**. In the descriptions, it should be clear how your project is related to Substrate, Kusama or Polkadot. We _recommend_ that teams structure their roadmap as 1 milestone ≈ 1 month. + +### Overview + +- **Total Estimated Duration:** 2 months +- **Full-Time Equivalent (FTE):** 1 FTE +- **Total Costs:** $10,0000 USD + +### Milestone 1 + +- **Estimated duration:** 1 month +- **FTE:** 1 +- **Costs:** 5,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide the documentation on the README of the repository. If needed, we will create `docs` directory that would contain in-depth documentation. | +| **0c.** | Testing and Testing Guide | Models, Views and Forms will be covered by [`django.test`](https://docs.djangoproject.com/en/4.1/topics/testing/) module which is a sub-module of `unittest`. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Authentication | User can be authenticated either via traditional web2 username/password or via polkadot extension wallet, web3 based. | +| 2. | CRM for bounties | We will be creating this CRM using Django. Everyone can view a bounty, candidate can apply for bounty and employer can create bounty(ies). | +| 3. | CRM for jobs | We will be creating this CRM using Django. Everyone can view jobs, candidate can apply for a job or multiple jobs, employer can list a job or multiple jobs. | + +### Milestone 2 + +- **Estimated duration:** 1 month +- **FTE:** 1 +- **Costs:** 5,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide the documentation on the README of the repository. If needed, we will create `docs` directory that would contain in-depth documentation. | +| **0c.** | Testing and Testing Guide | Models, Views and Forms will be covered by [`django.test`](https://docs.djangoproject.com/en/4.1/topics/testing/) module which is a sub-module of `unittest`. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| **0e.** | Article | We will be publishing a blog about polkasearch on Medium and Polkadot forum. | +| 1. | CRM for Grant | We will be creating this CRM in Django. Users can view grant. Candidate can apply for a grant. Employer can create a grant. | +| 2. | Tools | A listing page and viewing page for tools. Any user can add a tool inside polkadot ecosystem, user just needs to signup. | +| 3. | Educational material | Any user can add new listing for educational meterial for polkadot ecosystem. Everyone can view the listing. | +| 4. | Add grants manually | Add atleast 5 grants manually to the platform from this list: https://substrate.io/ecosystem/projects/ | +| 5. | Add bounties manually | Explore bounties by contacting companies from this list: https://substrate.io/ecosystem/projects/ | +| 6. | Add Jobs manually | Add atleast 50 jobs | +| 7. | Add Tools manually | Add atleast 50 tools | +| 8. | Add Educational materials manually | Add atleast 50 educational materials | + + + +## Future Plans + +Please include here + +- Creation of Discord Community. +- Creation of the socials for polkasearch. +- Reaching out to builders of Polkadot ecosystem to raise Jobs, Grants, Bounties, etc. +- Reaching out to candidates using various social channels providing them with opportunities. +- Already in talks with **SquareOne** team to push it into substrate builders program once we have some metric to show. + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Searched on Google + +Here you can also add any additional information that you think is relevant to this application but isn't part of it already, such as: + +- Work you have already done. +I have completed ink-boxes and ink-wizard grant in the past. They are into active development. +- If there are any other teams who have already contributed (financially) to the project. +No +- Previous grants you may have applied for. +Ink Boxes and Ink Wizard, both are accepted and completed. From 3b1e7fe04080a716ffa9b31007bc4a1365e09689 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 30 Jan 2023 16:37:09 +0100 Subject: [PATCH 083/578] Update index.md Add Polkasearch --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 369eacf6aef..70cd3693669 100644 --- a/applications/index.md +++ b/applications/index.md @@ -595,3 +595,4 @@ Use this page for an overview of all public grants and their status. Use the sid | [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☐ | ☐ | | [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☐ | ☐ | | [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | +| [Aviraj Khare](https://github.com/avirajkhare00) | [Polkasearch](polkasearch.md) | [GitHub](https://github.com/avirajkhare00) | ☐ | ☐ | ☐ | From c13cc6755ab49d731e321c5fe9c5701f0732e854 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Tue, 31 Jan 2023 09:30:44 -0300 Subject: [PATCH 084/578] Update index.md (#1492) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 70cd3693669..16cd57bfc9a 100644 --- a/applications/index.md +++ b/applications/index.md @@ -538,7 +538,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [CrossChain Labs](https://github.com/CrossChainLabs) | [DotPulse](DotPulse.md) | [GitHub](https://github.com/CrossChainLabs) | ☐ | ☒ | ☒ | | [Jett Hays](https://github.com/jettblu) | [Distributed Key Management](DistributedKeyManagement.md) | [GitHub](https://github.com/KryptikApp) | ☐ | ☒ | ☐ | | [NexToken Technology](https://github.com/NexTokenTech) | [TREX - Timed Release Encryption Xing chains](TREX_Network.md) | [GitHub](https://github.com/NexTokenTech/TREX) | ☐ | ☐ | ☐ | -| [Blockcoders](http://blockcoders.io/) | [Cross-Consensus Messaging Software Development Kit](xcm-sdk.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☐ | ☐ | +| [Blockcoders](http://blockcoders.io/) | [Cross-Consensus Messaging Software Development Kit](xcm-sdk.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☐ | | [Keystone Wallet](https://keyst.one/) | [Polkadot Snap](PolkadotSnap.md) | [GitHub](https://github.com/KeystoneHQ) | ☐ | ☐ | ☐ | | [LeetCoin](https://www.leetcoin.co/) | [LeetCoin](leetcoin.md) | [GitHub](https://github.com/nashhq/leetcoin) | ☐ | ☐ | ☐ | | [727.ventures](https://727.ventures/) | [Sol2Ink Phase 2](typechain-polkadot-follow-up.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | From 704ade01be3ec5426803c768efd54c4e67d37ef9 Mon Sep 17 00:00:00 2001 From: gmajor <63032554+gmajor-encrypt@users.noreply.github.com> Date: Tue, 31 Jan 2023 22:27:25 +0800 Subject: [PATCH 085/578] Add PHP RPC Lib Follow up (#1488) * Add PHP RPC Lib Follow up * Fix address * Update php-rpc-lib-follow-up.md --- applications/php-rpc-lib-follow-up.md | 123 ++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 applications/php-rpc-lib-follow-up.md diff --git a/applications/php-rpc-lib-follow-up.md b/applications/php-rpc-lib-follow-up.md new file mode 100644 index 00000000000..27e99b6dc60 --- /dev/null +++ b/applications/php-rpc-lib-follow-up.md @@ -0,0 +1,123 @@ +# PHP RPC Lib Follow up + +* **Team Name:** [gmajor](https://github.com/gmajor-encrypt) +* **Payment Address:** 0xC3094f0ddce699a1Ad9Ef2621DF68Cd297a4c44F (Dai) +* **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + +## Project Overview :page_facing_up: + +### Overview + +As Gavin mentioned in this [CoinDesk article](https://www.coindesk.com/tech/2021/05/25/polkadots-gavin-wood-webassembly-is-the-future-of-smart-contracts-but-legacy-evm-is-right-now/), WebAssembly is the future of smart contracts. + +However, WebAssembly, as the main Smart Contract in the substrate ecosystem, lacks the necessary infrastructure. Except for the lib of contracts provided by polkadot.js, there are no more third parties that can query the contract storage and interact with the package. + +PHP is one of [the most popular development languages in the world](https://www.stackscale.com/blog/most-popular-programming-languages/), PHP is used by 77.8% of all the websites whose server-side programming language(https://w3techs.com/technologies/details/pl-php). + +Traditional PHP Website developers will lack the necessary SDK if they come into contact with the substrate, +However, the lack of support for contracts in the current [php-substrate-api](https://github.com/gmajor-encrypt/php-substrate-api) makes it very difficult to use PHP as a development language to interact with the substrate. + +Therefore, this proposal is an extension of [php-substrate-api](https://github.com/gmajor-encrypt/php-substrate-api) to improve the practicability of this package further and increase support for smart contracts. + +### Project Details + +* Abi encode & decode, support contract metadata **v0,v1,v2,v3,v4**, this will be used to read and write smart contracts + +* Deploy wasm smart contract + +Example + +```php +$api = new SubstrateRpc("websocket_or_http_url"); +$api->rpc->contracts->new("wasm_code", "gas limit","value"); +``` + +* Read contract values + +Example + +```php +$api = new SubstrateRpc("websocket_or_http_url"); +$api->rpc->contracts->balanceOf("from","contract"); +``` + +* Send Contract transaction + +Example +```php +$api = new SubstrateRpc("websocket_or_http_url"); +$signer = new SubstrateRpc\Util\Keyring\Signer("privatekey");// or HD +$api->setSigner($signer); +$tx = $api->tx->contracts->transfer("to_address", 10000); +$tx->signAndSend(); +``` + + +### Ecosystem Fit + +CIt can help PHP language developers easily access the substrate (polkadot) ecology + +## Team :busts_in_silhouette: + +### Team members + +* gmajor + +### Contact + +* **Contact Name:** gmajor +* **Contact Email:** gmajorencrypt@gmail.com +* **Website:** + +### Legal Structure + +individual + +### Team's experience + +I have many years of php development experience and nearly five years of blockchain development experience, familiar +with PHP, GOLANG, PYTHON, Nodejs, Rust + +### Team Code Repos + + + + + + + + + +## Development Status :open_book: + +Not yet + +## Development Roadmap :nut_and_bolt: + +### Overview + +* **Total Estimated Duration:** 1.5 months +* **Total Costs:** 10000 DAI + +### Milestone 1 + +* **Estimated duration:** 1.5 month +* **FTE:** 1 +* **Costs:** 10000 DAI + +| Number | Deliverable | Specification | +|-------:|----------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 0a. | License | MIT | +| 0b. | Documentation | Documentation on how to use this lib and how to test | +| 1. | ABI | Abi encode & decode, contract [metadata](https://use.ink/metadata/) v0,v1,v2,v3,v4 will be supported | +| 2. | Deploy | [php-substrate-api](https://github.com/gmajor-encrypt/php-substrate-api) implement new method of deploy wasm smart contract | +| 3. | Read contract | Implement method read contract values and decode as human readable, similar to [api-contract-read](https://polkadot.js.org/docs/api-contract/start/contract.read) | +| 4. | Write contract | Implement method send Contract transaction, similar to [api-contract-tx](https://polkadot.js.org/docs/api-contract/start/contract.tx) | +| 5. | Test | Including all the unit tests mentioned above | +| 6. | Example | Provide some simple examples of using this lib | +| 7. | Packagist | Submit to [Packagist](https://packagist.org/) for composer to use | +| 8. | Github action | Auto Test when new commit | + +## Future Plans + +This milestone still lacks support for smart contract verification, there is no better solution at present, and will be supported after research From cb51905cd0ce22c59273978de0d2b0806a7a4c49 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 31 Jan 2023 15:32:04 +0100 Subject: [PATCH 086/578] Update index.md Add PHP RPC Lib Follow up --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 16cd57bfc9a..d60a0999240 100644 --- a/applications/index.md +++ b/applications/index.md @@ -596,3 +596,4 @@ Use this page for an overview of all public grants and their status. Use the sid | [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☐ | ☐ | | [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | | [Aviraj Khare](https://github.com/avirajkhare00) | [Polkasearch](polkasearch.md) | [GitHub](https://github.com/avirajkhare00) | ☐ | ☐ | ☐ | +| [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib Follow up](php-rpc-lib-follow-up.md) | [GitHub](https://github.com/gmajor-encrypt/php-substrate-api) | ☐ | ☐ | ☐ | From f1161bcd03050139bc8194db2dc2ced553d665c1 Mon Sep 17 00:00:00 2001 From: valeriacaracciolo <71491710+valeriacaracciolo@users.noreply.github.com> Date: Tue, 31 Jan 2023 15:45:02 +0100 Subject: [PATCH 087/578] Scout CoinFabrik (#1490) * Create ScoutCoinFabrik.md * Update ScoutCoinFabrik.md * Update ScoutCoinFabrik.md * Update ScoutCoinFabrik.md --- applications/ScoutCoinFabrik.md | 107 ++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 applications/ScoutCoinFabrik.md diff --git a/applications/ScoutCoinFabrik.md b/applications/ScoutCoinFabrik.md new file mode 100644 index 00000000000..f4c1c286733 --- /dev/null +++ b/applications/ScoutCoinFabrik.md @@ -0,0 +1,107 @@ +# Scout CoinFabrik +- **Team Name:** CoinFabrik (Nektra S.A) +- **Payment Address:** 0xf488039EDe6B38D7689fDCC6A9FC2dd0EF39D54e (USDT) +- **[Level]:** 2 + +## Project Overview :page_facing_up: + +### Overview + +Scout: Security Analysis Tool + +We are building an extensible open-source tool (or set of tools) to assist Rust Polkadot / Kusama smart contract developers to detect common security issues and deviations from best practices. To improve coverage and precision, we will persist in research efforts on static and dynamic analysis techniques. + +This tool will help developers write secure and more robust smart contracts. + +Our interest in this project comes from our experience in manual auditing and our usage of comparable tools in other blockchains. + + +### Project Details + +We have already conducted research work with the Universidad de Buenos Aires to better comprehend the current status of analysis tools built for Rust, while foreseeing different lines of development. + +We are currently working on tools to assist developers to apply best practices and to identify possible vulnerabilities. + +### Ecosystem Fit + +We believe we can bring value to the Polkadot / Kusama community by offering a tool to detect security bugs from a development perspective. By including this tool in their toolchain, Polkadot / Kusama developers will be assisted to remove bugs in their code, raising the quality and security of their smart contracts. + +## Team :busts_in_silhouette: + +### Team members + +- Ariel Wassbein, Head of Reaseach +- Valeria Caracciolo, Business Develpoment +- CoinFabrik's development and auditing team - when required. + +### Contact + +- **Contact Name:** Valeria Caracciolo +- **Contact Email:** valeria.caracciolo@coinfabrik.com +- **Website:** https://www.coinfabrik.com/ + +### Legal Structure + +- **Registered Address:** Dr. Emilio Ravignani 2394, C1425 CABA, Argentina +- **Registered Legal Entity:** Nektra S.A. + +### Team's experience +We are a research and development company specialized in Web3, with a strong background in cybersecurity. Founded in 2014, we have worked on over 180 blockchain-related projects, EVM based and also for Solana, Algorand, and Polkadot. Beyond development, we offer security audits through a dedicated in-house team of senior cybersecurity, currently working on code in Substrate, Solidity, Clarity, Rust, and TEAL. + +Our team has an academic background in computer science and mathematics, with work experience focused on cybersecurity and software development, including academic publications, patents turned into products, and conference presentations. Furthermore, we have an ongoing collaboration on knowledge transfer and open-source projects with the University of Buenos Aires. + +### Team Code Repos + +- https://gitlab.com/coinfabrik-private/data/frecuencia-de-vulnerabilidades +- https://drive.google.com/drive/u/1/folders/1HoaL6EXX1Wky7e1SHYBY6oIZDGK2sgDD + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/arielwaissbein/ +- https://www.linkedin.com/in/valeriacaracciolo/ + + +## Development Status :open_book: + +We have been working on different aspects of the tool: +- Research on security analysis tools for Rust-based blockchains. +- Listing common vulnerabilities and usability issues in different systems and technologies. +- Tools to assist developers. + +We briefly validated the idea of the development described in this application with David Hawig and Bhargav Bhatt from Web3 Foundation, who encourage us to apply for this grant. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 1 month +- **Full-Time Equivalent (FTE):** 5 FTE +- **Total Costs:** 15,000 U$D + +### Milestone 1: Proof of Concept + +- **Estimated duration:** 1 month (Day 1 to Day 30) +- **FTE:** 5 +- **Costs:** 15,000 U$D + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | MIT +| 0b. | Documentation | We will provide a report, listing relevant security issues introduced in smart contracts developed with ink!. This will include a summary of findings and how the results were procured, a detailed description of each vulnerability/best practice, and links to the code that exemplifies them. +| 0c. | Testing and Testing Guide | No tests with be produced at this stage. +| 0d. | Docker | Does not apply at this stage. +| 0e. | Article | We will upload to our blog a report summary. + **1** | Research | Producing a curated list of vulnerabilities, best practices, and enhancements related to smart contracts written in ink!, considering the list of [analysis categories](https://blog.coinfabrik.com/analysis-categories/) currently used for our manual smart contract audits. + **2** | Development | Producing code examples and snippets of smart contracts written in ink! for each type of vulnerability from the list mentioned in 1. Research. + **3** | Development | Proof of concept code detecting some (relevant) issues included in the list of vulnerabilities and best practices. + + +## Future Plans + +(Our original plan was to apply for a 3 months grant, to reach a public release of the tool. But we were advised to apply for a shorter objective, so we are presenting only Milestone #1 from our plan) After completing this first milestone, we are planning on applying for 2 additional iterations to reach a tool prototype (Milestones #2) and public release (Milestones #3). Our mission is to continue to work on improving automated and assisted tools for finding security vulnerabilities and writing more secure code. Our objective is to help the Polkadot / Kusama community produce better and more secure code with these tools. + +## Referral Program (optional) :moneybag: + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Richard Casey from Parity brought this program to our attention. Our inquiries were addressed by David Hawig and Bhargav Bhatt, who also gently advised us on this presentation. From 3f8180326a942092b0df63ed1a76f39b9a51c9b6 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 31 Jan 2023 15:47:57 +0100 Subject: [PATCH 088/578] Update index.md Add CoinFabrik --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index d60a0999240..b4388760ddd 100644 --- a/applications/index.md +++ b/applications/index.md @@ -597,3 +597,4 @@ Use this page for an overview of all public grants and their status. Use the sid | [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | | [Aviraj Khare](https://github.com/avirajkhare00) | [Polkasearch](polkasearch.md) | [GitHub](https://github.com/avirajkhare00) | ☐ | ☐ | ☐ | | [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib Follow up](php-rpc-lib-follow-up.md) | [GitHub](https://github.com/gmajor-encrypt/php-substrate-api) | ☐ | ☐ | ☐ | +| [CoinFabrik](https://www.coinfabrik.com/) | [Scout - Security Analysis Tool](ScoutCoinFabrik.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | From 8b52a5c20ab7c8f17e62ce6b82f12a4477051953 Mon Sep 17 00:00:00 2001 From: Luca Eugenio <88165605+Lord-Nymphis@users.noreply.github.com> Date: Tue, 31 Jan 2023 16:22:25 +0000 Subject: [PATCH 089/578] Update Datagen_Project.md (#1491) --- applications/Datagen_Project.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/applications/Datagen_Project.md b/applications/Datagen_Project.md index e3823ed743f..87e014fc167 100644 --- a/applications/Datagen_Project.md +++ b/applications/Datagen_Project.md @@ -94,7 +94,8 @@ In particular is possible to observe that the Solana ecosystem is backing both o - Angela Griggio (CEO) - Luca Eugenio Barlassina (COO) -- Niccolò Baldini (Head of Substrate Division) +- Oliver Lim (Rust and Blockchain developer) +- Niccolò Baldini (Former_Head of Substrate Division) - Ren Okamoto (Head of Solidity Smart-Contracts Development) - Alawiye Olukayode (front end developer) - William Liu (part-time / blockchain developer) @@ -138,6 +139,7 @@ All our devs (and our designers) are professionals and also very committed to le - Alawiye ( https://github.com/oluseyi-frontend?tab=repositories ) - Luca (https://github.com/Lord-Nymphis ) - Niccolò ( https://github.com/viac92 ) +- Oliver (https://github.com/cuteolaf ) - Ren ( https://github.com/fantasy2345 ) - William ( https://github.com/Crypto-One-dev ) @@ -150,6 +152,7 @@ All our devs (and our designers) are professionals and also very committed to le - Giulia (https://www.linkedin.com/in/giulia-cortinovis-98702796/) - Luca (https://www.linkedin.com/in/luca-eugenio-barlassina-293077180/) - Niccolò (https://www.linkedin.com/in/niccol%C3%B3-baldini-0400baa9/) +- Oliver ( https://www.linkedin.com/in/oliver-lim-2215a8235/ ) - Ren (https://www.linkedin.com/in/ren-okamoto-140a97224/) - William (https://www.linkedin.com/in/william-liu-8a4672218/) From 0abd13bfde95bb9316b0468b27543bc7cf060618 Mon Sep 17 00:00:00 2001 From: Dominik | Brushfam <43150707+coreggon11@users.noreply.github.com> Date: Wed, 1 Feb 2023 08:24:17 +0100 Subject: [PATCH 090/578] Update openbrush-follow-up-2.md (#1469) --- applications/openbrush-follow-up-2.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/applications/openbrush-follow-up-2.md b/applications/openbrush-follow-up-2.md index 0f87dfedd23..0af5a98dd5a 100644 --- a/applications/openbrush-follow-up-2.md +++ b/applications/openbrush-follow-up-2.md @@ -308,9 +308,9 @@ PSP37 - #### Milestone 8. `UniquePallet`/`RMRKPallet` chain extension -* **Estimated Duration:** 7 weeks +* **Estimated Duration:** 8 weeks * **FTE:** 2.5 -* **Costs:** 52 500 USD +* **Costs:** 55 300 USD | Number | Deliverable | Specification | |--------|--------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| @@ -322,6 +322,7 @@ PSP37 - | 4. | Implement NFT contract via chain extensions | OpenBrush will provide a default implementation of contracts that are implemented via according chains extensions. | | 5. | Refactoring of trait system in the ink! | Refactoring of trait system in the ink! to support default implementation inside of traits. It should improve the developer's experience with traits and simplify its usage. | | 6. | Marketing - Create 4 educational video for OpenBrush/ink! | We are going to work on educational video materials for OpenBrush and ink! Community. We see a huge gap in knowledge, understanding, and vision for the whole community in that sphere. Moreover, 727.ventures team will promote it in Twitter, Medium etc. We will create a lower entry threshold for newcomers by this educational program. | +| 7. | ink! storage docs | There is no documentation with clear description of how the storage works within ink!. As our team was the one doing the refactoring of ink! storage, we will create a comprehensive documentation on how the storage works in ink! 4, as well as detailed comparison on what was changed in comparison to ink! 3 storage, including examples of usage. | #### Milestone 9. Multi token chain extension From 6b6c83fc6e159e4434a9530e32ae98021fcce8a3 Mon Sep 17 00:00:00 2001 From: Dominik | Brushfam <43150707+coreggon11@users.noreply.github.com> Date: Wed, 1 Feb 2023 08:37:35 +0100 Subject: [PATCH 091/578] Follow-up grant for Typechain-Polkadot (#1432) * Create typechain-polkadot-follow-up-2.md * Update typechain-polkadot-follow-up-2.md * Update typechain-polkadot-follow-up-2.md * Apply suggestions from code review Co-authored-by: S E R A Y A * Update typechain-polkadot-follow-up-2.md --------- Co-authored-by: S E R A Y A Co-authored-by: varex83 <35969035+varex83@users.noreply.github.com> --- .../typechain-polkadot-follow-up-2.md | 191 ++++++++++++++++++ 1 file changed, 191 insertions(+) create mode 100644 applications/typechain-polkadot-follow-up-2.md diff --git a/applications/typechain-polkadot-follow-up-2.md b/applications/typechain-polkadot-follow-up-2.md new file mode 100644 index 00000000000..1352a75401b --- /dev/null +++ b/applications/typechain-polkadot-follow-up-2.md @@ -0,0 +1,191 @@ +# Typechain-Polkadot Follow-up-2 + +# [Typechain-Polkadot](https://github.com/727-Ventures/typechain-polkadot) + +- **Project Name:** [Typechain-Polkadot](https://github.com/727-Ventures/typechain-polkadot) +- **Team Name:** [727.ventures](https://github.com/727-Ventures) +- **Payment Address:** ERC 20 (DAI): +0x352F779203202c99699CdA8cc95adF06CcC8abEf +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 3 + +## Project Overview :page_facing_up: + +### Overview + +Nowadays, when technologies are growing faster and faster, we should think about optimizing different routine processes and making older stuff better. One of these optimizations is to make code typesafe that will be flexible in different situations. + +When a smart contract is being written, the front-end developer receives its file representation in the Application Binary Interface (ABI) format. One ABI per each contract, a new ABI for every contract update. + +Information about how to interact with a contract (methods names, arguments & returns types, etc.) is included in this ABI file. It is not relatively human-readable, so extracting that information becomes a challenge. We need to have correct type definitions for each contract in TypeScript. + +Interaction with blockchain is done with the polkadot.js library, which only has abstract definitions for the contract in use. Thus users' code cannot be typesafe. And Typechain-Polkadot can change it. + +This Grant is a follow-up to the previous grants, [first grant](https://github.com/w3f/Grants-Program/blob/master/applications/typechain-polkadot.md) and [second grant](https://github.com/w3f/Grants-Program/blob/master/applications/typechain-polkadot-follow-up.md). +In this grant, we aim to integrate event subscription, allow users to create their plugins and expand the tool into more packages so the users can alo use different parts of the application alone if needed. + +### Usage of Typechain-compiler + +``` + npx typechain-compiler --config config.json + +``` + +Also, you can set some additional arguments like `--noCompile`, `--noTypechain`, `--release` + +Config interface will be something like this: + +``` +export interface Config { + projectFiles: string[]; // Path to all project files, everystring in glob format + skipLinting : boolean; // Skip linting of project files + artifactsPath : string; // Path to artifacts folder, where artifacts will be stored it will save both .contract and .json (contract ABI) + typechainGeneratedPath : string; // Path to typechain generated folder +} + +``` + +### Project Details + +Typesafe contracts' descriptions can be generated automatically by a script, taking a list of ABIs as an input, giving usable TS type definitions and even runtime code as its output. + +Given that a front-end developer needs to do this with every contract update, the such tool would save a lot of time and prevent mistakes of misusing smart contracts. It is installed as a package with built-in CLI. + +When contract descriptions come both with ABI and source code (`*.contract` files), our tool will provide means for deployment as well. + +### Ecosystem Fit + +- Where and how does your project fit into the ecosystem? + +There is a whole side to every project in the ecosystem - that is, the front-end side of contract integration - that will find a use for Typechain-Polkadot during the development process. + +- Who is your target audience? + +Our main target audience is front-end and smart-contract developers of Polkadot projects. + +- What need(s) does your project meet? + +Our project speeds up the front-end integration of Polkadot/Substrate/Kusama contracts. As well as brings type safety to developers' code when dealing with contracts. For smart contract developers, it simplifies integration test writing. + +- Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem? + +No, we are the first project of the kind in the ecosystem. However, in the Solidity ecosystem, a similar project already exists, [Typechain](https://www.npmjs.com/package/typechain). + +## Team :busts_in_silhouette: + +### Team members + +- **Markian Ivanichok** (СEO of 727.ventures) +- **Fedor Lebed** (Head of Operations | 727.ventures) +- **Dominik Krížo** (Head of Engineering | 727.ventures) +- **Varex Silver** (Blockchain developer | 727.ventures) +- **Artem Lech** (Blockchain developer | 727.ventures) + +### Contact + +- **Contact Name:** Fedor Lebed +- **Contact Email:** [fedor.lebed@727.ventures](mailto:feder.lebed@727.ventures) +- **Website:** [727.ventures](727.ventures) + +### Legal Structure + +* **Registered Address:** The registered office shall be in Coastal Building, Wickham’s +Cay II, P. O. Box 2221, Road Town, Tortola, VG1110, British Virgin Islands. +* **Registered Legal Entity:** Seven2seven Ventures Ltd + +### Team's experience + +**Markian Ivanichok** +CEO of 727.ventures, Blockchain entrepreneur, Software Engineer. Started my engineering career back when I was 15. Since then, I developed and got a lot of experience in engineering and leadership. Gained entrepreneur experience by founding a couple of startups. Inspired, co-founded and invested in Sector F, one of the top consulting companies in Ukraine that helps entrepreneurs to move faster. + +**Fedor Lebed** +Fedor is the head of operations at Brushfam, a portfolio company of 727. ventures which is developing the ink! Smart contracts tools. +Fedor invested in mining pools from 15 years old. He has a background in product management, working with international software products for Tier-1 markets. + +**Dominik Krížo** +Head of Engineering + +Started programming own games at age of 15 as a hobby, then went to University studying informatics and object oriented programming, becoming an Android developer, eventually switching to work in web3. Dominik played a crucial role in the OpenBrush and Sol2Ink development and is currently developing the ink! smart contracts tools as part of Brushfam. + +**Varex Silver** +Blockchain Developer. + +Student of Computer Science at the Kyiv National University of Taras Shevchenko. Participated in programming competitions of different stages in school since 2017 (C++). +Was a Backend developer(Go), Solidity developer(Solidity, Hardhat, Typescript), and now Blockchain developer(Rust, Typescript). + +**Artem Lech** +Blockchain Developer. + +Student of Applied Mathematics at the Kyiv National University of Taras Shevchenko. Started programming in 2016 and participated in a lot of Ukrainian and international competitions of competitive programming. Worked as a lecturer of algorithms at the school of competitive programming and as Intern Backend Engineer (Rust). Now works as Blockchain Developer on Polkadot Blockchain (Rust, Typescript). + +### Team Code Repos + +- [https://github.com/727-Ventures](https://github.com/727-Ventures) + +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. + +- [https://github.com/coreggon11](https://github.com/coreggon11) +- [https://github.com/varex83](https://github.com/varex83) +- [https://github.com/Artemka374](https://github.com/Artemka374) + +### Team LinkedIn Profiles (if available) + +- [https://www.linkedin.com/in/mivanichok/](https://www.linkedin.com/in/mivanichok/) +- [https://www.linkedin.com/in/fedor-lebed-b8520b1a8/](https://www.linkedin.com/in/fedor-lebed-b8520b1a8/) +- [https://www.linkedin.com/in/dominik-krizo/](https://www.linkedin.com/in/dominik-krizo/) +- [https://www.linkedin.com/in/bogdan-ogorodniy/](https://www.linkedin.com/in/bogdan-ogorodniy/) +- [https://www.linkedin.com/in/artem-fomiuk-31249b226/](https://www.linkedin.com/in/artem-fomiuk-31249b226/) + +## Development Status :open_book: + +[The project](https://github.com/727-Ventures/typechain-polkadot) is already a work-in-progress. + +## Development Roadmap :nut_and_bolt: + +### Overview + +We have decided to describe a full roadmap of a Typechain here, with estimates. However, the funding we request at this stage is for milestone 3. + +* **Total Estimated Duration:** 8 weeks +* **Full-Time Equivalent (FTE):** 2.5 +* **Total Costs:** 56,000 USD + +## Previous work + +### [Grant #1](https://github.com/w3f/Grants-Program/pull/992) + +### [Grant #2](https://github.com/w3f/Grants-Program/pull/1368) + +## Current work - Scope of this grant +### Milestone 1 - High-level improvements, flexibility and simplifying of usage + +- **Estimated duration:** 8 weeks +- **FTE:** 2.5 +- **Costs:** 56,000 USD + + +| Number | Deliverable | Specification | +| ------ | ----------- | ------------- | +| 0a. | License | MIT | +| 0b. | Documentation | We will cover new-added features in documentation and usage examples. | +| 0c. | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an article that explains how to integrate the typechain library into a project and describes the types of connection options (directly or via compiler). | +| 1. | User-defined plugins | We will provide an opportunity for users to make their plugins, for instance, how to use parsed types, adding new fields and so on. | +| 2. | Subscribing to events | We will research and subscribe to events the contract emits, which will be handy for developers. | +| 3. | Typechain-compiler | The tool will be easy for big projects to compile Rust code and generate Typechain definitions. It’ll be helpful for TDD when users can write code and develop everything in one CLI command instead of generating a typechain-code file by file. In plans, we want to make a wrapper for running user scripts (like hardhat run) and also functionality to initialize the environment for typechain usage | +| 4. | Openbrush integration tests | We will test typechain on openbrush integration tests to ensure everything is working correctly and is easy to use. | +| 5. | typechain/types package | We will make a separate package for types that typechain use to reduce the usage of the same code and separate static code from generated code. | + +## Future work + +After this grant, we will maintain the project to keep up with new emerging ecosystem standards, listen to community issues, and update the tool to make the transformation process a more excellent experience for the developers and teams. + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** + +Have a number of approved applications: + +- OpenBrush +- Sol2Ink +- Typechain-polkadot (Milestone 1, 2) From fd8f9e085786a268a79d3213983a47e134674556 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 1 Feb 2023 08:52:58 +0100 Subject: [PATCH 092/578] Update index.md Typechain-Polkadot Follow-up-2 --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index b4388760ddd..513c23a7316 100644 --- a/applications/index.md +++ b/applications/index.md @@ -598,3 +598,4 @@ Use this page for an overview of all public grants and their status. Use the sid | [Aviraj Khare](https://github.com/avirajkhare00) | [Polkasearch](polkasearch.md) | [GitHub](https://github.com/avirajkhare00) | ☐ | ☐ | ☐ | | [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib Follow up](php-rpc-lib-follow-up.md) | [GitHub](https://github.com/gmajor-encrypt/php-substrate-api) | ☐ | ☐ | ☐ | | [CoinFabrik](https://www.coinfabrik.com/) | [Scout - Security Analysis Tool](ScoutCoinFabrik.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | +| [727.ventures](https://727.ventures/) | [Typechain-Polkadot Follow-up-2](typechain-polkadot-follow-up-2.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☐ | ☐ | From a391d2f1866ac14c981f6445c24ec01e8eac2e8e Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 1 Feb 2023 13:23:57 +0100 Subject: [PATCH 093/578] Update index.md Update Implementation of the new hash function to BLS12 curves --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 513c23a7316..d84eb5892a0 100644 --- a/applications/index.md +++ b/applications/index.md @@ -427,7 +427,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [@Scale Technologies](https://atscale.xyz) | [Libra - Decentralized Payment Network](./Libra.md) | [GitHub](https://github.com/atscaletech/) | ☐ | ☒ | ☒ | | [Interstellar](https://www.interstellar.gg/) | [Interstellar - Wallet Phase 1](./Interstellar-Network.md) | [GitHub](https://github.com/Interstellar-Network) | ☐ | ☒ | ☐ | | [Pendulum](https://pendulumchain.org/) | [Spacewalk: a Stellar bridge](./spacewalk-bridge.md) | [GitHub](https://github.com/pendulum-chain) | ☐ | ☒ | ☐ | -| [Dmitrii Koshelev](https://github.com/dishport) | [Implementation of the new hash function to BLS12 curves](./new_bls12_hash_function.md) | [GitHub](https://github.com/dishport) | ☐ | ☒ | ☐ | +| [Dmitrii Koshelev](https://github.com/dishport) | [Implementation of the new hash function to BLS12 curves](./new_bls12_hash_function.md) | [GitHub](https://github.com/dishport) | ☐ | ☒ | ☒ | | [Hamster](https://github.com/orgs/hamster-shared) | [Hamster - A decentralized computing network](./hamster.md) | [GitHub](https://github.com/orgs/hamster-shared) | ☐ | ☒ | ☒ | | [Papers GmbH](https://papers.ch/en/) | Zaturn - A Generic Attestable Oracle parachain Phase 1 | [GitHub](https://github.com/airgap-it) | ☐ | ☐ | ☐ | | [Slonigiraf](https://www.slonigiraf.org/) | [SLON - a recommendation letter system](./slonigiraf.md) | [GitHub](https://github.com/slonigiraf) | ☐ | ☒ | ☒ | From 825776630fcc246ba8e487687ba4e1abf9bbb04e Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Wed, 1 Feb 2023 15:51:42 +0100 Subject: [PATCH 094/578] Update index.md --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index d84eb5892a0..ce341a60d5c 100644 --- a/applications/index.md +++ b/applications/index.md @@ -356,7 +356,7 @@ Use this page for an overview of all public grants and their status. Use the sid | :---------------------------------------------- | :---------------------------------------------------------------------------------------- | :-------------------------------------------------- | :--------- | :------------: | :-------: | | [Pawn](https://github.com/pawnz0) | [NuLink](./NuLink.md) | [GitHub](https://github.com/pawnz0/NuLink) | ☐ | ☒ | ☒ | | [Cyril Carlier](https://github.com/CrommVardek) | [Polk-Auction Website](./polk-auction.md) | [GitHub](https://github.com/CrommVardek) | ☐ | ☒ | ☒ | -| [Uddug](https://uddug.com/) | [JuniDB - Peer-to-Peer Databases](./JuniDB.md) | [GitHub](http://github.com/uddugteam/) | ☐ | ☐ | ☐ | +| [Uddug](https://uddug.com/) | [JuniDB - Peer-to-Peer Databases](./JuniDB.md) | [GitHub](http://github.com/uddugteam/) | ☒ | ☐ | ☐ | | [Canyon Labs](https://canyon-network.io) | [Permanent decentralized storage Phase 2](./canyon_network.md) | [GitHub](https://github.com/canyon-network) | ☐ | ☒ | ☒ | | [Skynet Labs](https://siasky.net/) | [Pallet for Decentralized Off-Chain Storage on Skynet](./skynet-substrate-integration.md) | [GitHub](https://gitlab.com/SkynetLabs) | ☐ | ☒ | ☒ | | [Uniwrap/1001 Group](https://uniwrap.io/) | [Project 1001](./project_1001.md) | [GitHub](https://github.com/uniwrap-protocol) | ☐ | ☐ | ☐ | From abc4c132c3565b81d98744802c030f7b07cc3de4 Mon Sep 17 00:00:00 2001 From: Mark Van de Vyver Date: Thu, 2 Feb 2023 02:57:09 +1100 Subject: [PATCH 095/578] Grant: Substrate Tokenomics Survey (#1348) * Grant: Substrate Tokenomics Survey Substrate Tokenomics - The state of (rational) play Signed-off-by: Mark Van de Vyver * Remove non-research elements Signed-off-by: Mark Van de Vyver * Response to reviewer feedback Signed-off-by: Mark Van de Vyver * Updated to research template Signed-off-by: Mark Van de Vyver * Align description detail across sections Signed-off-by: Mark Van de Vyver * Changes requested Signed-off-by: Mark Van de Vyver * Changes requested Signed-off-by: Mark Van de Vyver * Changes requested Signed-off-by: Mark Van de Vyver * Changes requested Signed-off-by: Mark Van de Vyver --------- Signed-off-by: Mark Van de Vyver --- applications/tokenomics-survey-2022.md | 323 +++++++++++++++++++++++++ 1 file changed, 323 insertions(+) create mode 100644 applications/tokenomics-survey-2022.md diff --git a/applications/tokenomics-survey-2022.md b/applications/tokenomics-survey-2022.md new file mode 100644 index 00000000000..1e5eccd3fe8 --- /dev/null +++ b/applications/tokenomics-survey-2022.md @@ -0,0 +1,323 @@ +# Substrate Tokenomics: + +- **Team Name:** Mark Van de Vyver [PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) +- **Payment Address:** To be provided (e.g. 0x8920... (USD)) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + +## Project Overview :page_facing_up: + +### Overview + +A annotated bibliography of rational expectations equilibrium (a.k.a. no-arbitrage) economic models used to develop blockchain/token economies, as well as the tokenomics of Polkadot Parachains. + +This is a survey, hence limited to topics the existing literature addresses. Within the scope of the deliverables, I am not committing to solving any particular token-economy design question. +The report/working paper will be posted to [SSRN (e.g. FEN - Cryptocurrency Research eJournal)](https://papers.ssrn.com/sol3/JELJOUR_Results.cfm?form_name=journalBrowse&journal_id=3839004), [IDEAS](https://ideas.repec.org/), [Arxiv (q-fin.GN)](https://arxiv.org/list/q-fin.GN/recent). + +- Description: + The decision making of Substrate developers (and other stakeholders) is assisted if a hypothetical/proposed token-economy can be described by reference, or analogy, to a known working/successful token-economy. Absent an existing implementation, developers are left to invent a token-economy, try to adapt an existing non-blockchain experience to a blockchain, or try to adapt non-blockchain ideas to a blockchain. +- This project provides a annotated bibliography to help think through various choices and their trade-offs. It does so by reviewing the current state of play, as it is described in: a) published general-blockchain research, b) Polkadot whitepapers. It does not offer the answer to any particular token-economy design question. +- Substrate integration: + With Substrate Token-Economy networks in mind, I aim to provide a annotated bibliography of existing general-blockchain token-economy research. + Specifically, the central features and concerns across Polkadot Parachain Token-Economy networks will be identified. + Ultimately, the reader should learn something about those features of the token-economies of Polkadot Parachain networks and understand how some of the issues raised by the general-blockchain token-economy research are addressed by Polkadot Parachain token-economy designs, while others are not. + Summary tables will highlight the key differentiating characteristics of different Polkadot Parachain network token-economies. +- Motivation: + A project we are developing envisions the use of Substrate relay and Parachains in such a manner that our (imagined) token use is, apparently, novel. The state of play in Polkadot Parachain token-economics appears to be a debate [around staking and inflation](https://forum.polkadot.network/t/should-parachains-have-staking-inflation/806). A search of docs.substrate.io for "tokenomics" and "token-economics" returns no results. We had expected a reference to, or high-level summary of, the token-economies of parachains elected to the Polkadot relay chain. Ideally, we hoped to find high level descriptions of some token-economy features that are enabled by the distinct features of Substrate and its pallets, possibly with links to case studies or other resources. This annotated bibliography will provide some of that information. + +## Project Details + +### The problem + +A search of docs.substrate.io for "tokenomics" and "token-economics" returns no results. We had expected a reference to, or high-level summary of, the token-economies of parachains elected to the Polkadot relay chain. Ideally, we hoped to find high level descriptions of some token-economy features that are enabled by the distinct features of Substrate and its pallets, possibly with links to case studies or other resources. This annotated bibliography will provide some of that information. Inclusion of any of this information in Substrate/Polkadot documentation is out of scope. + +### Research questions/hypothesis + +This project provides a annotated bibliography to identify relevant research, it does not offer the answer to any particular token-economy design question. It does so using: a) published general-blockchain research, b) Polkadot whitepapers. + +### The Methodology + +The annotated bibliography component of this exercise will be closest to a "Scoping Review", see Grant MJ, Booth A. [A typology of reviews: an analysis of 14 review types and associated methodologies](https://doi.org/10.1111/j.1471-1842.2009.00848.x). Health Info Libr J. 2009 Jun; 26(2):91-108. Review. PubMed PMID: 19490148. + +Extract from Table 1 of Grant, M.J. and Booth, A. (2009): + +| Description | Search | Appraisal | Synthesis | Analysis | +| ----------- | ------ | --------- | --------- | -------- | +| Preliminary assessment of potential size and scope of available research literature. Aims to identify nature and extent of research evidence (usually including ongoing research) | Completeness of searching determined by time/scope constraints. May include research in progress | No formal quality assessment | Typically tabular with some narrative commentary | Characterizes quantity and quality of literature, perhaps by study design and other key features. Attempts to specify a viable review | + +Each section of the report/working paper will be developed using some subset of the following iterative process (Tsafnat, G., Glasziou, P., Choong, M.K. et al. [Systematic review automation technologies](https://doi.org/10.1186/2046-4053-3-74), Syst Rev 3, 74 (2014)) + +- Review reporting guidelines, best practice handbooks, and training modules [preparation stage] +- Formulate question and decide on review type [preparation stage] +- Search for previous published literature [preparation stage] +- Develop and test search strategies [preparation stage] +- Review search strategies [preparation stage] +- Execute search [retrieval stage] +- De-duplicate data/information [retrieval stage] +- Screen title and abstracts [screening stage] +- Retrieve full-text articles [retrieval stage] +- Screen articles in full-text [screening stage] +- Search for grey literature (preprints, working papers) [retrieval stage] +- Quality assessment and data/information extraction [synthesis stage] +- Citation chasing [retrieval stage] +- Update database searches [retrieval stage] +- Synthesize data/information [synthesis stage] +- Manuscript development [write-up stage] + +### The data collection and analysis procedures + +#### Published articles + +The initial source of the published research will be the top-10 articles selected by the grantee, using the commercial research databases available from the State Library of New South Wales by operationalizing the following inquiry, "Refereed articles on block-chain token-economics using rational expectations equilibrium (a.k.a. no-arbitrage) arguments/analysis, ranked by journal impact factors". This initial source may be adjusted at the grantees discretion based on his expertise. The selection process will be fully described and documented. + +#### Polkadot Parachain whitepapers + +These are from projects that are Polkadot-Parachains as at 19 December 2022. + +### The expected results + +The objective is to arrive at a scoping review of current state of token-economy development. + +One of the elements will be summary tables, using attributes that arise naturally within a Rational Expectations Equilibrium framework, such as the following: + +- Network +- Token +- Token Type +- Model Type +- Economy Type +- Sector Type +- Production Type +- Monetary Type +- Agent Utility +- Economic Sectors +- Rate Curves +- Riskless Rate +- Risk Premium +- Market Rate +- Borrow/Lend +- Lender of Last Resort + +Another component of this research is creating a token-categorization questionnaire or decision tree that will aid/inform the specification of a token-economy. Nonetheless, there are already schemes that are useful even at this early stage. Such as these [Token Types (Burnie, Burnie and Henderson (2018))](https://doi.org/10.5195/ledger.2018.121): + +- fuel-tokens: "underpin generic blockchain applications". I refine this definition as follows: The token yield is defined or modeled such that it provides holders with incentives to act for the purpose of ensuring the blockchain has the desired features/characteristics. +- transaction-tokens: "act as a cash substitute" +- voucher-tokens: "exchanged for a predefined asset". I include goods or services. + +The grants team, and any reader could reproduce the data analysis by applying the token-categorization questionaire to a parachain they are familiar with and compare their classification with the submitted result. + +### Relevant related work + +- [A typology of reviews: an analysis of 14 review types and associated methodologies](https://doi.org/10.1111/j.1471-1842.2009.00848.x) +- [Systematic review automation technologies](https://doi.org/10.1186/2046-4053-3-74) +- [Token Types (Burnie, Burnie and Henderson (2018))](https://doi.org/10.5195/ledger.2018.121) + +### Intended venue for results publication and the timeline for publication + +The report/working paper will be posted to [SSRN (e.g. FEN - Cryptocurrency Research eJournal)](https://papers.ssrn.com/sol3/JELJOUR_Results.cfm?form_name=journalBrowse&journal_id=3839004), [IDEAS](https://ideas.repec.org/), [Arxiv (q-fin.GN)](https://arxiv.org/list/q-fin.GN/recent). + +### Out of scope + +- Crypto currencies/stable coins. +- What is considered a security and what is not. +- Proof-of-work vs Proof-of-stake considerations, e.g. [Blockchain economics](https://scholar.princeton.edu/sites/default/files/markus/files/blockchain_paper_v7a.pdf). +- Governance considerations, e.g. trust and reputation. +- Game theory, behavioral economics/finance. +- Empirical inference of token-economy attributes from time-series or cross-sectional regression analysis. +- A review of the general economic modeling literature i.e. not related to blockchains. +- Substrate/Polkadot documentation. +- Verifying the network token-economy has been implemented as specified in the network whitepaper. +- Verifying the network whitepaper assumptions are a reasonable/plausible description of the network participants. +- Inclusion of any of this information in Substrate/Polkadot documentation. + +#### Crypto-Currencies + +The prevalence of crypto-currencies means the decision to exclude them warrants some explanation. +Equilibria are generally explicitly constructed (which proves existence) using conjectured properties of the dividends (or an equivalent) from the economic activity. Specifically, a price is the present-value (i.e. discounted for time and non-diversifiable risk), of all future dividends. Since the dividends of fiat currencies are zero this approach does not work. While there are workarounds, they, being particular, are not of interest in the more general setting we wish to bring to light. + +### Ecosystem Fit + +- Where and how does your project fit into the ecosystem? + - Research into the design of a token-economy and survey of Polkadot token-economies. +- Who is your target audience? + - Polkadot/Substrate Relay and Parachain developers. Industry analysts/advisors (media and investors). +- What need(s) does your project meet? + Developers and analysts need to understand the relevant literature available when developing their token-economy. + The literature we canvas both theoretical (refereed articles) and applied (network whitepapers). +- Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem? + No + - If not, are there similar projects in related ecosystems? + No + +## Team :busts_in_silhouette: + +### Team members + +- Mark Van de Vyver [PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) + +### Contact + +- **Contact Name:** Mark Van de Vyver [PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) +- **Contact Email:** mark@taqtiqa.com + +### Legal Structure + +- **Registered Address:** 9681 41st St NE, Saint Michael, MN 55376 +- **Registered Legal Entity:** Begley Brothers Inc. + +### Team's experience + +Research interests + +- Time series analysis of price series and pricing model performance. +- Market Microstructure theory and empirical studies. +- Option pricing and real options/asset pricing. + +The University of Western Australia (1994-2003): +Postgraduate and undergraduate teaching and research supervision. Portfolio Management, Corporate Finance and Derivatives Securities. Co-developed (with Prof R. Maller and Prof A. Szimayer) the University’s joint Undergraduate and Postgraduate Degrees in Mathematics and Finance. + +The University of Sydney (2003-2008): +Postgraduate and undergraduate teaching and research supervision. Advanced Asset Pricing, Corporate Finance, Investments and Advanced Portfolio Management + +#### Publications + +- [Order imbalance period by period](https://www.researchgate.net/publication/228464696_Order_imbalance_period_by_period), 2008, Asli Ascioglu, Thomas H. Mcinish (Wunderlich Chair) and Mark Van de Vyver +- [Testing for reduction to random walk in autoregressive conditional heteroskedasticity models](https://doi.org/10.1111/1368-423X.t01-1-00090), December 2002, Econometrics Journal, Claudia Kluppelberg, Ross Maller, Mark Van de Vyver, Derick Wee +- [How Might Companies Value Esos?](https://doi.org/10.1111/j.1835-2561.2002.tb00191.x), March 2002, Australian Accounting Review, Ross Maller, Rosemary Tan, Mark Van de Vyver + +### Team Code Repos + +Personal + +- https://github.com/taqtiqa-mark +- https://github.com/bbros-dev +- https://github.com/taqtiqa +- https://github.com/BegleyBrothers + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/tatiqa/ + +## Development Status :open_book: + +- links to improvement requests for proposals or [RFPs](https://github.com/w3f/Grants-Program/tree/master/rfp-proposal): + - [Designing UpChain: a framework for securing Substrate runtime upgrades and Substrate network upgrades](https://github.com/w3f/Grants-Program/pull/1309) +- As requested, I have adjusted the source of the research to eliminate myself as the source of bias in the collection of research papers. +- academic publications relevant to the problem: + One of the products from this research will be such a listing under these categories: + 1. Published articles: As requested, to eliminate bias (and constrain budget) in the collection of research papers, the initial source of the published research will be the top-10 articles provided by the State Library of New South Wales information search service in response to the following query, "Refereed articles on block-chain token-economics using rational expectations equilibrium (a.k.a. no-arbitrage) arguments/analysis, ranked by journal impact factors" + 2. Polkadot Parachain whitepapers: These are from projects that are Polkadot-Parachains as at 19 December 2022. +- links to your research diary, blog posts, articles, forum discussions or open GitHub issues: + - [Tokenomics: Grant models](https://forum.polkadot.network/t/tokenomics-grant-models/1266) +- references to conversations you might have had related to this project with anyone from the Web3 Foundation + There have been no conversations related to this project with anyone from the Web3 Foundation. +- previous interface iterations, such as mock-ups and wireframes: + This project is research oriented and as such there are no mock-ups and wireframes to test. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- Total Estimated Duration: 3 months +- Full-Time Equivalent (FTE): 0.2 FTE +- Total Costs: 10,000 USD + +### Milestone 1 — Data gathering & Polkadot Networks + +- **Estimated duration:** 1 month +- **FTE:** 0.2 +- **Costs:** 3,000 USD + +Initial analysis of the Parachain tokenomics. +Initial flow-chart/decision-tree development that will help developers place their token in the following contexts: + +- Token Type +- Model Type +- Economy Type +- Sector Type +- Production Type +- Monetary Type + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | Copyright and Licenses | Creative Commons Attribution 4.0 International License (article), Dual Apache 2 or MIT License (code) | +| **0b.** | Documentation/Tutorial | We will provide both **artifacts documentation** of the deliverables and a basic **tutorial** that explains how a user can (for example) execute the code included or can visualize data or use any artifacts included. | +| **0c.** | Methodology | Detailed explanation of how the results were achieved and how to reproduce/verify the results. | +| **0d.** | Infrastructure | We will provide the list of all infrastructure requirements (text editors with proper versions, software packages, data packages, etc) that can be used to verify the deliveries with this milestone. LaTeX for article production and Docker files for software execution. | +| **0e.** | Article | We create a **draft article** (with source code), in the English language. There will be an acknowledgement "This work was supported by a research grant from the Web3 Foundation. The analysis and opinions expressed are the authors and do not reflect the opinions of the Web3 Foundation." | +| **0e.1** | - Appendix: Methodology | As described in the methodology section above | +| **0e.2** | - Section: Polkadot Parachains | Initial Parachain summary | +| 1. | List of academic papers | Collect published and network papers, as described in the methodology section above | +| 2. | Data to be extracted from the papers | As described in the methodology section above | +| 3. | Analysis procedures | As described in the methodology section above | + +### Milestone 2 — Outline Article + +- **Estimated duration:** 1 month +- **FTE:** 0.2 +- **Costs:** 3,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | Copyright and Licenses | Creative Commons Attribution 4.0 International License (article), Dual Apache 2 or MIT License (code) | +| **0b.** | Documentation/Tutorial | We will update both **artifacts documentation** of the deliverables and a basic **tutorial** that explains how a user can (for example) execute the code included or can visualize data or use any artifacts included. | +| **0c.** | Methodology | Update the detailed explanation of how the results were achieved and how to reproduce/verify the results. | +| **0d.** | Infrastructure | We will update the list of all infrastructure requirements (text editors with proper versions, software packages, data packages, etc) that can be used to verify the deliveries with this milestone. LaTeX for article production and Docker files for software execution. | +| **0e.** | Article | We will send a **draft article** (with source code), in the English language. There will be an acknowledgement "This work was supported by a research grant from the Web3 Foundation. The analysis and opinions expressed are the authors and do not reflect the opinions of the Web3 Foundation."| +| **0e.1** | Article | We will publish an **working paper** as indicated above. | +| **0e.2** | - Section: Published models | Initial annotated bibliography | +| **0e.3** | - Section: Polkadot Parachain Economies | Parachain summary updated with references to published models | + +### Milestone 3 — Finalize Article + +- **Estimated Duration:** 1 month +- **FTE:** 0.2 +- **Costs:** 4,000 USD + +Finalize the flow-chart/decision-tree that will help developers place their token in the following contexts: + +- Token Type +- Model Type +- Economy Type +- Sector Type +- Production Type +- Monetary Type + +Finalize the annotated bibliography. +Promote the working paper, incorporate feedback. +The report/working paper will be posted to [SSRN (e.g. FEN - Cryptocurrency Research eJournal)](https://papers.ssrn.com/sol3/JELJOUR_Results.cfm?form_name=journalBrowse&journal_id=3839004), [IDEAS](https://ideas.repec.org/), [Arxiv (q-fin.GN)](https://arxiv.org/list/q-fin.GN/recent). + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | Copyright and Licenses | Creative Commons Attribution 4.0 International License (article), Dual Apache 2 or MIT License (code) | +| **0b.** | Documentation/Tutorial | We will update both **artifacts documentation** of the deliverables and a basic **tutorial** that explains how a user can (for example) execute the code included or can visualize data or use any artifacts included. | +| **0c.** | Methodology | Update the detailed explanation of how the results were achieved and how to reproduce/verify the results. | +| **0d.** | Infrastructure | We will update the list of all infrastructure requirements (text editors with proper versions, software packages, data packages, etc) that can be used to verify the deliveries with this milestone. LaTeX for article production and Docker files for software execution. | +| **0e** | Article | We will update a **draft article** (with source code), in the English language. There will be an acknowledgement "This work was supported by a research grant from the Web3 Foundation. The analysis and opinions expressed are the authors and do not reflect the opinions of the Web3 Foundation."| +| **0e.1** | - Section: Introduction | Place the topic in perspective and motivate non-specialist readers. Text and tables where relevant/appropriate. | +| **0e.2** | - Section: Published models | Update annotated bibliography | +| **0e.3** | - Section: Polkadot Parachains | Parachain summary updated with references to published models | +| **0e.4** | - Appendix: Methodology | The research methodology. Text and tables where relevant/appropriate. | +| **0e.5** | - Section: Summary | Where are we and where to next? | +| 1. | Feedback | Collect published, working and network papers, as described in the methodology section above | +| 2. | Publish | The working paper will be posted to [SSRN (e.g. FEN - Cryptocurrency Research eJournal)](https://papers.ssrn.com/sol3/JELJOUR_Results.cfm?form_name=journalBrowse&journal_id=3839004), [IDEAS](https://ideas.repec.org/), [Arxiv (q-fin.GN)](https://arxiv.org/list/q-fin.GN/recent) | + +## Future Plans + +Please include here + +- how you intend to use, enhance, promote and support your project in the short term, and + - The working paper will be posted to [SSRN (e.g. FEN - Cryptocurrency Research eJournal)](https://papers.ssrn.com/sol3/JELJOUR_Results.cfm?form_name=journalBrowse&journal_id=3839004), [IDEAS](https://ideas.repec.org/), [Arxiv (q-fin.GN)](https://arxiv.org/list/q-fin.GN/recent) and the Polkadot forum. +- the team's long-term plans and intentions in relation to it. + - Engage in a more forward-looking/positive analysis of how to design an aspect of the Substrate/Polkadot token-economy that addresses a current need. + - Create RFP's addressing pallet functionality gaps that are identified in the course of the above. + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Web3 Foundation Website + +- Work underway: + - Literature collation + - Type definitions +- If there are any other teams who have already contributed (financially) to the project. + - None +- Previous grants you may have applied for. + - None From 87e7ff4a56c3923b2e1318b952f5c2fada01a01a Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 1 Feb 2023 17:00:02 +0100 Subject: [PATCH 096/578] Update index.md Add Substrate Tokenomics Survey --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index ce341a60d5c..3bb5099cf94 100644 --- a/applications/index.md +++ b/applications/index.md @@ -599,3 +599,4 @@ Use this page for an overview of all public grants and their status. Use the sid | [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib Follow up](php-rpc-lib-follow-up.md) | [GitHub](https://github.com/gmajor-encrypt/php-substrate-api) | ☐ | ☐ | ☐ | | [CoinFabrik](https://www.coinfabrik.com/) | [Scout - Security Analysis Tool](ScoutCoinFabrik.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | | [727.ventures](https://727.ventures/) | [Typechain-Polkadot Follow-up-2](typechain-polkadot-follow-up-2.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☐ | ☐ | +| [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☐ | ☐ | From 9ac16ec7a3ebe6c9badd5a19e0e8df8d61d096b5 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Wed, 1 Feb 2023 08:01:55 -0800 Subject: [PATCH 097/578] Update check_application_document.yml (#1498) Add manual trigger --- .github/workflows/check_application_document.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/check_application_document.yml b/.github/workflows/check_application_document.yml index e24db790cce..7d82a6619da 100644 --- a/.github/workflows/check_application_document.yml +++ b/.github/workflows/check_application_document.yml @@ -1,6 +1,7 @@ name: Check application document on: + workflow_dispatch: pull_request: types: [opened] From d19a617fe6724ec35f6f1364b185336f7c8a5111 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Thu, 2 Feb 2023 01:58:58 -0800 Subject: [PATCH 098/578] Update index.md (#1501) Faterium -> Completed --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 3bb5099cf94..6331c34b73e 100644 --- a/applications/index.md +++ b/applications/index.md @@ -552,7 +552,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [SubRelay](http://subrelay.xyz/) | [SubRelay](subrelay.md) | [GitHub](https://github.com/subrelay) | ☐ | ☐ | ☐ | | [Wow Labz](http://www.wowlabz.com) | [Dot Marketplace Phase 3](dot_marketplace-Phase3.md) | [GitHub](https://github.com/orgs/WowLabz) | ☐ | ☒ | ☒ | | [10Clouds Sp. z o.o.](https://10clouds.com/) | [Crowdloan Front End Template](crowdloan_frontend_template.md) | [GitHub](https://github.com/10clouds) | ☐ | ☐ | ☐ | -| [DodoRare, Inc.](https://dodorare.com/) | [Faterium](faterium.md) | [GitHub](https://github.com/faterium) | ☐ | ☒ | ☐ | +| [DodoRare, Inc.](https://dodorare.com/) | [Faterium](faterium.md) | [GitHub](https://github.com/faterium) | ☐ | ☒ | ☒ | | [The Bacon Beacon](https://github.com/random-bacon) | [Pallet Drand Client](pallet-drand-client.md) | [GitHub](https://github.com/random-bacon) | ☐ | ☒ | ☐ | | [Helikon Labs](https://helikon.io/) | [ChainViz v1](chainviz.md) | [GitHub](https://github.com/helikon-labs/chainviz) | ☐ | ☐ | ☐ | | [Mutai Solutions](https://bryanmutai.co/) | [Crowdloans-FET](Crowdloans-FET.md) | [GitHub](https://github.com/brymut) | ☐ | ☐ | ☐ | From 020c354f717bd69b21b1b75185c748edb0301787 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Thu, 2 Feb 2023 04:04:43 -0800 Subject: [PATCH 099/578] Update ZK-Snarks tutorial.md (#1502) Fix formatting --- applications/ZK-Snarks tutorial.md | 32 ++++++++++-------------------- 1 file changed, 10 insertions(+), 22 deletions(-) diff --git a/applications/ZK-Snarks tutorial.md b/applications/ZK-Snarks tutorial.md index a447f39c64f..309c7fcec8f 100644 --- a/applications/ZK-Snarks tutorial.md +++ b/applications/ZK-Snarks tutorial.md @@ -1,6 +1,6 @@ # ZK-Snarks tutorial -* **Team Name:** Bright Inventions -* **Payment Address:** 0xD75dDC4Aa3618e1417c68E5Df79ef9D66E4B1Ed9 +- **Team Name:** Bright Inventions +- **Payment Address:** 0xD75dDC4Aa3618e1417c68E5Df79ef9D66E4B1Ed9 - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 @@ -46,33 +46,21 @@ As our implementation will be accompanied by series of blog posts and a youtube - Katarzyna Łukasiewicz - Project Manager ### Contact -* **Katarzyna Łukasiewicz:** +* **Contact Name:** Katarzyna Łukasiewicz * **Contact Email:** katarzyna.lukasiewicz@brightinventions.pl -* **Website** https://brightinventions.pl/ +* **Website:** https://brightinventions.pl/ ### Legal Structure Bright Inventions is a limited liability company based in Gdansk, Poland. Company was founded in 2012 by Daniel Makurat and Michał Łukasiewicz. -Full address details: - - -Bright Inventions Sp. z o. o. - -ul. Jana Matejki 12 - -80-232 Gdańsk, Poland - -info@brightinventions.pl - -www.brightinventions.pl - -Company registration number: 0000687244 - -VAT EU: PL5842761920 - -REGON: 367805647 +- **Registered Address:** ul. Jana Matejki 12, 80-232 Gdańsk, Poland +- **Registered Legal Entity:** Bright Inventions Sp. z o. o. +- **Info:** info@brightinventions.pl, www.brightinventions.pl +- **Company registration number:** 0000687244 +- **VAT EU:** PL5842761920 +- **REGON:** 367805647 Bright Inventions is a team of oveer 70 full-time onsite developers, project managers & UX/UI designers - experts in mobile and web applications, systems integration, IOT devices and Blockchain platforms. From e224ebb05d4635d6cf92cbb0341fa0df21734e54 Mon Sep 17 00:00:00 2001 From: Chris00 <91449322+chrisicen@users.noreply.github.com> Date: Thu, 2 Feb 2023 22:02:08 +0800 Subject: [PATCH 100/578] Update timeline for significant delays (#1500) --- applications/openrollup-mvp-phase-1.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/applications/openrollup-mvp-phase-1.md b/applications/openrollup-mvp-phase-1.md index 8fd622d3ab2..a27724cdc42 100644 --- a/applications/openrollup-mvp-phase-1.md +++ b/applications/openrollup-mvp-phase-1.md @@ -141,14 +141,14 @@ We've been working on techniques for zk-rollup, and verifiable computation for s ### Overview -- **Total Estimated Duration:** 4 months -- **Full-Time Equivalent (FTE):** 1 FTE +- **Total Estimated Duration:** 7.5 months +- **Full-Time Equivalent (FTE):** 1.5 FTE - **Total Costs:** 30,000 USD. ### Milestone 1 — Implement Substrate Modules -- **Estimated duration:** 4 month -- **FTE:** 1 +- **Estimated duration:** 7.5 month +- **FTE:** 1.5 - **Costs:** 30,000 USD | Number | Deliverable | Specification | From 49443f284ef7d536901884e2f61d4ee98b5ab3f2 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Thu, 2 Feb 2023 15:21:40 -0300 Subject: [PATCH 101/578] Update application-template-research.md (#1503) --- applications/application-template-research.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/applications/application-template-research.md b/applications/application-template-research.md index 5e43b3654b4..f455aec6ad4 100644 --- a/applications/application-template-research.md +++ b/applications/application-template-research.md @@ -22,6 +22,7 @@ Please provide the following: - A brief description of your project. - An indication of how your project relates to / integrates into Substrate / Polkadot / Kusama. - An indication of why your team is interested in creating this project. +- An indication if your project is academic research, i.e., intended to be published in an academic peer-reviewed venue, or a technical one, to be published as a technical report on the internet. ### Project Details @@ -132,7 +133,7 @@ Below we provide an **example roadmap**. In the descriptions, it should be clear | **0b.** | Documentation/Tutorial | We will provide both **artifacts documentation** of the deliverables and a basic **tutorial** that explains how a user can (for example) execute the code included or can visualize data or use any artifacts included. | | **0c.** | Methodology | Detailed explanation of how the results were achieved and how to reproduce/verify the results. | | **0d.** | Infrastructure | We will provide the list of all infrastructure requirements (text editors with proper versions, software packages, data packages, etc) that can be used to verify the deliveries with this milestone. Ideally, we recommend the usage of LaTeX/Overleaf for article production and Docker files for software execution. | -| **0e.** | Article | We will send an **article** or part of it (with source code) that explains in the English language [...] (what was done/achieved as part of the grant). (Content, language and medium should reflect your target audience described above.) | +| **0e.** | Article | We will send an **article** or part of it (with source code) that explains in the English language [...] (what was done/achieved as part of the grant). (Content, language and medium should reflect your target audience described above.). For level 2 and 3 grants, the article must contain the following statement in an acknowledgments section: This work was supported by a research grant from the Web3 Foundation. | | 1. | List of academic papers regarding X | We will systematically search the literature about X and deliver a list of papers to read with web links to them | | 2. | Data to be extracted from the papers | Data fields with the explanation of each that will be extracted from the papers ... | | 3. | Analysis procedures | We gonna describe all the procedures planned for the analysis that will be conducted in the next milestone ... | From b8645d66642639880ee7b5931a2e0f927a54710e Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Fri, 3 Feb 2023 02:11:29 -0800 Subject: [PATCH 102/578] Update TREX_Network.md (#1504) Add `Total Costs` --- applications/TREX_Network.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/applications/TREX_Network.md b/applications/TREX_Network.md index 87473d81211..fdda5dba877 100644 --- a/applications/TREX_Network.md +++ b/applications/TREX_Network.md @@ -231,6 +231,10 @@ In the current stage, our first milestone is to deliver an early demonstration u At the next level, our second milestone is integrating the TOCW with our network under our particular consensus and mechanism. We will also implement key splitting as a third milestone to enhance the security and reliability of our system at the next level. Finally, our fourth milestone is the implementation of XCMP for cross-chain applications. +### Overview + +- **Total Costs:** 10,000 USD + ### Milestone 1 — Implement TREX network as a Polkadot para-chain From 9305043f2ee0c51b192a919ee367557821caff14 Mon Sep 17 00:00:00 2001 From: Doordashcon Date: Fri, 3 Feb 2023 13:15:06 +0100 Subject: [PATCH 103/578] Solidity Trie Verifier Implementation (#1486) * grant application * add sub implementations * milestone update * milestone num fix * milestone update * duration update --- applications/solidity-trie-verifier.md | 110 +++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 applications/solidity-trie-verifier.md diff --git a/applications/solidity-trie-verifier.md b/applications/solidity-trie-verifier.md new file mode 100644 index 00000000000..6e058a31bfb --- /dev/null +++ b/applications/solidity-trie-verifier.md @@ -0,0 +1,110 @@ +# solidity-trie-verifier + +- **Team Name:** Polytope Labs +- **Payment Address:** 0xC70ac55B07A070743555C5D12B263733eCae9f92 (Ethereum DAI) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +### Overview + +This project aims to deliver an implementation of the parity trie [verifier](https://github.com/paritytech/trie/blob/42f086bc8748f25e978da10a9cefdb396a72b158/trie-db/src/triedb.rs#L233) as required by state proof checking algorithms( [read_child_proof_check](https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/state-machine/src/lib.rs#L1102), [read_proof_check_on_proving_backend](https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/state-machine/src/lib.rs#L1128) ) in the Solidity programming language, which would include various sub implementations( for example [NodeCodec](https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/trie/src/node_codec.rs#L81) for both layoutv0 & layoutv1) required to build trustless bridging protocols from the Polkadot ecosystem to the EVM ecosystem. + +Goal: To create a primitive for more generalized bridging protocols like IBC, it is more efficient to verify Parachain state/storage than to use custom implementations which Darwina and Snowfork do. + +### Project Details + +#### APIs +```solidity +function VerifyProof(root bytes32, proof bytes[], keyValues KeyValue[]) public external returns (bool) + +struct KeyValue { + key bytes; + value bytes; +} +``` +#### Technology Stack +- Solidity + +## Team :busts_in_silhouette: + +### Team members + +- Seun Lanlege, +- Sam Omidiora, Femi Bankole + +### Contact + +- **Contact Name:** Jesse Chejieh +- **Contact Email:** jesse@polytope.technology +- **Website:** [research.polytope.technology](https://research.polytope.technology/) + +### Legal Structure +- **Registered Address:** Harneys Fiduciary (Cayman) Limited, 4th Floor, Harbour Place, 103 South Church Street, Cayman Islands +- **Registered Legal Entity:** Polytope Labs Ltd. + +### Team's experience + +Polytope Labs is a collective of core blockchain engineers, researchers & scientists from varying blockchain protocol backgrounds passionate about the proliferation of networks over platforms and enabling this future through blockchain research & education, tooling and core infrastructure development. + +- Seun Lanlege: Previously core developer at Parity Tech, Ethereum and Polkadot with over 4 years of industry experience, core contributor of the code utilized by the ecosystem who recently joined the [Polkadot fellowship program](https://github.com/polkadot-fellows/seeding/pull/33) and Mad Scientist at Polytope Labs. +- Sam Omidiora: Senior Blockchain Engineer with over four years of industry experience, previosly at [Aave](https://aave.com/), [Ambire](https://www.ambire.com/) and [Advanced Blockchain](https://www.advancedblockchain.com/) working with the solidity programming language and Lab Scientist at Polytope Labs. +- Femi Bankole: Blockchain engineer at [Matchx_iot](https://matchx.io/) + [MXC Foundation](https://www.mxc.org/) and Lab Intern at Polytope Labs. + + +### Team Code Repos + +- [Solidity Merkle Trees](https://github.com/polytope-labs/solidity-merkle-trees) +- [Simnode](https://github.com/polytope-labs/sc-simnode) +- [Prisma Client](https://github.com/polytope-labs/prisma-client-rs) + +### Team GitHub Profiles + +- [Seun Lanlege](https://github.com/seunlanlege/) +- [Sam Omidiora](https://github.com/samparsky) +- [Femi Bankole](https://github.com/iTranscend/) + +### Team LinkedIn Profiles + +- [Seun Lanlege](https://www.linkedin.com/in/seunlanlege/) +- [Sam Omidiora](https://www.linkedin.com/in/omidiora-samuel/) +- [Femi Bankole](https://www.linkedin.com/in/femibankole) + + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 6 Weeks +- **Full-Time Equivalent (FTE):** 2.5 FTE +- **Total Costs:** 30,000 USD + +### Milestone 1 Implementation + +- **Estimated duration:** 6 Weeks +- **FTE:** 2.5 +- **Costs:** 30,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | A documentation on how to use this library in form of a README on the project repository. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an **article** that covers what was done/achieved as part of the grant. | +| 1 | Solidity SCALE Codec | This will include support for `enum{option/result}`, `Vec>` decoding and other types required for verifying state proofs as current implementations([Darwinia](https://github.com/darwinia-network/darwinia-messages-sol/blob/master/contracts/utils/contracts/ScaleCodec.sol), [Snowfork](https://github.com/Snowfork/snowbridge/blob/main/core/packages/contracts/contracts/ScaleCodec.sol)) don't support. +| 2. | KeyspacedDB | Provide the solidity implementation of the following; [https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/trie/src/lib.rs#L426](https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/trie/src/lib.rs#L426). | +| 3. | MemoryDB | Provide the solidity implementation of the following; [https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/trie/src/lib.rs#L163](https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/trie/src/lib.rs#L163). | +| 4. | NodeCodec | Provide solidity implementation of the following; [https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/trie/src/node_codec.rs#L81](https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/trie/src/node_codec.rs#L81). | +| 5. | Node | Provide the solidity implementation of the following; [https://github.com/paritytech/trie/blob/42f086bc8748f25e978da10a9cefdb396a72b158/trie-db/src/node.rs#L184](https://github.com/paritytech/trie/blob/42f086bc8748f25e978da10a9cefdb396a72b158/trie-db/src/node.rs#L184). | +| 6. | NodePlan | Provide the solidity implementation of the following; [https://github.com/paritytech/trie/blob/42f086bc8748f25e978da10a9cefdb396a72b158/trie-db/src/node.rs#L507](https://github.com/paritytech/trie/blob/42f086bc8748f25e978da10a9cefdb396a72b158/trie-db/src/node.rs#L507). | +| 7. | NodeHeader | Provide the solidity implementation of the following; [https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/trie/src/node_header.rs#L26](https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/trie/src/node_header.rs#L26). | +| 8. | NibbleSlicePlan | Provide the solidity implementation of the following; [https://github.com/paritytech/trie/blob/42f086bc8748f25e978da10a9cefdb396a72b158/trie-db/src/node.rs#L454](https://github.com/paritytech/trie/blob/42f086bc8748f25e978da10a9cefdb396a72b158/trie-db/src/node.rs#L454). | +| 9. | NibbleSlice | Provide the solidity implementation of the following; [https://github.com/paritytech/trie/blob/42f086bc8748f25e978da10a9cefdb396a72b158/trie-db/src/nibble/mod.rs#L180](https://github.com/paritytech/trie/blob/42f086bc8748f25e978da10a9cefdb396a72b158/trie-db/src/nibble/mod.rs#L180). | +| 10. | Layoutv0 | Provide the Solidity implementation of following; [https://github.com/paritytech/substrate/blob/ece32a72e934f6fe6705a7d418bbf3e71b4931ad/primitives/trie/src/lib.rs#L60](https://github.com/paritytech/substrate/blob/ece32a72e934f6fe6705a7d418bbf3e71b4931ad/primitives/trie/src/lib.rs#L60). | +| 11. | Layoutv1 | Provide the Solidity implementation of the following; [https://github.com/paritytech/substrate/blob/ece32a72e934f6fe6705a7d418bbf3e71b4931ad/primitives/trie/src/lib.rs#L63](https://github.com/paritytech/substrate/blob/ece32a72e934f6fe6705a7d418bbf3e71b4931ad/primitives/trie/src/lib.rs#L63) . | +| 12. | Trie Verifier | Provide the Solidity implementation of the following; [https://github.com/paritytech/trie/blob/42f086bc8748f25e978da10a9cefdb396a72b158/trie-db/src/triedb.rs#L233](https://github.com/paritytech/trie/blob/42f086bc8748f25e978da10a9cefdb396a72b158/trie-db/src/triedb.rs#L233). | + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Web3 Foundation Website. From a238552bb9bf764eabd16607b3c7254274a93fa8 Mon Sep 17 00:00:00 2001 From: Ghan Vashishtha <74914749+gnv-zeeve@users.noreply.github.com> Date: Fri, 3 Feb 2023 17:45:35 +0530 Subject: [PATCH 104/578] Zeeve_zoombienet_deployment_testing_automation (#1399) * Create Zeeve_Parachain_deployment_zoombienet_testing_automation.md * Added mockups, technology stack and refine the deliverables as requested * url update for images * updated the milestones and grant scope * updated the milestones and grant scope * updated the milestones and grant scope * removing artical from 1st milestone --------- Co-authored-by: arjun.chamyal --- ...eployment_zoombienet_testing_automation.md | 273 ++++++++++++++++++ 1 file changed, 273 insertions(+) create mode 100644 applications/Zeeve_Parachain_deployment_zoombienet_testing_automation.md diff --git a/applications/Zeeve_Parachain_deployment_zoombienet_testing_automation.md b/applications/Zeeve_Parachain_deployment_zoombienet_testing_automation.md new file mode 100644 index 00000000000..482003617f4 --- /dev/null +++ b/applications/Zeeve_Parachain_deployment_zoombienet_testing_automation.md @@ -0,0 +1,273 @@ + +# larch - Zombie-net Automation + +- **Team Name:** [Zeeve](https://www.zeeve.io) + +- **Payment Address:** Ethereum (USDT/USDC) 0x5E1257E928aa42E3D0cd9E2A7537E37D108D811B + +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +### Overview + +Blockchain adoption is happening at a very rapid rate, with a lot many use cases being implemented and seeing the light of the day. The concept of the parachain enables the possibilities further. While we focus on building the use cases, code them and implement the business logic of it, including the creation of Parachain and then further logic running upon it, we majorly underestimate the DevOps activity to deploy, maintain, scale and manage the parachain itself. This includes initial launch of the parachain, its thorough testing using Zombie-net and scaling it further by providing support for users to create and deploy validator, full and archive nodes with ease as well as to have secure RPC endpoints. The most deficit we see is around advanced analytics and proactive monitoring to ensure a production grade incident management of networks and nodes. + +### Project Details + +Zeeve will provide a GUI tool to setup the new Substrate zombie-net network with in-depth and flexible configurations in few clicks supporting K8 and native VMs whichever fits the parachains better. + +A GUI will be built to allow a quick setup of the relaychain, parachain with zombie-net with the desired capabilities to test multiple configurations. This in turn will allow the developers and parachain teams to try multiple chain configurations while setting up the parachains with Zombie-net, as well as to choose different nodes to try and test for the best possibilities on the parachain. + +This not only will allow configurations on the parachain side but will also allow you to pick from a set of predefined DSL templates on Zombie-net as well as upload the new templates without needing to write the code. The graphical control panel will support all the other configurations or operations required to enable the developer or parachain team to test with as much flexibility as required. These operations include: + +- Restart - after x seconds, will stop the `process` and start again after the `x`amount of seconds or immediately. +- Stop - will pause (SIGSTOP) the process) +- Resume - will pause (SIGCONT) the process) +- Sleep - will allow config to sleep the test-runner for `x` ammount of seconds) + +**Test result and logs** + +The interface will allow the developer to test and see live logs of the test run, post run results and logs on the aforementioned interface. Furthermore, a stack of Prometheus and Grafana will allow easy monitoring of the Zombie-net. + +**Templating** + +The control panel will also allow the developer or the parachain team to one-click replicate one of the existing zombie-net configurations, save as template or pick from previously saved template and re-create a new test with some rapid tweaks to it. + + + +## Team :busts_in_silhouette: + +### Team members + +- Ghan Vashishtha + +- Sankalp Sharma + +- Arjun Chamyal + +- Rahul Meena + + + +### Contact + + + +- **Contact Name:** Ghan Vashishtha + +- **Contact Email:** ghan@zeeve.io + +- **Website:** www.zeeve.io + + + +### Legal Structure + + + +- **Registered Address:** 1603 Capitol Ave Ste 310, Cheyenne 82001, WY + +- **Registered Legal Entity:** Zeeve Inc. + + + +### Team's experience + + + +Founded by a team of experienced professionals and enterprenuers from industry, Zeeve's cofounders collectively have over 45+ years of experience in technology, product development, and various business verticals. Zeeve has built an enterprise-grade no-code Blockchain Infrastructure Automation platform that enables Enterprises, Blockchain Startups, Blockchain Consulting Companies and Web3 Developers to deploy Blockchain nodes and Decentralised Apps within minutes, and manage them with advanced analytics and real-time alerts. In June 2022, the Startup raised $2.65 Million in a Seed Round from Leo Capital and Blu Ventures. It plans to deploy the funds towards product development, augmenting the technology team and enhancing its reach among DApp developers and global corporations, please consider visiting our prior [work](https://www.zeeve.io/platform). + + + +### Team Code Repos + +- https://github.com/Zeeve-App + +- https://github.com/Zeeve-App/sawtooth-artifacts + +- https://github.com/Zeeve-App/Zeeve-read-the-docs + + + +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. + + + +- https://www.zeeve.io/about-us + + + +### Team LinkedIn Profiles (if available) + + + +- https://www.linkedin.com/in/ghan-vashishtha/ + +- https://www.linkedin.com/in/sankalp-sharma-502008139/ + +- https://www.linkedin.com/in/arjun-chamyal-a4466086/ + +- https://www.linkedin.com/in/rahul-m-0ba16487/ + + + +## Development Status :open_book: + + + +Before applying for the Web3 Foundation Grant, the Zeeve team has built a DevOps automation for Polkadot and other substrate chains, also created substrates based relay chains: + + + +- Automated Polkadot deployments including validator nodes, archive nodes [here](https://www.zeeve.io/blockchain-protocols/deploy-polkadot-node/) + +- Automated Kusama deployments including validator nodes, archive nodes [here](https://www.zeeve.io/blockchain-protocols/deploy-kusama-node/) + +- Created a relay chain on substrate with some customisations done at the core to accomodate the tokenomics and custom reward mechanism [here](https://axscan.axiacoin.network/#/explorer) + +- Published a [blog post](https://www.zeeve.io/blog/how-to-use-substrate-to-create-parachains-in-polkadot/) about the usage and omlememtation of praachains + +- The focus for Zeeve will be automating the parachain deployments, dedicated node setups and help with faster testing with zombie-net. + +- Spoke with David Hawig, Richard Casey and Gautam Dhameja from the Parity team regarding the development of Zeeve and the Web3 Grant application + + + +## Development Roadmap :nut_and_bolt: + + + +### Overview + + + +- **Total Estimated Duration:** 2 months + +- **Full-Time Equivalent (FTE):** 4 FTE + +- **Total Costs:** 30,000 USD. + + + +### Milestone 1 — Implement Core Zombie-net Automation + + + +- **Estimated duration:** 40 days + +- **FTE:** 4 + +- **Costs:** 20,000 USD + + + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | GPLv3 | +| 0b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) create a new Substrate based Zombie-net nodes and initiate testing, which will show how the new functionality works. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker/Cluster | We will provide a Dockerfile(s)/Cluster Yaml(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Initial Automation | We will build the core GUI driven automation to create and deploy the substrate based Zombie-net configurations including relaychain and parachain configurations. | +| 2. | Configuration | Parachain configuration is critical and complicated, we will provide the GUI based pick and choose for genesis parameters and chain configs to start wtih parachain setup for the desired Zombie-net | +| 3. | Node type support | Implement setup of all node types including Full node, Validator node and Collator node for the respective relay chain and parachain within the configured Zombie-net. | +| 4. | Cloud agnostic setup | The larch setup will be cloud agnostic and it can be installed on the choice of cloud, instructions and documentation will be provided for the same. | +| 5. | User management | The larch will allow to setup different users with desired permissions and access controls such as add, delete zombie-net, view, delete logs and save, delete templates. | + + + + + +### Milestone 2 — Monitoring + + + +- **Estimated Duration:** 20 days + +- **FTE:** 2 + +- **Costs:** 10,000 USD + + + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | GPLv3 | +| 0b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) create a new Zombie-net, test and setup monitoring for it, which will show how the new functionality works. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker/Cluster | We will provide a Dockerfile(s)/Cluster Yaml(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | Using our PR channels, we will publish an **article** that explains the high-level overview of automation as part of the grant, followed by a set of extensive examples. | +| 1. | Design monitoring strategy | The Zombie-net doesn't provide any embedded monitoring tool, we will with the zombie-net setup automation, automatically setup prometheus and Grafana while configuring the zombie-net. | +| 2. | Setup Dashboard | The deployment done for Prometheus and Grafana will show standard Dashboard having system resource and zombie-net specific details shown on the aforementioned Grafana GUI Dashboard. | +| 3. | Activity | The system will log all the activities and operations perform by the different users. | + +## Application Mockup + + + +Following are the mockups for high-level application operations, these are subject to change during development basis the requirement and behaviour. + + + +### Dashboard + +![Dashboard](https://larch.zeeve.net/images/Dashboard.png) + +### Zombie-net network list +![List all created Zombie networks](https://larch.zeeve.net/images/My-Networks.png) + +### Create a new Zombie-net + +![Zombie-net Settings](https://larch.zeeve.net/images/Create-Networks-Settings.png) + +![Zombie-net Relaychain Configuration](https://larch.zeeve.net/images/Create-Networks-Relaychain-Configuration.png) + +![Zombie-net Parachain configuration](https://larch.zeeve.net/images/Create-Networks-Parachain-Configuration.png) + +![Zombie-net Collator configuration](https://larch.zeeve.net/images/Create-Networks-Collator-Configuration.png) + +![Zombie-net HRMP configuration](https://larch.zeeve.net/images/Create-Networks-HRMP-Channels.png) + +### Relaychain, Parachain, specfile and WASM templates + +![Zombie-net Configuration templates](https://larch.zeeve.net/images/Templates-Configuration.png) + + + +![Zombie-net WASM image templates](https://larch.zeeve.net/images/Templates-Managment.png) + + + +### User activity and operation history + +![User activity and operation history](https://larch.zeeve.net/images/Activity.png) + +## Technology Stack + +- ReactJS + +- NodeJS + +- Apache/Nginx + +- TailwindCSS + +- System Scripts + +- Kubernetes/Podman/Docker + +- Prometheus, Grafana, Telegraph + +## Future Plans + +- We will promote the project by giving talks in the community, writing tutorials and videos. + +- We will spread the project in Zeeve's developer and client community of 15K+ + +- We will also work closely with the developers and clients of the Parity ecosystem for getting feedback and refine our project. + +- Our long-term plan is to make the tool become one of the default Parachain tools for the Parity ecosystem. + +- We will also add more followup, integration with the Zeeve enterprise platform allowing more flexibility for enterprises to built and deploy use case or application specific parachains. + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Web3 Foundation Website / Parity team / a conversation with Richard Casey. From 311a9c966f2d58631b8e48c5fb07cc336b49ef10 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 3 Feb 2023 13:19:04 +0100 Subject: [PATCH 105/578] Update index.md Add Zeeve --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 6331c34b73e..e648505ad55 100644 --- a/applications/index.md +++ b/applications/index.md @@ -600,3 +600,4 @@ Use this page for an overview of all public grants and their status. Use the sid | [CoinFabrik](https://www.coinfabrik.com/) | [Scout - Security Analysis Tool](ScoutCoinFabrik.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | | [727.ventures](https://727.ventures/) | [Typechain-Polkadot Follow-up-2](typechain-polkadot-follow-up-2.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☐ | ☐ | | [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☐ | ☐ | +| [Zeeve](https://www.zeeve.io) | [Parachain deployment zoombienet testing automation](Zeeve_Parachain_deployment_zoombienet_testing_automation.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | From d78db2c056b8829dcd4652ad85c2437661d6b930 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 3 Feb 2023 13:22:13 +0100 Subject: [PATCH 106/578] Update index.md Trie Verifier Implementation --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index e648505ad55..b4f81c109c1 100644 --- a/applications/index.md +++ b/applications/index.md @@ -601,3 +601,4 @@ Use this page for an overview of all public grants and their status. Use the sid | [727.ventures](https://727.ventures/) | [Typechain-Polkadot Follow-up-2](typechain-polkadot-follow-up-2.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☐ | ☐ | | [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☐ | ☐ | | [Zeeve](https://www.zeeve.io) | [Parachain deployment zoombienet testing automation](Zeeve_Parachain_deployment_zoombienet_testing_automation.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | +| [Polytope Labs](https://research.polytope.technology/) | [Trie Verifier Implementation](solidity-trie-verifier.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | From c2b7a2cb15a722fe53fa9e64902aa0b43b0279a3 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Sat, 4 Feb 2023 09:06:55 -0500 Subject: [PATCH 107/578] Update index.md (#1505) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index b4f81c109c1..7f8b392a8c1 100644 --- a/applications/index.md +++ b/applications/index.md @@ -563,7 +563,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Bright Inventions](https://brightinventions.pl/) | [ZK-Snarks Tutorial](ZK-Snarks%20tutorial.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☐ | | [Common Orbit LLC](https://brson.github.io) | [wasm-opt-for-rust maintenance](../maintenance/wasm-opt-for-rust.md) | [GitHub](https://github.com/brson/wasm-opt-rs) | ☐ | ☒ | ☐ | | [Salaheldin Soliman](https://github.com/salaheldinsoliman) | [Solang developer experience improvements](Solang_developer_experience_improvements.md) | [GitHub](https://github.com/hyperledger/solang) | ☐ | ☐ | ☐ | -| [Optymalizacja AI Grzegorz Miebs](https://github.com/miepsik) | [Validator selection](validators_selection.md) | [GitHub](https://github.com/miepsik) | ☐ | ☐ | ☐ | +| [Optymalizacja AI Grzegorz Miebs](https://github.com/miepsik) | [Validator selection](validators_selection.md) | [GitHub](https://github.com/miepsik) | ☒ | ☐ | ☐ | | [Applied Blockchain Ltd](https://appliedblockchain.com/) | [Silent Data](project_silentdata.md) | [GitHub](https://github.com/appliedblockchain) | ☐ | ☐ | ☐ | | [Web3Box Labs](https://github.com/web3box-labs) | [Web3Box](Web3Box.md) | [GitHub](https://github.com/web3box-labs) | ☐ | ☐ | ☐ | | [LimeChain](https://limechain.tech/) | [Research feasibility of Polkadot Host in Java](research-feasibiliy-java-host.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☐ | ☐ | From 0ec9afa8ba0374b7c17e28397f48a2786b6dc9d3 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Mon, 6 Feb 2023 01:55:18 -0800 Subject: [PATCH 108/578] Update sol2ink-follow-up.md (#1510) Fix format (see https://github.com/w3f/Grant-Milestone-Delivery/pull/729) --- applications/sol2ink-follow-up.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/applications/sol2ink-follow-up.md b/applications/sol2ink-follow-up.md index 6b7dad5da55..8546ed43c3f 100644 --- a/applications/sol2ink-follow-up.md +++ b/applications/sol2ink-follow-up.md @@ -1,6 +1,5 @@ -# W3F Grant Proposal +# Sol2Ink -- **Project Name:** Sol2Ink - **Team Name:** [727.ventures](https://github.com/727-Ventures) - **Payment Address:** ERC 20 ADDRESS (DAI): 0x352F779203202c99699CdA8cc95adF06CcC8abEf From 050dc5c26fdd9e08d3db939102604f6044e4065d Mon Sep 17 00:00:00 2001 From: Matej yangwao <5887929+yangwao@users.noreply.github.com> Date: Mon, 6 Feb 2023 14:29:47 +0100 Subject: [PATCH 109/578] Fixed Case sensitive links (#1513) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d96228080be..84a7e7eea9e 100644 --- a/README.md +++ b/README.md @@ -191,7 +191,7 @@ If you have an idea for a project or would like to highlight an area in which yo Ideas generally have better chances of being implemented if they're presented in a project outline format that can be picked up straight away by a team, so if you have a good concept of the milestones required to bring your project to life, you can follow the process below and directly submit an RFP: 1. [Fork](https://github.com/w3f/Grants-Program/fork) this repository. -2. In the newly created fork, create a copy of the suggestion template ([`rfps/suggestion-template.md`](https://github.com/w3f/Grants-Program/blob/master/docs/rfps/suggestion-template.md)) inside the [`rfps`](https://github.com/w3f/Grants-Program/tree/master/docs/rfps) folder. Make sure you create a new file and copy the [contents](https://raw.githubusercontent.com/w3f/Grants-Program/master/docs/rfps/suggestion-template.md) of the template into the new one, and _do not modify the template file directly._ +2. In the newly created fork, create a copy of the suggestion template ([`RFPs/suggestion-template.md`](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/suggestion-template.md)) inside the [`rfps`](https://github.com/w3f/Grants-Program/tree/master/docs/RFPs) folder. Make sure you create a new file and copy the [contents](https://raw.githubusercontent.com/w3f/Grants-Program/master/docs/RFPs/suggestion-template.md) of the template into the new one, and _do not modify the template file directly._ 3. Name the file after your idea: `project_name.md`. 4. Fill out the template with the project details. Please include as many details as possible. 5. Once you're done, create a pull request in **our** main [Grants-Program repository](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/README.md). The pull request should only contain _one new file_—the Markdown file you created from the template. From 00d30df9df596c860c62306771a63f05376343d9 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Mon, 6 Feb 2023 10:30:25 -0300 Subject: [PATCH 110/578] Update index.md (#1512) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 7f8b392a8c1..d198453a116 100644 --- a/applications/index.md +++ b/applications/index.md @@ -548,7 +548,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Ink Contracts Wizard Team](https://github.com/amankumar1008/contracts-wizard) | [Ink Smart Contract Wizard](ink-smart-contract-wizard.md) | [GitHub](https://github.com/amankumar1008/contracts-wizard) | ☐ | ☒ | ☒ | | [TDSoftware](https://www.tdsoftware.de/) | [Substrate IPFS Utilities](ipfs_utilities.md) | [GitHub](https://github.com/TDSoftware) | ☐ | ☐ | ☐ | | [Ink Boxes Team](https://github.com/nerdsince98) | [Ink Boxes](ink-boxes.md) | [GitHub](https://github.com/avirajkhare00/ink-boxes/) | ☐ | ☒ | ☒ | -| [ParaSpell](https://github.com/paraspell) | [ParaSpell Phase 2](ParaSpell_follow-up.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☐ | +| [ParaSpell](https://github.com/paraspell) | [ParaSpell Phase 2](ParaSpell_follow-up.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | | [SubRelay](http://subrelay.xyz/) | [SubRelay](subrelay.md) | [GitHub](https://github.com/subrelay) | ☐ | ☐ | ☐ | | [Wow Labz](http://www.wowlabz.com) | [Dot Marketplace Phase 3](dot_marketplace-Phase3.md) | [GitHub](https://github.com/orgs/WowLabz) | ☐ | ☒ | ☒ | | [10Clouds Sp. z o.o.](https://10clouds.com/) | [Crowdloan Front End Template](crowdloan_frontend_template.md) | [GitHub](https://github.com/10clouds) | ☐ | ☐ | ☐ | From 620d1106d5a2381ee36312d752d21dec19a83b20 Mon Sep 17 00:00:00 2001 From: Bhargav Bhatt <40268131+bhargavbh@users.noreply.github.com> Date: Mon, 6 Feb 2023 15:31:18 +0100 Subject: [PATCH 111/578] RFP: Static Analysis of Runtime Pallets (#1511) * describe vulnerabilities and add deliverables * updated deliverables * Update Static-Analysis-for-Runtime-Pallets.md fix links --------- Co-authored-by: David Hawig --- .../Static-Analysis-for-Runtime-Pallets.md | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 docs/RFPs/Open/Static-Analysis-for-Runtime-Pallets.md diff --git a/docs/RFPs/Open/Static-Analysis-for-Runtime-Pallets.md b/docs/RFPs/Open/Static-Analysis-for-Runtime-Pallets.md new file mode 100644 index 00000000000..f3412e9dfc4 --- /dev/null +++ b/docs/RFPs/Open/Static-Analysis-for-Runtime-Pallets.md @@ -0,0 +1,28 @@ +# Static Analysis of Runtime Pallets +* **Status:** Open +* **Proposer:** [Bhargav Bhatt](https://github.com/bhargavbh), [David Hawig](https://github.com/Noc2) + +## Project Description :page_facing_up: + +[Runtime Pallets](https://docs.substrate.io/fundamentals/runtime-development/) are modules for writing the business logic of blockchains in [Substrate](https://github.com/paritytech/substrate) (a Rust framework fo rbuilding blockchians). These are usually concise pieces of standalone code with relatively few dependencies and clear specifications, hence tractable targets for performing static analysis and verification. We would like to develop tools and techniques to perform static analysis with reasonable soundness guarantees. In particular, we would like to target vunerability classes that are detectable using dataflow analysis techniques like *tag analysis* and *taint analysis*. Just to give a flavor, relevant might vulnerabilities include: +* [incorrect origin](https://github.com/bhargavbh/MIRAI/blob/main/substrate_examples/incorrect-origin/description.md) of dispatchable functions. +* [unsigned transaction](https://github.com/bhargavbh/MIRAI/blob/main/substrate_examples/unsigned-transaction/description.md) validation. +* tracking bad randomness: ensure bad randomness does not leak into sensitive functions. +* detect panics statically to avoid potential DoS attacks: these include [unsafe arithmetic operations](https://github.com/bhargavbh/MIRAI/blob/main/substrate_examples/arithmetic-overflow/description.md), access outside bounds, assertion failures, etc. +* tracking unsanitised input leakage for sensitive functions. + +We seek applications that either extend existing static analysers for rust like [MIRAI](https://github.com/facebookexperimental/MIRAI/), [Prusti](https://www.pm.inf.ethz.ch/research/prusti.html), or build Rust front-ends to static analysis engines. Our preliminary feasibility study shows that MIRAI would be a good starting point as it includes a tag analysis framework, however, we are open to other tools and techniques. + +## Deliverables + +The deliverables listed are an innitial draft and can be modified taking into consideration the interests of the applicant. + +| Number | Deliverable | Specification | +| ------------- | ------------- | ------------- | +| 0a. | License | Apache 2.0 / MIT / Unlicense | +| 0b. | Documentation | A document describing the design decisions for the tool and modeling of vulnerabilities. Clear usage guideline along with the trade-off of different modes if any.| +| 0c. | Testing Guide | Test-suite which exercises various features. | +| 0d. | Article | A brief outreach article describing the high-level technique used and outcomes of the grant, including asample of minimal examples. | +| 1 | Tool | A robust static analysis tool that works on Subsstrate runtime pallets and analyses vulnerabilities classes described above. | +| 2 | Engaegment | Engage with teams at Web3 Foundation and Parity to prioritise targeting vulnerability classes.| + From 846fface670acfc56e80a4cb96e55245890a7311 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 6 Feb 2023 15:33:56 +0100 Subject: [PATCH 112/578] Update rfps.md Add Static-Analysis-for-Runtime-Pallets.md --- docs/rfps.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/rfps.md b/docs/rfps.md index c2deeec56e8..b70f6f44f60 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -56,6 +56,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [scale-codec-comparator.md](RFPs/Under%20Development/scale-codec-comparator.md) | 🟡 | 30.05.2022 | | [social-recovery-wallet.md](RFPs/Under%20Development/social-recovery-wallet.md) | 🟡 | 05.07.2021 | | [staking-rewards-collector-front-end.md](RFPs/Implemented/staking-rewards-collector-front-end.md) | 🔴 | 20.07.2021 | +| [Static-Analysis-for-Runtime-Pallets.md](RFPs/Static-Analysis-for-Runtime-Pallets.md) | 🟢 | 06.02.2023 | | [sub-consensus.md](RFPs/Open/sub-consensus.md) | 🟢 | 23.11.2021 | | [uncollateralized-stablecoin-research.md](RFPs/Implemented/uncollateralized-stablecoin-research.md) | 🔴 | 01.01.23 | | [user-account-access-analysis.md](RFPs/Open/user-account-access-analysis.md) | 🟢 | 07.01.2023 | From a4c5f1169288963602a097871533a0005dea624f Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 6 Feb 2023 15:34:44 +0100 Subject: [PATCH 113/578] Update rfps.md Fix link --- docs/rfps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/rfps.md b/docs/rfps.md index b70f6f44f60..5c676404a5a 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -56,7 +56,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [scale-codec-comparator.md](RFPs/Under%20Development/scale-codec-comparator.md) | 🟡 | 30.05.2022 | | [social-recovery-wallet.md](RFPs/Under%20Development/social-recovery-wallet.md) | 🟡 | 05.07.2021 | | [staking-rewards-collector-front-end.md](RFPs/Implemented/staking-rewards-collector-front-end.md) | 🔴 | 20.07.2021 | -| [Static-Analysis-for-Runtime-Pallets.md](RFPs/Static-Analysis-for-Runtime-Pallets.md) | 🟢 | 06.02.2023 | +| [Static-Analysis-for-Runtime-Pallets.md](RFPs/Open/Static-Analysis-for-Runtime-Pallets.md) | 🟢 | 06.02.2023 | | [sub-consensus.md](RFPs/Open/sub-consensus.md) | 🟢 | 23.11.2021 | | [uncollateralized-stablecoin-research.md](RFPs/Implemented/uncollateralized-stablecoin-research.md) | 🔴 | 01.01.23 | | [user-account-access-analysis.md](RFPs/Open/user-account-access-analysis.md) | 🟢 | 07.01.2023 | From 775ba86e90e84137f48adc1a2af3cf005e5e93b5 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Mon, 6 Feb 2023 12:51:35 -0500 Subject: [PATCH 114/578] Update suggesting.md (#1515) --- docs/suggesting.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/suggesting.md b/docs/suggesting.md index 27c6606e585..f5fa3c0d74b 100644 --- a/docs/suggesting.md +++ b/docs/suggesting.md @@ -16,9 +16,9 @@ If you have an idea for a project or would like to highlight an area in which yo Ideas generally have better chances of being implemented if they're presented in a project outline format that can be picked up straight away by a team, so if you have a good concept of the milestones required to bring your project to life, you can follow the process below and directly submit an RFP: 1. [Fork](https://github.com/w3f/Grants-Program/fork) this repository. -2. In the newly created fork, create a copy of the suggestion template ([`rfps/suggestion-template.md`](https://github.com/w3f/Grants-Program/blob/web-test-branch/docs/rfps/suggestion-template.md)) inside the [`rfps`](https://github.com/w3f/Grants-Program/blob/web-test-branch/docs/rfps/) folder. Make sure you create a new file and copy the [contents](https://raw.githubusercontent.com/w3f/Grants-Program/web-test-branch/docs/rfps/suggestion-template.md) of the template into the new one, and _do not modify the template file directly._ +2. In the newly created fork, create a copy of the suggestion template ([`rfps/suggestion-template.md`](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/suggestion-template.md)) inside the [`rfps`](https://github.com/keeganquigley/Grants-Program/tree/master/docs/RFPs) folder. Make sure you create a new file and copy the [contents](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/suggestion-template.md) of the template into the new one, and _do not modify the template file directly._ 3. Name the file after your idea: `project_name.md`. 4. Fill out the template with the project details. Please include as many details as possible. 5. Once you're done, create a pull request in **our** main [Grants-Program repository](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/README.md). The pull request should only contain _one new file_—the Markdown file you created from the template. -6. You will see the same template as for creating an application. Please replace it with [the RFP PR template](https://github.com/w3f/Grants-Program/blob/web-test-branch/.github/PULL_REQUEST_TEMPLATE/rfp_pr_template.md). +6. You will see the same template as for creating an application. Please replace it with [the RFP PR template](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/suggestion-template.md). 7. The RFP will be accepted and merged as soon as it receives three approvals from [W3F Grants Committee](./Introduction/team.md#w3f-grants-committee) members. From bb2408ea1d82e15cd706cdc854a1e64281de6bc1 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Mon, 6 Feb 2023 13:01:14 -0500 Subject: [PATCH 115/578] Update suggesting.md (#1516) --- docs/suggesting.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/suggesting.md b/docs/suggesting.md index f5fa3c0d74b..90a4f0c934d 100644 --- a/docs/suggesting.md +++ b/docs/suggesting.md @@ -20,5 +20,5 @@ Ideas generally have better chances of being implemented if they're presented in 3. Name the file after your idea: `project_name.md`. 4. Fill out the template with the project details. Please include as many details as possible. 5. Once you're done, create a pull request in **our** main [Grants-Program repository](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/README.md). The pull request should only contain _one new file_—the Markdown file you created from the template. -6. You will see the same template as for creating an application. Please replace it with [the RFP PR template](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/suggestion-template.md). +6. You will see the same template as for creating an application. Please replace it with [the RFP PR template](https://github.com/w3f/Grants-Program/blob/master/.github/PULL_REQUEST_TEMPLATE/rfp_pr_template.md). 7. The RFP will be accepted and merged as soon as it receives three approvals from [W3F Grants Committee](./Introduction/team.md#w3f-grants-committee) members. From 63a225b45ca1c87b24012208c2a5b8252f1a836e Mon Sep 17 00:00:00 2001 From: Nabil Abdellaoui Date: Tue, 7 Feb 2023 03:29:43 -0500 Subject: [PATCH 116/578] Anagolay Project Idinayale Completed (#1514) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index d198453a116..c463c896b6a 100644 --- a/applications/index.md +++ b/applications/index.md @@ -544,7 +544,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [727.ventures](https://727.ventures/) | [Sol2Ink Phase 2](typechain-polkadot-follow-up.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | | [walt.id](https://walt.id/) | [NFT infrastructure](walt-id_nft-infra.md) | [GitHub](https://github.com/walt-id) | ☐ | ☐ | ☐ | | [SydTek](https://sydtek.ai/) | [Digital Inheritance in Web3: A Case Study of Soulbound Tokens and Social Recovery Pallets](SydTek.md) | [GitHub](https://github.com/jgophd/Developed-Materials-and-Raw-Data) | ☐ | ☒ | ☐ | -| [Anagolay](https://anagolay.network/) | [Multi-token community contributions for verified creators](anagolay-project-idiyanale-multi-token-community-contributions-for-verified-creators.md) | [GitHub](https://github.com/anagolay) | ☐ | ☒ | ☐ | +| [Anagolay](https://anagolay.network/) | [Multi-token community contributions for verified creators](anagolay-project-idiyanale-multi-token-community-contributions-for-verified-creators.md) | [GitHub](https://github.com/anagolay) | ☐ | ☒ | ☒ | | [Ink Contracts Wizard Team](https://github.com/amankumar1008/contracts-wizard) | [Ink Smart Contract Wizard](ink-smart-contract-wizard.md) | [GitHub](https://github.com/amankumar1008/contracts-wizard) | ☐ | ☒ | ☒ | | [TDSoftware](https://www.tdsoftware.de/) | [Substrate IPFS Utilities](ipfs_utilities.md) | [GitHub](https://github.com/TDSoftware) | ☐ | ☐ | ☐ | | [Ink Boxes Team](https://github.com/nerdsince98) | [Ink Boxes](ink-boxes.md) | [GitHub](https://github.com/avirajkhare00/ink-boxes/) | ☐ | ☒ | ☒ | From 9ff6073d6cc991b20e1663e7067149890621eb13 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 7 Feb 2023 09:56:10 +0100 Subject: [PATCH 117/578] Update rfps.md Add treasury funding as an option for RFPs --- docs/rfps.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/rfps.md b/docs/rfps.md index 5c676404a5a..7a947c1b4ae 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -12,9 +12,9 @@ title: Requests for Proposals ## :grey_question: What is an RFP? -An RFP (Request for Proposals) is a declaration of interest for others to submit a grant application regarding a specific project. They usually revolve around issues that the author (often someone from our team, but [anyone can suggest one](suggesting.md)) deems useful and missing or unsolved in our ecosystem. +An RFP (Request for Proposals) is a declaration of interest for others to submit a grant or a treasury application regarding a specific project. They usually revolve around issues that the author (often someone from our team, but [anyone can suggest one](suggesting.md)) deems useful and missing or unsolved in our ecosystem. -If you find an open RFP here that you think you can address, feel free to [submit a grant application](process.md). There is a [section in our application template](https://github.com/w3f/Grants-Program/blob/master/applications/application-template.md#project-overview-page_facing_up) where you can reference the RFP you are addressing. +If you find an open RFP here that you think you can address, feel free to [submit a grant application](process.md). There is a [section in our application template](https://github.com/w3f/Grants-Program/blob/master/applications/application-template.md#project-overview-page_facing_up) where you can reference the RFP you are addressing. Alternatively, you can always submit an on-chain treasury application for an RFP. ## 📜 List of RFPs From a0bf6bef92104a1272b5800294ab9f9c618978dd Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Tue, 7 Feb 2023 06:06:34 -0800 Subject: [PATCH 118/578] Update check_application_document.yml (#1518) Minor fix --- .github/workflows/check_application_document.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check_application_document.yml b/.github/workflows/check_application_document.yml index 7d82a6619da..155b519d6ea 100644 --- a/.github/workflows/check_application_document.yml +++ b/.github/workflows/check_application_document.yml @@ -3,7 +3,7 @@ name: Check application document on: workflow_dispatch: pull_request: - types: [opened] + types: [opened, edited] jobs: get_filename: From 334dc613e05d910cdef70f9a0cc2426c4731e454 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Wed, 8 Feb 2023 06:34:26 -0800 Subject: [PATCH 119/578] Update ArtZero_InkWhale.md (#1520) Fix formatting --- applications/ArtZero_InkWhale.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/applications/ArtZero_InkWhale.md b/applications/ArtZero_InkWhale.md index d69a849fe9a..7bcd22fc528 100644 --- a/applications/ArtZero_InkWhale.md +++ b/applications/ArtZero_InkWhale.md @@ -1,9 +1,8 @@ -# W3F Grant Proposal +# ArtZero & InkWhale -- **Project Name:** ArtZero & InkWhale - **Team Name:** ArtZero - **Payment Address:** 1scixS3ofLuBN8XEQQdSjMQaLtvvbcJiQAqpnaov8xopX78 -- **[Level]:** 2 +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 ## Project Overview :page_facing_up: From 7499f801ab80651215ed4c623a082f12b5950c99 Mon Sep 17 00:00:00 2001 From: Joshy Orndorff Date: Wed, 8 Feb 2023 09:35:07 -0500 Subject: [PATCH 120/578] Tuxedo application (#1517) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * start the tuxedo application Correct reference to dag chains ecosystem fit Development status First draft milestones future plans No referrer Additional info Andrews background bio Not competing with frame spelling introduce concept of peeking Mention Shawn's support Shorten the timeline (we have more availability than previously expected Settle on Apache license restructure milestones based on informal feedback Follow-up to b8a7df51 grammar switch to dai * Update applications/tuxedo.md Co-authored-by: Sebastian Müller * Details about CLI wallet tech stack * Update applications/tuxedo.md Co-authored-by: Matteo Casonato --------- Co-authored-by: Sebastian Müller Co-authored-by: Matteo Casonato --- applications/tuxedo.md | 185 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 185 insertions(+) create mode 100644 applications/tuxedo.md diff --git a/applications/tuxedo.md b/applications/tuxedo.md new file mode 100644 index 00000000000..bc0664d8950 --- /dev/null +++ b/applications/tuxedo.md @@ -0,0 +1,185 @@ +# Tuxedo + +- **Team Name:** Off-Narrative Labs +- **Payment Address:** 0x5a335908df9D2C47304338E3b744579Ed7C6a64d (DAI) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 :baby_chick: + +## Project Overview :page_facing_up: + +Develop Substrate runtimes based on the UTXO model. + +### Overview + +Tuxedo is a framework for developing Substrate runtimes based on the Unspent Transaction Output (UTXO) model. The letters utxo are contained in the word tuxedo, hence the name. + +In the broader blockchain space, there are essentially two models for creating state machines, or runtimes, as they are known in the Substrate ecosystem. Those two models are the **Account System** as seen in Ethereum, Polkadot, and others, and the **UTXO System** as seen in Bitcoin, Monero, Cardano, and others. Currently the defacto way to write Substrate runtimes is with FRAME, which is based on the account system, and any project wishing to build on the utxo system is left to write a runtime from scratch or find a home in another ecosystem. Tuxedo would be a couterpart to FRAME based on UTXOs rather than accounts. + +Tuxedo would make the UTXO model more visible and accessible in the Substrate ecosystem and begin to create a diversity of runtime frameworks in addition to FRAME, a trend that we hope will continue beyond Tuxedo itself. + +### Project Details + +The primary advantage of UTXOs is that they are highly parallelizable. This fits well in Polkadot's multichain ecosystem where parachains execute and communicate asynchronously, and will be an even bigger advantage if (hopefully when) DAG based chains become popular, a trend that is already kicked off with projects like Aleph Zero, and many others outside the Polkadot ecosystem, including Hedera Hashgraph, Nano, and Casper Labs. + +The UTXO data model is relatively well established by Bitcoin as well as research from IOHK in their [Abstract Model](https://eprint.iacr.org/2018/469.pdf) and [Extended UTXO Model](https://files.zotero.net/eyJleHBpcmVzIjoxNjc1MjAwMTAwLCJoYXNoIjoiYTVhYmY4NjdiY2E2YzdkNTNjODkwNWNmZDZhYmM5MjAiLCJjb250ZW50VHlwZSI6ImFwcGxpY2F0aW9uXC9wZGYiLCJjaGFyc2V0IjoiIiwiZmlsZW5hbWUiOiJDaGFrcmF2YXJ0eSBldCBhbC4gLSAyMDIwIC0gVGhlIEV4dGVuZGVkIFVUWE8gTW9kZWwucGRmIn0%3D/ddc74b205ca4890fe1d87770bee15dd5a82bfed1ad8f84217cbf407686958498/Chakravarty%20et%20al.%20-%202020%20-%20The%20Extended%20UTXO%20Model.pdf). Our primary tasks would be to implement this in Rust and expose a standard API for chain developers to build on. This is analogous to the API exposed by FRAME System and the Pallets built on top. + +Our core data types follow similarly, to the IOHK research cited above. The primary differences are that we do not assume a native cryptocurrency and rely on Tuxedo **Pieces** (analogous to FRAME Pallets) to provide the validation logic, rather than the UTXOs themselves. + +```rust +/// A UTXO transaction specifies some inputs to be consumed, and some new outputs to be created. +struct Transaction { + /// The inputs refer to currently existing unspent outputs that will be consumed by this transaction + inputs: BTreeSet, + /// Similar to inputs, Peeks refer to currently existing utxos, but they will be read only, and not consumed + peeks: BTreeSet, + /// The new outputs to be created by this transaction. + outputs: Vec, +} + +/// A single output of a transaction which has an owner and some associated data +struct Output { + /// The address that owns this output. Based on either a public key or a Tuxedo Piece + owner: Address, + /// The data associated with this output. In the simplest case, this will be a token balance, but could be arbitrarily rich state. + data: Vec, +} + +/// A single input references the output to be consumed or peeked at and provides some witness data, possibly a signature. +struct Input { + /// A previously created output that will be consumed by the transaction containing this input. + output: OutputId, + /// A witness proving that the output can be consumed by this input. In many cases including that of a basic cryptocurrency, this will be a digital signature. + redeemer: Vec, +} +``` + +The core of the API exposed developers who create Tuxedo Pieces, will roughly follow this trait. We expect this will have to get more specific as our development shows us what we haven;t yet considered. + +```rust +/// The API of a Tuxedo Piece +trait TuxedoPiece { + + /// The type of data stored in Outputs associated with this Piece + type Data; + + /// The validation function to determine whether a given input can be consumed. + fn validate(transaction: Transaction, input: Input) -> bool; +} +``` + +This grant does not strive to create the entire rich ecosystem of Tuxedo pieces that we hope to eventually be developed on top of Tuxedo. Rather it strives to create the core of the Tuxedo system and a few of the most important and exemplary pieces. Specifically, we strive to develop the analogs to FRAME Executive, FRAME System, Pallet Balances, and Pallet Transaction Payment. + +### Ecosystem Fit + +Tuxedo is a framework for writing Substrate runtimes. Substrate is the toolkit for building virtually all parachain nodes as well as many standalone blockchains. As such, Tuxedo provides a richer set of options to runtime developers, and hopes to attract teams to the Substrate / Polkadot ecosystem who may have otherwise gone elsewhere. + +The primary users of Tuxedo will be parachain and runtime developers who will use Tuxedo directly to structure their runtimes. Of course, the user base will trickle downstream as well to users of those parachains that choose to build with Tuxedo. However, chain users will use Tuxedo only indirectly. + +There are no projects like this in the Substrate ecosystem, although they do exist in the broader blockchain space; Cardano being the most notable example. + +While it fulfills a similar role, Tuxedo is not intended to compete with FRAME, but rather to compliment it, by welcoming projects that fit naturally with the utxo model into the Substrate ecosystem, as FRAME does for projects that fit the accounts model. + +## Team :busts_in_silhouette: + +### Team members + +- Joshy Orndorff https://github.com/JoshOrndorff +- Andrew Burger https://github.com/coax1d + +### Contact + +- **Contact Name:** Joshy Orndorff +- **Contact Email:** joshyorndorff at proton dot me +- **Registered Address:** The address you'll use in the invoices + +### Team's experience + +Joshy entered the Substrate ecosystem in 2019 as part of the Substrate Developer Hub team. There he created and hosted the weekly Substrate Seminar, and contributed significantly to the Substrate Recipes. In 2020, he moved to the Moonbeam team where he was a core developer. While at Moonbeam, Joshy wrote the [Nimbus consensus engine](https://github.com/PureStake/nimbus/) which is used in several production parachains, and helped pioneer the technique whereby EVM contracts can interact with native Substrate pallets. In 2022, Joshy began contributing to the Polkadot Blockchain Academy, teaching in both Cambridge and Buenos Aires. + +Andrew entered the Substrate ecosystem from a curiosity point of view back in June 2021. From there he learned blockchain and Substrate via documents and tinkering in his off time after work. In December 2021 received a fulltime job for a venture builder to build a parachain to eventually connect to Polkadot. Andrew graduated from the first Polkadot Blockchain Academy cohort in 2022 in Cambridge. After Cambridge Andrew moved on from the venture builder to dive into education in the Polkadot Ecosystem by instructing and developing course curriculum for the Polkadot Devcamp #2 online. For Andrew's current work he is contracting as an instructor at the Polkadot Blockchain Academy for Parity Technologies lecturing and creating educational content for Blockchain Fundamentals(Specifically lecturing on UTXO vs Accounts models), Substrate, and XCM modules. Also Andrew is doing Rust Core development work for the Integritee Parachain. Andrew shares a passion for allowing blockchain developers the ability to build upon the UTXO model in Substrate. + + +Joshy and Andrew met in Cambridge in 2022 at the first Polkadot Blockchain Academy. There Andrew chose the Frameless UTXO Project cited above as his final project. + + +## Development Status :open_book: + +The team has done previous work on this topic: +* Joshy [maintained](https://github.com/JoshOrndorff/utxo-workshop/tree/joshy-update-deps-may-2022) the Substrate UTXO Workshop code as part of the Substrate Developer Hub team, and has continued to maintain it out of personal interest even years after leaving that team. +* Andrew [ported](https://github.com/coax1d/utxo-frameless/) this code to work _without FRAME_ as part of the Polkadot Blockchain Academy. + +The development so far has focused specifically on the crypto_currency_ use case, whereas this grant proposes to generalize the code to be a framework for broader runtime logic development. + +As teaching staff at the Polkadot Blockchain Academy in Buenos Aires, Joshy and Andrew found themselves, on two occasions, in conversations with other teaching staff in which it was noted that a diversity of runtime development frameworks would make the Substrate ecosystem stronger and attractive to a broader development base. This idea was supported by Kian Paimani and Shawn Tabrizi among others. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 9 weeks +- **Full-Time Equivalent (FTE):** 1.5 FTE (Joshy and Andrew will both work roughly three quarters time on this) +- **Total Costs:** $30,000 (USD) + +### Milestone 1 — Tuxedo Core and Cryptocurrency Piece + +- **Estimated duration:** 3 weeks +- **FTE:** 1.5 +- **Costs:** 10,000 USD + +Split the existing FRAMEless UTXO project into the generic Tuxedo core, and the first Tuxedo piece which represents a cryptocurrency. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can spin up the example node and transfer tokens | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile that can be used to test all the functionality delivered with this milestone. | +| 1. | Tuxedo Core | We will create the core of the Tuxedo System, analogous to FRAME Executive and FRAME System | +| 2. | Token Piece | We will create the first Tuxedo piece that serves as a cryptocurrency, analogous to Pallet Balances | +| 3. | Tuxedo Node Template | We will create a Substrate node with the runtime built with Tuxedo and including the Token piece. Together this will represent a bitcoin-like token (not PoW though, only the token logic is bitcoin-like) | + +### Milestone 2 — Wallet and Multisig + +- **Estimated Duration:** 3 weeks +- **FTE:** 1.5 +- **Costs:** 10,000 USD + +Create the second Tuxedo piece, and a user-facing wallet + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can spin up the example node and transfer tokens | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile that can be used to test all the functionality delivered with this milestone. | +| 1. | User Wallet | We will create a CLI wallet that users can use to track their tokens in a Tuxedo-based cryptocurrency. This makes the example node actually useable by common users who are curious to explore but not yet ready to dig into the code. The wallet will be written in Rust and communicate with Substrates jsonrpsee endpoint. | +| 2. | Multisig Piece | We will expand the ecosystem of Tuxedo pieces by creating a multisig wallet. In addition to making the Tuxedo ecosystem a bit more complete, this also demonstrates to future piece developers how to couple pieces. | + +### Milestone 3 — Full Docs and Tutorial + +- **Estimated Duration:** 3 weeks +- **FTE:** 1.5 +- **Costs:** 10,000 USD + +Fully document the Tuxedo paradigm, existing pieces, CLI wallet, and provide a tutorial for runtime developers + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can spin up the example node and transfer tokens | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile that can be used to test all the functionality delivered with this milestone. | +| **0e.** | Full written and Video Tutorial | With a node template, piece template, and user-facing wallet now complete, we can get serious about user and developer documentation. We will create a full written tutorial and video walkthough that covers how to build and run the Tuxedo Node Template, and send tokens around with the wallet. We will then dive into how to add the multisig piece to your runtime, and how to develop your own simple piece starting from the piece template. | +| 1. | Piece Template | We will create the template Tuxedo Piece analogous to the FRAME pallet template. This will allow runtime developers to have a concrete starting place when building their own utxo based Substrate runtimes. | + + +## Future Plans + +Being a framework for runtime development, we plan to continue developing the ecosystem of Tuxedo Pieces including Pieces for NFTs, Governance Mechanisms, Proof of Stake, and even smart contracts. + +Joshy has long had a vision of a UTXO based smart contract language based on the pi calculus. With Tuxedo core complete, it will be possible to develop such a contracting platform. + +The UTXO model allows concurrent processing of unrelated transactions (those that do not compete to consume any inputs). It would be exciting to extend Substrate itself to support a DAG structure rather than a linear chain to take advantage of this ability, although the feasibility of this extension has not yet been studied. + +## Additional Information :heavy_plus_sign: + +The team has been in the Substrate ecosystem for a long time, so we have heard of the grants program in many ways. From colleagues, grant recipients speaking highly the program, and grant recipients looking for help understanding Substrate. From 6963e04b3b95bc99ce34e28e1bdd928cb20ce16f Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 8 Feb 2023 15:38:29 +0100 Subject: [PATCH 121/578] Update index.md Tuxedo --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index c463c896b6a..6997c63bc8c 100644 --- a/applications/index.md +++ b/applications/index.md @@ -602,3 +602,4 @@ Use this page for an overview of all public grants and their status. Use the sid | [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☐ | ☐ | | [Zeeve](https://www.zeeve.io) | [Parachain deployment zoombienet testing automation](Zeeve_Parachain_deployment_zoombienet_testing_automation.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | | [Polytope Labs](https://research.polytope.technology/) | [Trie Verifier Implementation](solidity-trie-verifier.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | +| Off-Narrative Labs | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☐ | ☐ | From 088ec0a853f2dc5825a74ea704e930c01854da82 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Thu, 9 Feb 2023 02:15:57 -0500 Subject: [PATCH 122/578] Update index.md (#1521) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 6997c63bc8c..fc215ab95b6 100644 --- a/applications/index.md +++ b/applications/index.md @@ -569,7 +569,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [LimeChain](https://limechain.tech/) | [Research feasibility of Polkadot Host in Java](research-feasibiliy-java-host.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☐ | ☐ | | [Blaize.tech](https://blaize.tech/) | [Unified deployment for the collator node](unified_collator_node_deployment.md) | [GitHub](https://github.com/babebort-blaize) | ☐ | ☐ | ☐ | | [Odyssey B.V.](https://odyssey.org/) | [Momentum, an open source, metaverse for digital societies](odyssey_momentum.md) | [GitHub](https://github.com/momentum-xyz) | ☐ | ☐ | ☐ | -| [Bela Supernova](https://bsn.si/) | [Rubeus Keeper Stage 2](Rubeus_keeper_st2.md) | [GitHub](https://github.com/bsn-si) | ☐ | ☐ | ☐ | +| [Bela Supernova](https://bsn.si/) | [Rubeus Keeper Stage 2](Rubeus_keeper_st2.md) | [GitHub](https://github.com/bsn-si) | ☐ | ☒ | ☐ | | [Coong Team](https://coong.xyz/) | [Coong Wallet](coong_wallet.md) | [GitHub](https://github.com/CoongCrafts) | ☐ | ☐ | ☐ | | OCamlMyCaml | [PrivaDEX: Cross-Chain DEX Aggregator MVP](PrivaDEX_aggregator.md) | [GitHub](https://github.com/kapilsinha/privadex) | ☐ | ☐ | ☐ | | [Aband-Network](https://a.band/) | [Substrate Parachain PoS Template](substrate-parachain-PoS-template.md) | [GitHub](https://github.com/Aband-Network/substrate-parachain-PoS-template) | ☐ | ☐ | ☐ | From 60e00eecb84673af73938e012facdbe88917fbed Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Thu, 9 Feb 2023 02:26:03 -0800 Subject: [PATCH 123/578] Fix maintenance format (#1522) - edit template (added Level) - fix formatting of existent applications --- maintenance/Substratesnap_Maintenance.md | 7 +------ maintenance/maintenance-template.md | 4 ++-- maintenance/wasm-opt-for-rust.md | 4 ++-- 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/maintenance/Substratesnap_Maintenance.md b/maintenance/Substratesnap_Maintenance.md index a2dfcb001d5..2757bd78e29 100644 --- a/maintenance/Substratesnap_Maintenance.md +++ b/maintenance/Substratesnap_Maintenance.md @@ -1,12 +1,7 @@ # SubstrateSnap Maintainance Grant Proposal - - -- **Project Name:** SubstrateSnap - **Team Name:** ChainSafe Systems -- **Payment Details:** DAI (ERC20) - **Address**: 0x85D81Ab61Fe16CDcaeF2Ca556ED4577A51b9b07C (DAI) -- Network +- **Payment Address:** 0x85D81Ab61Fe16CDcaeF2Ca556ED4577A51b9b07C (DAI ERC20) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 diff --git a/maintenance/maintenance-template.md b/maintenance/maintenance-template.md index feeec25304c..742bfd8b913 100644 --- a/maintenance/maintenance-template.md +++ b/maintenance/maintenance-template.md @@ -1,12 +1,12 @@ -# W3F Maintenance Grant Proposal +# Project Code Name (e.g. JsonRPC Tools Maintenance) > This document will be part of the terms and conditions of your agreement and therefore needs to contain all the required information about the project. Don't remove any of the mandatory parts presented in bold letters or as headlines! Lines starting with a `>` (such as this one) can be removed. > > See the [Maintenance Grants Process](https://github.com/w3f/Grants-Program#hammer_and_wrench-maintenance-grants) on how to submit a proposal. -- **Project Code Name:** Code name of the project (e.g. JsonRPC Tools Maintenance) - **Team Name:** Legal name of your team (e.g. JsonCorp) - **Payment Address:** BTC, Ethereum (USDC/DAI) or Polkadot/Kusama (aUSD/USDT) payment address. Please also specify the currency. (e.g. 0x8920... (DAI)) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1, 2 or 3 > ⚠️ *The combination of your GitHub account submitting the application and the payment address above will be your unique identifier during the program. Please keep them safe.* diff --git a/maintenance/wasm-opt-for-rust.md b/maintenance/wasm-opt-for-rust.md index 4998df353bf..2e85b3a7b77 100644 --- a/maintenance/wasm-opt-for-rust.md +++ b/maintenance/wasm-opt-for-rust.md @@ -1,8 +1,8 @@ -# W3F Maintenance Grant Proposal +# `wasm-opt` for Rust Maintenance -- **Project Code Name:** `wasm-opt` for Rust Maintenance - **Team Name:** Common Orbit LLC - **Payment Address:** (Ethereum DAI) 0x2de31E52E24Df0588C64B27657D4F75e5462adEf +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 3 ## Project Overview :page_facing_up: From 62b0fb481f28d72a1bab505e6e71af18969a6713 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Thu, 9 Feb 2023 02:31:40 -0800 Subject: [PATCH 124/578] Fix applications format (#1523) (remove **Project Name**) --- applications/Maki.md | 6 ------ applications/MangoSale_Protocol.md | 6 +----- applications/MeProtocol.md | 3 +-- applications/Zombienet-Explorer.md | 3 +-- applications/decentralized_invoice.md | 3 +-- applications/ink-pallet-benchmarking.md | 4 ++-- applications/ipfs_utilities.md | 3 +-- applications/typechain-polkadot-follow-up-2.md | 5 +---- applications/typechain-polkadot-follow-up.md | 7 ++----- 9 files changed, 10 insertions(+), 30 deletions(-) diff --git a/applications/Maki.md b/applications/Maki.md index 0ef7094a179..97771db5e8f 100644 --- a/applications/Maki.md +++ b/applications/Maki.md @@ -1,11 +1,5 @@ -<<<<<<< HEAD -# W3F Grant Proposal - -- **Project Name:** Maki -======= # Maki ->>>>>>> origin/master - **Team Name:** Cyril Carlier (Individual) - **Payment Address:** 0x7e575d2140aa4b723ac2014d5627330a7ed514d4 (ERC-20 USDC) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 diff --git a/applications/MangoSale_Protocol.md b/applications/MangoSale_Protocol.md index 62c0fae7466..6619478bfe4 100644 --- a/applications/MangoSale_Protocol.md +++ b/applications/MangoSale_Protocol.md @@ -1,14 +1,10 @@ -# W3F Grant Proposal +# MangoSale Protocol - - -- **Project Name:** MangoSale Protocol - **Team Name:** MangoBOX labs - **Payment Address:** 0x33e69715988126eB3653bFAfd338320BE9A10cd0(USDC)) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 - ## Project Overview :page_facing_up: https://github.com/w3f/Grant-Milestone-Delivery/pull/612 diff --git a/applications/MeProtocol.md b/applications/MeProtocol.md index 34238704627..d171ade6ce0 100644 --- a/applications/MeProtocol.md +++ b/applications/MeProtocol.md @@ -1,6 +1,5 @@ -# W3F Grant Proposal +# Me Protocol -- **Project Name:** Me Protocol - **Team Name:** My AI - **Payment Address:** Ethereum: 0xB35da2E7380a2580Acdc0ca5DEa9e2B152155e84 (USDC) - **Level:** 2 diff --git a/applications/Zombienet-Explorer.md b/applications/Zombienet-Explorer.md index c9033a3b3e4..e36e4cb279b 100644 --- a/applications/Zombienet-Explorer.md +++ b/applications/Zombienet-Explorer.md @@ -1,6 +1,5 @@ -# W3F Grant Proposal +# Zombienet Explorer: Multi-Chain Substrate Block Explorer (based on Polkaholic.io) -- **Project Name:** Zombienet Explorer: Multi-Chain Substrate Block Explorer (based on Polkaholic.io) - **Team Name:** Colorful Notion - **Payment Address:** Polkadot 5D58imQFuMXDTknQS2D14gDU2duiUC18MGxDnTKajjJS9F3g [USDT] - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 diff --git a/applications/decentralized_invoice.md b/applications/decentralized_invoice.md index 0c6a44a2ecb..7c0ee56b783 100644 --- a/applications/decentralized_invoice.md +++ b/applications/decentralized_invoice.md @@ -1,6 +1,5 @@ -# W3F Grant Proposal +# Decentralized Invoice -- **Project Name:** Decentralized Invoice - **Team Name:** TwinP - **Payment Address:** 0xd042e53e22e9f941ceba02f4adb9d1b32ef43675 - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 diff --git a/applications/ink-pallet-benchmarking.md b/applications/ink-pallet-benchmarking.md index f7581816f99..363d13b1aea 100644 --- a/applications/ink-pallet-benchmarking.md +++ b/applications/ink-pallet-benchmarking.md @@ -1,5 +1,5 @@ -# W3F Grant Proposal -- **Project Name:** ink!/pallet/solidity performance benchmarking +# ink!/pallet/solidity performance benchmarking + - **Team Name:** Talentica Software - **Payment Address:** - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 diff --git a/applications/ipfs_utilities.md b/applications/ipfs_utilities.md index 695c943a15e..e92f18c73ef 100644 --- a/applications/ipfs_utilities.md +++ b/applications/ipfs_utilities.md @@ -1,6 +1,5 @@ -# W3F Grant Proposal +# Substrate IPFS Utilities -- **Project Name:** Substrate IPFS Utilities - **Team Name:** [TDSoftware](https://www.tdsoftware.de/) - **Payment Address:** 0x8Db0972d9F40357526B879A002d60CCf6B4a8882 - **Level:** 3 diff --git a/applications/typechain-polkadot-follow-up-2.md b/applications/typechain-polkadot-follow-up-2.md index 1352a75401b..a363183eb77 100644 --- a/applications/typechain-polkadot-follow-up-2.md +++ b/applications/typechain-polkadot-follow-up-2.md @@ -1,8 +1,5 @@ # Typechain-Polkadot Follow-up-2 -# [Typechain-Polkadot](https://github.com/727-Ventures/typechain-polkadot) - -- **Project Name:** [Typechain-Polkadot](https://github.com/727-Ventures/typechain-polkadot) - **Team Name:** [727.ventures](https://github.com/727-Ventures) - **Payment Address:** ERC 20 (DAI): 0x352F779203202c99699CdA8cc95adF06CcC8abEf @@ -20,7 +17,7 @@ Information about how to interact with a contract (methods names, arguments & re Interaction with blockchain is done with the polkadot.js library, which only has abstract definitions for the contract in use. Thus users' code cannot be typesafe. And Typechain-Polkadot can change it. -This Grant is a follow-up to the previous grants, [first grant](https://github.com/w3f/Grants-Program/blob/master/applications/typechain-polkadot.md) and [second grant](https://github.com/w3f/Grants-Program/blob/master/applications/typechain-polkadot-follow-up.md). +This Grant is a follow-up to the previous grants, [Typechain-Polkadot](https://github.com/w3f/Grants-Program/blob/master/applications/typechain-polkadot.md) and [Typechain-Polkadot Follow-up](https://github.com/w3f/Grants-Program/blob/master/applications/typechain-polkadot-follow-up.md). In this grant, we aim to integrate event subscription, allow users to create their plugins and expand the tool into more packages so the users can alo use different parts of the application alone if needed. ### Usage of Typechain-compiler diff --git a/applications/typechain-polkadot-follow-up.md b/applications/typechain-polkadot-follow-up.md index f18544941d9..61e0e6f7cc5 100644 --- a/applications/typechain-polkadot-follow-up.md +++ b/applications/typechain-polkadot-follow-up.md @@ -1,8 +1,5 @@ -# Typechain grant #2 +# Typechain-Polkadot Follow-up -# [Typechain-Polkadot](https://github.com/Supercolony-net/typechain-polkadot) - -- **Project Name:** [Typechain-Polkadot](https://github.com/727-Ventures/typechain-polkadot) - **Team Name:** [727.ventures](https://github.com/727-Ventures) - **Payment Address:** ERC 20 (DAI): 0x352F779203202c99699CdA8cc95adF06CcC8abEf @@ -20,7 +17,7 @@ Information about how to interact with a contract (methods names, arguments & re Interaction with blockchain is done with the polkadot.js library, which only has abstract definitions for the contract in use. Thus users' code cannot be typesafe. And Typechain-Polkadot can change it. -This Grant is a follow-up to the previous grant, [W3F Grant Proposal](https://github.com/w3f/Grants-Program/pull/992).. +This Grant is a follow-up to the previous grant, [Typechain-Polkadot](https://github.com/w3f/Grants-Program/pull/992).. We have decided to add a new tool that will help developers easily integrate typechain to their projects. It will also be compatible with Redspot (if redspot was used for compiler projects, you could just leave most of the things). We have some updates on our team, so check them out. And also, we did more work on Milestone 1 than we thought, so now it'll be easier to add new features to the project, so we considered to reestimate our time. From 5ca21bc605fe365fdc22dfdf82f86b00a443f189 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 9 Feb 2023 14:57:59 +0100 Subject: [PATCH 125/578] Update index.md Aband PoS template completed --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index fc215ab95b6..0445ff2799b 100644 --- a/applications/index.md +++ b/applications/index.md @@ -572,7 +572,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Bela Supernova](https://bsn.si/) | [Rubeus Keeper Stage 2](Rubeus_keeper_st2.md) | [GitHub](https://github.com/bsn-si) | ☐ | ☒ | ☐ | | [Coong Team](https://coong.xyz/) | [Coong Wallet](coong_wallet.md) | [GitHub](https://github.com/CoongCrafts) | ☐ | ☐ | ☐ | | OCamlMyCaml | [PrivaDEX: Cross-Chain DEX Aggregator MVP](PrivaDEX_aggregator.md) | [GitHub](https://github.com/kapilsinha/privadex) | ☐ | ☐ | ☐ | -| [Aband-Network](https://a.band/) | [Substrate Parachain PoS Template](substrate-parachain-PoS-template.md) | [GitHub](https://github.com/Aband-Network/substrate-parachain-PoS-template) | ☐ | ☐ | ☐ | +| [Aband-Network](https://a.band/) | [Substrate Parachain PoS Template](substrate-parachain-PoS-template.md) | [GitHub](https://github.com/Aband-Network/substrate-parachain-PoS-template) | ☐ | ☒ | ☒ | | [MangoBOX labs](https://www.mangobox.xyz/) | [MangoSale Protocol](MangoSale_Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☐ | ☐ | ### 🏄‍♀️ Wave 17 - First Quarter 2023 From f7b8bb8ece152e35832c884405f9bec6ff3ca193 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Thu, 9 Feb 2023 11:47:00 -0500 Subject: [PATCH 126/578] Update Web3Box.md (#1527) --- applications/Web3Box.md | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/applications/Web3Box.md b/applications/Web3Box.md index cb1ade9911a..234cf589d18 100644 --- a/applications/Web3Box.md +++ b/applications/Web3Box.md @@ -39,9 +39,9 @@ Web3Box Dashboad Preview ### Contact -- Contact Name: Andrew -- Contact Email: andrew@web3box.cc -- Website: https://web3box.cc +- **Contact Name:** Andrew +- **Contact Email:** andrew@web3box.cc +- **Website:** https://web3box.cc ### Legal Structure @@ -67,6 +67,12 @@ Web3Box has confirmed the overall architecture. And now, Web3Box is confirming t ## Development Roadmap +### Overview + +- **Total Estimated Duration:** 6 weeks +- **Full-Time Equivalent (FTE):** 2 +- **Total Costs:** 10,000 USD + ### Milestone 1 - Dashboard / Multi-chain Wallet - **Estimated duration:** 6 weeks @@ -100,4 +106,4 @@ Web3Box has confirmed the overall architecture. And now, Web3Box is confirming t ## Additional Information -**How did you hear about the Grants Program?** Twitter \ No newline at end of file +**How did you hear about the Grants Program?** Twitter From 131f99cc4bf2f47b90f3fba798767dfa00682e62 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Thu, 9 Feb 2023 08:47:31 -0800 Subject: [PATCH 127/578] Edit applications/index.md (#1526) * Add maintenance symlink for website * Update index.md Reorder Waves (desc) * Update index.md - Reordered waves - Added navigation menu --- applications/index.md | 1034 +++++++++++++++++++++-------------------- docs/maintenance | 1 + 2 files changed, 531 insertions(+), 504 deletions(-) create mode 120000 docs/maintenance diff --git a/applications/index.md b/applications/index.md index 0445ff2799b..370471641b5 100644 --- a/applications/index.md +++ b/applications/index.md @@ -11,259 +11,315 @@ Use this page for an overview of all public grants and their status. Use the sid > > Besides, **there is a clear difference between an application being accepted and the successful delivery of the respective project**, and only teams that have successfully delivered a milestone are allowed to make public announcements on the matter or to use our [badge](https://github.com/w3f/General-Grants-Program/blob/master/grants/grant-badge-guidelines.md). The badge can also never be used as a general endorsement for a team. Violations to this policy can be reported [here](mailto:grants@web3.foundation). -## 2019 +## Menu +- [2023](#2023): [17](#🏄‍♀️-wave-17---first-quarter-2023) +- [2022](#2022): [16](#🏄‍♀️-wave-16---fourth-quarter-2022), [15](#🏄‍♀️-wave-15---third-quarter-2022), [14](#🏄‍♀️-wave-14---second-quarter-2022), [13](#🏄‍♀️-wave-13---first-quarter-2022) +- [2021](#2021): [12](#🏄‍♀️-wave-12---fourth-quarter-2021), [11](#🏄‍♀️-wave-11---third-quarter-2021), [10](#🏄‍♀️-wave-10---second-quarter-2021), [9](#🏄‍♀️-wave-9---first-quarter-2021) +- [2020](#2020): [8](#🏄‍♀️-wave-8---fourth-quarter-2020), [7](#🏄‍♀️-wave-7---third-quarter-2020), [6](#🏄‍♀️-wave-6---second-quarter-2020), [5](#🏄‍♀️-wave-5---first-quarter-2020) +- [2019](#2019): [4](#🏄‍♀️-wave-4---fourth-quarter-2019), [3](#🏄‍♀️-wave-3---third-quarter-2019), [2](#🏄‍♀️-wave-2---second-quarter-2019), [1](#🏄‍♀️-wave-1---first-quarter-2019) -### 🏄‍♀️ Wave 1 - First Quarter 2019 +## 2023 -| Team | Project | Link | Terminated | First Delivery | Completed | -| :-------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------ | :-------------------------------------------------------------------------- | :--------- | :------------: | :-------: | -| [ChainSafe](https://chainsafe.io/) | Polkadot Runtime Environment in Go (via an RFP) | [GitHub](https://github.com/ChainSafeSystems/gossamer) | ☐ | ☒ | ☒ | -| [Soramitsu](https://soramitsu.co.jp/) | Polkadot Runtime Environment in C++ (via an RFP) | [GitHub](https://github.com/soramitsu/kagome) | ☐ | ☒ | ☒ | -| [WEB3SCAN](https://www.web3scan.com/) | Polkascan: Open Source Block Explorer | [GitHub](https://github.com/polkascan) | ☐ | ☒ | ☒ | -| [Polkawallet](https://polkawallet.io/) | [Mobile Wallet](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Polkawallet%20Team.md) | [GitHub](https://github.com/polkawallet-io/polkawallet-RN) | ☐ | ☒ | ☐ | -| [Validators](http://validators.com/) | Open Source Scalable Cluster | [GitHub](https://github.com/Validators) | ☐ | ☒ | ☒ | -| [BlockX Labs](http://blockxlabs.com/) | [Enzyme Browser extension wallet](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Enzyme.md) | [GitHub](https://github.com/blockxlabs/enzyme) | ☐ | ☒ | ☒ | -| [Speckle OS](https://www.speckleos.io/) | [Browser extension wallet](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/speckleos.md) | [GitHub](https://github.com/SpeckleOS/speckle-browser-extension) | ☐ | ☒ | ☒ | -| [Noise Explorer](https://symbolic.software/) | Rust code generator for formally verified (Noise/ cryptographic) handshakes | [Source Code](https://source.symbolic.software/noiseexplorer/noiseexplorer) | ☐ | ☒ | ☒ | -| [Protos](http://protosmanagement.com/) | Open Source Node Explorer | [GitHub](https://github.com/protos-research/polkadot-node-explorer) | ☒ | ☒ | ☐ | -| [Supercomputing Systems](https://www.scs.ch/) | [Substrate Transaction Privacy using Intel SGX](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/substrate_sgx_proposal.md) | [GitHub](https://github.com/scs/substraTEE) | ☐ | ☒ | ☒ | +### 🏄‍♀️ Wave 17 - First Quarter 2023 +[Menu🔝](#menu) -### 🏄‍♀️ Wave 2 - Second Quarter 2019 +| Team | Project | Link | Terminated | First Delivery | Completed | +| :----------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------- | :--------- | :------------: | :-------: | +| [Deep Ink Ventures GmbH](http://deep-ink.ventures/) | [GenesisDAO](GenesisDAO.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☐ | ☐ | +| [ArtZero](https://artzero.io/) | [ArtZero & InkWhale](ArtZero_InkWhale.md) | [GitHub](https://github.com/artzero-io) | ☐ | ☐ | ☐ | +| EightFish | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☐ | ☐ | +| [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☐ | ☐ | +| [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☐ | ☐ | +| [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | +| [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☐ | ☐ | +| [Blockcoders](http://blockcoders.io/) | [Cross-chain Wallet - XCW](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☐ | ☐ | +| [OmniBTC](https://omnibtc.finance/) | [Polkadot Smart Chain](psc.md) | [GitHub](https://github.com/OmniBTC/PSC) | ☐ | ☐ | ☐ | +| [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☐ | ☐ | +| [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | +| [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☐ | ☐ | ☐ | +| [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | +| [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☐ | ☐ | +| [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☐ | ☐ | +| [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | +| [Aviraj Khare](https://github.com/avirajkhare00) | [Polkasearch](polkasearch.md) | [GitHub](https://github.com/avirajkhare00) | ☐ | ☐ | ☐ | +| [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib Follow up](php-rpc-lib-follow-up.md) | [GitHub](https://github.com/gmajor-encrypt/php-substrate-api) | ☐ | ☐ | ☐ | +| [CoinFabrik](https://www.coinfabrik.com/) | [Scout - Security Analysis Tool](ScoutCoinFabrik.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | +| [727.ventures](https://727.ventures/) | [Typechain-Polkadot Follow-up-2](typechain-polkadot-follow-up-2.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☐ | ☐ | +| [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☐ | ☐ | +| [Zeeve](https://www.zeeve.io) | [Parachain deployment zoombienet testing automation](Zeeve_Parachain_deployment_zoombienet_testing_automation.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | +| [Polytope Labs](https://research.polytope.technology/) | [Trie Verifier Implementation](solidity-trie-verifier.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | +| Off-Narrative Labs | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☐ | ☐ | -| Team | Project | Link | Terminated | First Delivery | Completed | -| :-------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------ | :--------- | :------------: | :-------: | -| [Cap9](https://cap9.io/) | A low-level security protocol and framework for smart contracts | [GitHub](https://github.com/Daohub-io/cap9) | ☐ | ☒ | ☒ | -| Substrate Java API | Java version of our JS API | [GitHub](https://github.com/polkadot-java) | ☐ | ☒ | ☒ | -| [Starlog](https://pact.care/) | [A metadata chain for IPFS](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/starlog.md) | [GitHub](https://github.com/PACTCare/Starlog) | ☐ | ☒ | ☐ | -| [MixBytes](https://mixbytes.io/) | [Benchmarking tool for Substrate and Polkadot](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/MixBytes_Tank.md) | [GitHub](https://github.com/mixbytes/tank) | ☐ | ☒ | ☒ | -| [Gunclear](https://gunclear.io/) | [Private secure data storage solution using Plasma Cash in Substrate](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/GunClear.md) | [GitHub](https://github.com/GunClear) | ☒ | ☒ | ☐ | -| [ZeroChain](https://layerx.co.jp/) | [Zero knowledge transactions in Substrate](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/zerochain.md) | [GitHub](https://github.com/LayerXcom/zero-chain) | ☐ | ☒ | ☒ | -| [Robonomics](https://robonomics.network/) | [Substrate modules for controlling robots](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/robotics_in_polkadot.md) | [GitHub](https://github.com/airalab/substrate-node-robonomics) | ☐ | ☒ | ☐ | -| [Avado](https://ava.do/) | Polkadot node deployment with consumer hardware | [GitHub](https://github.com/AvadoDServer/AVADO-DNP-Polkadot-custom) | ☐ | ☒ | ☒ | -| [Stake Technologies](https://stake.co.jp/) | [Plasma modules for Substrate](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/plasm.md) | [GitHub](https://github.com/staketechnologies/Plasm) | ☐ | ☒ | ☒ | -| [HOPR](https://hopr.network/) | [Substrate integration with this P2P messaging protocol](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/messaging.md) | [GitHub](https://github.com/validitylabs/HOPR-PL-Substrate) | ☐ | ☒ | ☒ | -| [Mailchain](https://mailchain.xyz/) | a Multi-Blockchain Messaging Application | [GitHub](https://github.com/mailchain) | ☐ | ☒ | ☒ | -| [Usetech](http://usetech.com/blockchain.html) | [Polkadot C++ API](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/cpp_api.md) | [GitHub](https://github.com/usetech-llc/polkadot_api_cpp) | ☐ | ☒ | ☒ | +## 2022 -### 🏄‍♀️ Wave 3 - Third Quarter 2019 +### 🏄‍♀️ Wave 16 - Fourth Quarter 2022 +[Menu🔝](#menu) -| Team | Project | Link | Terminated | First Delivery | Completed | -| :------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | -| [Supercomputing systems](http://scs.ch/) | [Substrate Rust API client](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/substrate-api-client.md) | [GitHub](https://github.com/scs/substrate-api-client) | ☐ | ☒ | ☒ | -| [NGRAVE](https://ngrave.io/) | [Substrate Hardware Wallet Integration](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/ngrave_substrate_1.md) | | ☐ | ☒ | ☐ | -| [Caelum Labs](https://caelumlabs.com/) | [Decentralised identity modules](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Self%20Sovereign%20Identity%20layer%20as%20a%20Polkadot%20runtime.md) | | ☐ | ☒ | ☐ | -| [Runtime Verification](https://runtimeverification.com/) | Build executable K specifications of the SRML | [GitHub](https://github.com/runtimeverification/polkadot-verification) | ☐ | ☒ | ☒ | -| [Attic Lab](https://atticlab.net/) | [VS Code and Atom plugins](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/vscode_plugin.md) | [GitHub](https://github.com/everstake/VSCode-Atom-Plugin) | ☐ | ☒ | ☒ | -| [Dock](http://dock.io/) | Verifiable Claims | | ☐ | ☒ | ☐ | -| [Blockdaemon](https://blockdaemon.com/) | Polkadot Package Manager | [GitHub](https://github.com/Blockdaemon/bpm-sdk) | ☐ | ☒ | ☒ | -| [Zondax](http://zondax.ch/) | Ledger app for Polkadot | [GitHub](https://github.com/ZondaX/ledger-polkadot) | ☐ | ☒ | ☒ | -| [Geefu](https://www.geefu.net/) | [Vue JS components for Polkadot JS apps](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Vuejs_ui-components.md) | [GitHub](https://github.com/vue-polkadot) | ☐ | ☒ | ☒ | -| [Centrifuge](https://centrifuge.io/) | [Substrate Go API client](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/centrifuge_go_substrate_rpc_client.md) | [GitHub](http://github.com/centrifuge) | ☐ | ☒ | ☒ | -| [Litentry](https://www.litentry.com/) | [Identity modules and corresponding UIs](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/litentry.md) | [GitHub](https://github.com/litentry/litentry-runtime) | ☐ | ☒ | ☒ | -| [DappForce](http://dappforce.io) | [SubSocial - Substrate module and web UI for decentralized communities](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Subsocial.md) | [GitHub](https://github.com/dappforce/dappforce-subsocial) | ☐ | ☒ | ☒ | -| [Phala.Network](https://phala.network/) | [pLibra, Privacy Bridge between Polkadot and Libra chain](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/pLIBRA.md) | [GitHub](https://github.com/Phala-Network/) | ☐ | ☒ | ☐ | -| [Wiv](http://wiv.io/) | Supply chain modules and front-end UI | [GitHub](https://github.com/wivtech) | ☒ | ☐ | ☐ | +| Team | Project | Link | Terminated | First Delivery | Completed | +| :----------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------- | :--------- | :------------: | :-------: | +| [CrossChain Labs](https://github.com/CrossChainLabs) | [DotPulse](DotPulse.md) | [GitHub](https://github.com/CrossChainLabs) | ☐ | ☒ | ☒ | +| [Jett Hays](https://github.com/jettblu) | [Distributed Key Management](DistributedKeyManagement.md) | [GitHub](https://github.com/KryptikApp) | ☐ | ☒ | ☐ | +| [NexToken Technology](https://github.com/NexTokenTech) | [TREX - Timed Release Encryption Xing chains](TREX_Network.md) | [GitHub](https://github.com/NexTokenTech/TREX) | ☐ | ☐ | ☐ | +| [Blockcoders](http://blockcoders.io/) | [Cross-Consensus Messaging Software Development Kit](xcm-sdk.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☐ | +| [Keystone Wallet](https://keyst.one/) | [Polkadot Snap](PolkadotSnap.md) | [GitHub](https://github.com/KeystoneHQ) | ☐ | ☐ | ☐ | +| [LeetCoin](https://www.leetcoin.co/) | [LeetCoin](leetcoin.md) | [GitHub](https://github.com/nashhq/leetcoin) | ☐ | ☐ | ☐ | +| [727.ventures](https://727.ventures/) | [Sol2Ink Phase 2](typechain-polkadot-follow-up.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | +| [walt.id](https://walt.id/) | [NFT infrastructure](walt-id_nft-infra.md) | [GitHub](https://github.com/walt-id) | ☐ | ☐ | ☐ | +| [SydTek](https://sydtek.ai/) | [Digital Inheritance in Web3: A Case Study of Soulbound Tokens and Social Recovery Pallets](SydTek.md) | [GitHub](https://github.com/jgophd/Developed-Materials-and-Raw-Data) | ☐ | ☒ | ☐ | +| [Anagolay](https://anagolay.network/) | [Multi-token community contributions for verified creators](anagolay-project-idiyanale-multi-token-community-contributions-for-verified-creators.md) | [GitHub](https://github.com/anagolay) | ☐ | ☒ | ☒ | +| [Ink Contracts Wizard Team](https://github.com/amankumar1008/contracts-wizard) | [Ink Smart Contract Wizard](ink-smart-contract-wizard.md) | [GitHub](https://github.com/amankumar1008/contracts-wizard) | ☐ | ☒ | ☒ | +| [TDSoftware](https://www.tdsoftware.de/) | [Substrate IPFS Utilities](ipfs_utilities.md) | [GitHub](https://github.com/TDSoftware) | ☐ | ☐ | ☐ | +| [Ink Boxes Team](https://github.com/nerdsince98) | [Ink Boxes](ink-boxes.md) | [GitHub](https://github.com/avirajkhare00/ink-boxes/) | ☐ | ☒ | ☒ | +| [ParaSpell](https://github.com/paraspell) | [ParaSpell Phase 2](ParaSpell_follow-up.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | +| [SubRelay](http://subrelay.xyz/) | [SubRelay](subrelay.md) | [GitHub](https://github.com/subrelay) | ☐ | ☐ | ☐ | +| [Wow Labz](http://www.wowlabz.com) | [Dot Marketplace Phase 3](dot_marketplace-Phase3.md) | [GitHub](https://github.com/orgs/WowLabz) | ☐ | ☒ | ☒ | +| [10Clouds Sp. z o.o.](https://10clouds.com/) | [Crowdloan Front End Template](crowdloan_frontend_template.md) | [GitHub](https://github.com/10clouds) | ☐ | ☐ | ☐ | +| [DodoRare, Inc.](https://dodorare.com/) | [Faterium](faterium.md) | [GitHub](https://github.com/faterium) | ☐ | ☒ | ☒ | +| [The Bacon Beacon](https://github.com/random-bacon) | [Pallet Drand Client](pallet-drand-client.md) | [GitHub](https://github.com/random-bacon) | ☐ | ☒ | ☐ | +| [Helikon Labs](https://helikon.io/) | [ChainViz v1](chainviz.md) | [GitHub](https://github.com/helikon-labs/chainviz) | ☐ | ☐ | ☐ | +| [Mutai Solutions](https://bryanmutai.co/) | [Crowdloans-FET](Crowdloans-FET.md) | [GitHub](https://github.com/brymut) | ☐ | ☐ | ☐ | +| [k/factory](https://k-f.co/) | [Centrifuge Go-Substrate-RPC Client V2](centrifuge-gsrpc-v2.md) | [GitHub](https://github.com/centrifuge/go-substrate-rpc-client) | ☐ | ☐ | ☐ | +| [Colorful Notion](https://github.com/colorfulnotion) | [Zombienet Explorer: Multi-Chain Substrate Block Explorer](Zombienet-Explorer.md) | [GitHub](https://github.com/colorfulnotion/zombienet-explorer) | ☐ | ☐ | ☐ | +| [TwinP](https://github.com/herou) | [Decentralized Invoice](decentralized_invoice.md) | [GitHub](https://github.com/herou) | ☐ | ☒ | ☒ | +| [Zondax](http://zondax.ch/) | [Hybrid node research grant](hybrid_node_research.md) | [GitHub](https://github.com/ZondaX) | ☐ | ☐ | ☐ | +| [Bright Inventions](https://brightinventions.pl/) | [ZK-Snarks Tutorial](ZK-Snarks%20tutorial.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☐ | +| [Common Orbit LLC](https://brson.github.io) | [wasm-opt-for-rust maintenance](../maintenance/wasm-opt-for-rust.md) | [GitHub](https://github.com/brson/wasm-opt-rs) | ☐ | ☒ | ☐ | +| [Salaheldin Soliman](https://github.com/salaheldinsoliman) | [Solang developer experience improvements](Solang_developer_experience_improvements.md) | [GitHub](https://github.com/hyperledger/solang) | ☐ | ☐ | ☐ | +| [Optymalizacja AI Grzegorz Miebs](https://github.com/miepsik) | [Validator selection](validators_selection.md) | [GitHub](https://github.com/miepsik) | ☒ | ☐ | ☐ | +| [Applied Blockchain Ltd](https://appliedblockchain.com/) | [Silent Data](project_silentdata.md) | [GitHub](https://github.com/appliedblockchain) | ☐ | ☐ | ☐ | +| [Web3Box Labs](https://github.com/web3box-labs) | [Web3Box](Web3Box.md) | [GitHub](https://github.com/web3box-labs) | ☐ | ☐ | ☐ | +| [LimeChain](https://limechain.tech/) | [Research feasibility of Polkadot Host in Java](research-feasibiliy-java-host.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☐ | ☐ | +| [Blaize.tech](https://blaize.tech/) | [Unified deployment for the collator node](unified_collator_node_deployment.md) | [GitHub](https://github.com/babebort-blaize) | ☐ | ☐ | ☐ | +| [Odyssey B.V.](https://odyssey.org/) | [Momentum, an open source, metaverse for digital societies](odyssey_momentum.md) | [GitHub](https://github.com/momentum-xyz) | ☐ | ☐ | ☐ | +| [Bela Supernova](https://bsn.si/) | [Rubeus Keeper Stage 2](Rubeus_keeper_st2.md) | [GitHub](https://github.com/bsn-si) | ☐ | ☒ | ☐ | +| [Coong Team](https://coong.xyz/) | [Coong Wallet](coong_wallet.md) | [GitHub](https://github.com/CoongCrafts) | ☐ | ☐ | ☐ | +| OCamlMyCaml | [PrivaDEX: Cross-Chain DEX Aggregator MVP](PrivaDEX_aggregator.md) | [GitHub](https://github.com/kapilsinha/privadex) | ☐ | ☐ | ☐ | +| [Aband-Network](https://a.band/) | [Substrate Parachain PoS Template](substrate-parachain-PoS-template.md) | [GitHub](https://github.com/Aband-Network/substrate-parachain-PoS-template) | ☐ | ☒ | ☒ | +| [MangoBOX labs](https://www.mangobox.xyz/) | [MangoSale Protocol](MangoSale_Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☐ | ☐ | -### 🏄‍♀️ Wave 4 - Fourth Quarter 2019 +### 🏄‍♀️ Wave 15 - Third Quarter 2022 +[Menu🔝](#menu) -| Team | Project | Link | Terminated | First Delivery | Completed | -| :----------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------- | :--------- | :------------: | :-------: | -| [Genesis Lab](https://genesislab.net/) | Validator Tracker | [GitHub](https://github.com/genesis-lab-team) | ☐ | ☒ | ☒ | -| [Usetech](http://usetech.com/blockchain.html) | [Substrate API in .NET](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/dotnet_api.md) | [GitHub](https://github.com/usetech-llc/polkadot_api_dotnet) | ☐ | ☒ | ☒ | -| [BlockX Labs](http://blockxlabs.com/) | [Enzyme Browser extension wallet](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Enzyme.md) | [GitHub](https://github.com/blockxlabs/enzyme) | ☐ | ☒ | ☒ | -| [WEB3SCAN](https://www.web3scan.com/) | [Python API client](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/python_substrate_api.md) | [GitHub](https://github.com/polkascan) | ☐ | ☒ | ☒ | -| [Galactic Council](https://github.com/galacticcouncil) | [Polkalert: Validator Monitoring](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/PolkAlert.md) | [GitHub](https://github.com/galacticcouncil/polkalert) | ☐ | ☒ | ☒ | -| [Bandot](http://bandot.io/) | Stablecoin | [GitHub](https://github.com/bandotorg/Bandot) | ☒ | ☒ | ☐ | -| [Laminar One](https://laminar.one/) | LaminarChain: High performance Flow Protocols powering synthetic asset and margin trading | [GitHub](https://github.com/laminar-protocol/laminar-chain) | ☐ | ☒ | ☒ | -| [Stake Technologies](https://stake.co.jp/) | [Ink! Playground](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/ink_playground.md) | [GitHub](https://github.com/staketechnologies/ink-playground) | ☐ | ☒ | ☒ | -| [B-Harvest](https://bharvest.io/) | [Node Monitoring Tool](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/substrate%20x%20(prometheus%20%2B%20grafana)%20by%20B-Harvest.md) | [GitHub](https://github.com/b-harvest) | ☐ | ☒ | ☐ | -| [Simply VC](https://simply-vc.com.mt/) | [P.A.N.I.C. Validator alerting solution](./panic.md) | [GitHub](https://github.com/SimplyVC/panic_polkadot) | ☐ | ☒ | ☒ | -| [Ethworks](https://ethworks.io/) | [Polkadot{.js} extension improvements](./polkadot-desktop-app.md) | [GitHub](https://github.com/ethWorks) | ☐ | ☒ | ☒ | -| [Lyken Software Solutions](https://lyken.rs/) | Investigation of runtime compilation | [GitHub](https://github.com/LykenSol) | ☐ | ☒ | ☒ | -| [Blockchain IT](https://blockchain-it.hr) | [Ink! Remix Plugin](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/ink-remix-plugin.md) | [GitHub](https://github.com/blockchain-it-hr/ink-remix-plugin) | ☐ | ☒ | ☒ | -| [Kadena](https://www.kadena.io/) | Pact feasibility study | [GitHub](https://github.com/kadena-io/) | ☐ | ☐ | ☐ | -| [STAFI Protocol](http://www.stafi.io/) | Stafi is a protocol to provide liquidity for staking assets | [GitHub](https://github.com/stafiprotocol/stafi-node) | ☐ | ☒ | ☒ | -| [Vision Baker](https://playproject.io/) | [DatDot — Dat protocol for Polkadot](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/datdot.md) | [GitHub](https://github.com/playproject-io/datdot) | ☐ | ☒ | ☐ | -| [Speckle OS](https://www.speckleos.io/) | [Integrating additional features into Speckle OS](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Speckle%20Application.md) | [GitHub](https://github.com/SpeckleOS/speckle-browser-extension) | ☐ | ☐ | ☐ | -| [Archipel](https://archipel.id/) | [Solution to resolve high availability problem of Validator nodes in PoS](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/archipel.md) | [GitHub](https://github.com/luguslabs/archipel) | ☐ | ☒ | ☒ | -| [Zondax](https://zondax.ch/) | Flexible TrustZone-based HSM stack | [GitHub](https://github.com/ZondaX) | ☐ | ☒ | ☒ | -| [Usetech](http://usetech.com/blockchain.html) | SR25519 library in pure C and C# | [GitHub](https://github.com/usetech-llc/) | ☐ | ☒ | ☒ | -| [Akropolis](https://akropolis.io/) | [PolkaHub — Heroku-like infrastructure for node deployment](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/PolkaHub.md) | [GitHub](https://github.com/akropolisio) | ☐ | ☒ | ☒ | -| [Pixura](https://pixura.io/) | [Substrate API client in Haskell](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/polkadot_substrate_haskell_api.md) | [GitHub](https://github.com/Pixura) | ☐ | ☐ | ☐ | -| [HashQuark](https://www.hashquark.io/) | Validator Dashboard | [GitHub](https://github.com/hashquark-io) | ☐ | ☒ | ☒ | -| [Stacktical](https://stacktical.com/) | [Performance Management Runtime Modules](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/predictive_performance_management_runtime_module.md) | [GitHub](https://github.com/Stacktical) | ☐ | ☒ | ☐ | -| [Sean Young](https://www.mess.org/) | Solidity to WASM compiler | [GitHub](https://github.com/hyperledger-labs/solang) | ☐ | ☒ | ☒ | -| [Chain Security](https://chainsecurity.com/) | Tool for validating correctness of Polkadot runtimes | [GitHub](https://github.com/ChainSecurity/polpatrol) | ☐ | ☒ | ☒ | +| Team | Project | Link | Terminated | First Delivery | Completed | +| :----------------------------------------------------------- | :-------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | +| [QRUCIAL OÜ](https://qrucial.io/) | [QRUCIAL DAO](./QRUCIAL_DAO.md) | [GitHub](https://github.com/Qrucial/QRUCIAL-DAO) | ☐ | ☒ | ☐ | +| [Polkadot js plus](http://polkadotjs.plus/) | [Polkadot js plus / Social Recovery Wallet](./Plus-social-recovery-wallet.md) | [GitHub](https://github.com/Nick-1979/polkadot-Js-Plus-extension/wiki) | ☐ | ☒ | ☐ | +| [Lee](https://github.com/rust-0x0) | [Hex Space Social Graph](./hex.md) | [GitHub](https://github.com/rust-0x0) | ☐ | ☒ | ☐ | +| [Liberland LLC](https://liberland.org/en/) | [Liberland Pallets](./liberland.md) | [GitHub](https://github.com/liberland/liberland_substrate) | ☐ | ☒ | ☐ | +| [Standard Protocol](https://standard.tech/) | [Signac - a monorepo plugin for developing multiple Parity ink! smart contracts](./signac.md) | [GitHub](https://github.com/standardweb3/signac) | ☐ | ☒ | ☒ | +| [B-Datagray](https://www.b-datagray.com/) | [Datagen Project](./Datagen_Project.md) | [GitHub](https://github.com/Datagen-Project) | ☐ | ☒ | ☐ | +| [Colorful Notion](https://polkaholic.io/#chains) | [Polkaholic.io's Multi-Chain Substrate Block Explorer](./Polkaholic.md) | [GitHub](https://github.com/colorfulnotion/polkaholic/) | ☐ | ☐ | ☐ | +| [Common Orbit LLC](https://brson.github.io) | [`wasm-opt` for Rust](./wasm-opt-for-rust.md) | [GitHub](https://github.com/brson/wasm-opt-rs) | ☐ | ☒ | ☒ | +| [Blockcoders](https://blockcoders.io/) | [Ink Explorer](./ink-explorer.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☒ | +| [Equilibrium](https://equilibrium.co/) | [Polkadot Light Client in C++](./c++polkadot-light-client.md) | [GitHub](https://github.com/eqlabs) | ☐ | ☒ | ☒ | +| [Open rollup](https://github.com/openrollup-zk) | [Open rollup - MVP - Phase 1](./openrollup-mvp-phase-1.md) | [GitHub](https://github.com/openrollup-zk) | ☐ | ☐ | ☐ | +| [Veridise](https://veridise.com/) | [Vanguard](./vanguard.md) | [GitHub](https://github.com/Veridise/Vanguard) | ☐ | ☐ | ☐ | +| [Karolis Ramanauskas](https://krl.is/) | [Generic Sybil-Resistant Faucet](./Faucet.md) | [GitHub](https://github.com/karooolis) | ☐ | ☒ | ☒ | +| [LimeChain](https://limechain.tech/) | [Research feasibility for a Go Runtime](./research-feasibility-go-runtime.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☒ | ☒ | +| [Jim Yam](https://github.com/JimYam) | [daos](./daos.md) | [GitHub](https://github.com/daos-org/daos.git) | ☐ | ☒ | ☒ | +| [Green Lemon](https://github.com/GreenLemonProtocol) | [Green Lemon Protocol](./GreenLemon.md) | [GitHub](https://github.com/GreenLemonProtocol) | ☐ | ☒ | ☒ | +| [Stardust Labs Inc.](https://stardust.finance/) | [Integrating ISO-8583](./Integrating-ISO8583.md) | [GitHub](https://github.com/adit313/) | ☐ | ☒ | ☒ | +| [TwinP](https://www.linkedin.com/in/elioprifti/) | [Escrow Pallet](./escrow_pallet.md) | [GitHub](https://github.com/herou) | ☐ | ☒ | ☒ | +| [Meta Defender Team](https://github.com/Meta-Defender/) | [Meta Defender](./Meta_Defender.md) | [GitHub](https://github.com/Meta-Defender/) | ☐ | ☐ | ☐ | +| [ParaSpell](https://github.com/paraspell) | [ParaSpell](./ParaSpell.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | +| [Primis Labs](https://github.com/Primis-Labs) | [Primis](./Primis.md) | [GitHub](https://github.com/Primis-Labs/client) | ☐ | ☒ | ☒ | +| [Uke](https://github.com/Uke-Messaging) | [Uke Messaging - PoC - Phase 1](./uke.md) | [GitHub](https://github.com/Uke-Messaging) | ☒ | ☐ | ☐ | +| [Redstone Network](https://github.com/difttt) | [Redstone Network](./RedStone%20Network.md) | [GitHub](https://github.com/difttt) | ☐ | ☒ | ☐ | +| [JURIMETRIC TECNOLOGIA LTDA](https://www.jurimetric.com.br/) | [Polkadart](./Polkadart.md) | [GitHub](https://github.com/rankanizer/polkadart) | ☐ | ☒ | ☐ | +| [Skye Kiwi](https://skye.kiwi/) | [Choko Wallet](./choko_wallet.md) | [GitHub](https://github.com/skyekiwi) | ☐ | ☒ | ☐ | +| [Popular Coding](https://www.popularcoding.com/) | [Ventur](./ventur.md) | [GitHub](https://github.com/popular_coding) | ☐ | ☒ | ☒ | +| [Asylum](https://asylum.space/) | [Asylum follow-up 1](./asylum_follow_up_1.md) | [GitHub](https://gitlab.com/asylum-space/) | ☒ | ☒ | ☐ | +| [Cyril Carlier](https://github.com/CrommVardek) | [Maki](./Maki.md) | [GitHub](https://github.com/CrommVardek) | ☐ | ☐ | ☐ | +| [TopMonks](https://www.topmonks.com/) | [Calamar](./Calamar.md) | [GitHub](https://github.com/topmonks/calamar) | ☐ | ☒ | ☐ | +| [Bela Supernova](https://bsn.si/) | [Rubeus Keeper](./RubeusKeeper.md) | [GitHub](https://github.com/bsn-si) | ☐ | ☒ | ☒ | +| [Web3 Labs Ltd](https://www.web3labs.com/epirus-explorer) | [Epirus Substrate Explorer - Phase 2](./epirus_substrate_phase_2.md) | [GitHub](https://github.com/web3labs) | ☐ | ☒ | ☐ | +| [Uke](https://github.com/Uke-Messaging) | [Uke Protocol PoC & App (revised)](./uke-protocol.md) | [GitHub](https://github.com/Uke-Messaging) | ☐ | ☒ | ☒ | +| [727.ventures](https://727.ventures/) | [Typechain Phase 2](./typechain-polkadot-follow-up.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☒ | ☒ | +| [QSTN](https://qstn.us/) | [QSTN](./QSTN.md) | [GitHub](https://github.com/qstnus) | ☐ | ☐ | ☐ | +| [CESS LAB](https://www.cess.cloud/) | [Substats (The framework of lightweight block explorer)](./substats.md) | [GitHub](https://github.com/CESSProject) | ☐ | ☒ | ☐ | +| [Polket](https://toearn.fun) | [ToEarnFun](./polket_toearnfun.md) | [GitHub](https://github.com/polketio/polket-node) | ☐ | ☒ | ☐ | +| ALPHA LABS | [Binary merkle tree](./binary_merkle_tree.md) | [GitHub](https://github.com/frisitano) | ☐ | ☐ | ☐ | +| [Standard Protocol](https://standard.tech/) | [New Order - a full onchain orderbook dex with indexers](./Standard_Protocol.md) | [GitHub](https://github.com/standardweb3) | ☐ | ☐ | ☐ | +| [hack-ink](https://github.com/hack-ink) | [Subalfred](./subalfred.md) | [GitHub](https://github.com/hack-ink/subalfred) | ☐ | ☒ | ☒ | -## 2020 +### 🏄‍♀️ Wave 14 - Second Quarter 2022 +[Menu🔝](#menu) -### 🏄‍♀️ Wave 5 - First Quarter 2020 +| Team | Project | Link | Terminated | First Delivery | Completed | +| :--------------------------------------------------------- | :------------------------------------------------------------------------------------------------------ | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | +| [TDSoftware](https://www.tdsoftware.de/) | [SubIdentity](./SubIdentity.md) | [GitHub](https://github.com/TDSoftware) | ☐ | ☒ | ☒ | +| [ChainSafe Systems](https://chainsafe.io/) | [SubstrateSnap Maintenance Proposal](./Substratesnap_Maintenance.md) | [GitHub](https://github.com/ChainSafe/metamask-snap-polkadot) | ☐ | ☒ | ☒ | +| [HugoByte](https://hugobyte.com/) | [Project Aurras - MVP - Phase 2](./project_aurras_mvp_phase_2.md) | [GitHub](https://github.com/HugoByte) | ☐ | ☐ | ☐ | +| [Perun Network](https://perun.network/) | [Perun App Channels](./perun_app_channels.md) | [GitHub](https://github.com/perun-network/) | ☐ | ☒ | ☒ | +| [ChainSafe Systems](https://chainsafe.io/) | [Privacy enhancement for Polkadot-js extension](./polkadot-js-extension-per-account-auth.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☒ | ☒ | +| [BQP](https://qbitcoin.tech/) | [Quantum Lock for QBITCOIN](./quantumLock.md) | [GitHub](https://github.com/bqpquantum/) | ☐ | ☐ | ☐ | +| [Simply VC](https://simply-vc.com.mt/) | [PANIC Monitoring and Alerting For Blockchains](./panic.md) | [GitHub](https://github.com/SimplyVC/panic) | ☐ | ☒ | ☒ | +| [Artree LLC](https://artree.co.jp/) | [Zero Network](./zero-network.md) | [GitHub](https://github.com/zero-network) | ☐ | ☐ | ☐ | +| [sigma prime](https://sigmaprime.io/) | Differential Fuzzer | [GitHub](https://github.com/sigp) | ☐ | ☐ | ☐ | +| [t3rn](https://www.t3rn.io/) | [XBI - xcm-based high-level standard and interface (ABI) for smart contracts](./xbi-format-psp-t3rn.md) | [GitHub](https://github.com/t3rn/t3rn) | ☐ | ☒ | ☒ | +| [Dante Network](https://www.dantechain.com/) | [Dante Network](./Dante_Network.md) | [GitHub](https://github.com/dantenetwork) | ☐ | ☒ | ☒ | +| [Verida](https://www.verida.io/) | [Single Sign-On for Apps](./verida_network.md) | [GitHub](https://github.com/verida) | ☐ | ☐ | ☐ | +| [Kami Ekbatanifard](https://github.com/Nick-1979/) | [Polkadot js plus / Nomination pools](./Plus-follow-up.md) | [GitHub](https://github.com/Nick-1979/polkadot-Js-Plus-extension/wiki) | ☐ | ☒ | ☒ | +| [Afloat Inc](https://stayafloat.io/#/) | [Tax Infrastructure Polkadot Integration](./Afloat.md) | [GitHub](https://github.com/hashed-io) | ☐ | ☒ | ☐ | +| [gmajor](https://github.com/gmajor-encrypt) | [SCALE Codec Comparator](./scale-codec-comparator.md) | [GitHub](https://github.com/gmajor-encrypt) | ☐ | ☒ | ☒ | +| [Rusty Crewmates](http://rustycrewmates.com/) | [Substrate Tutorials](./substrate-tutorials.md) | [GitHub](https://github.com/rusty-crewmates/substrate-tutorials) | ☐ | ☒ | ☐ | +| [Sequester](https://github.com/SequesterChain) | [A Common-Good Carbon Sink on Polkadot](./sequester.md) | [GitHub](https://github.com/SequesterChain/pallets) | ☐ | ☒ | ☒ | +| [Keysafe Network](https://github.com/keysafe-protocol) | [A decentralized protocol for private key custody and crypto asset management](./keysafe_network.md) | [GitHub](https://github.com/keysafe-protocol) | ☐ | ☒ | ☐ | +| [Fennel Labs](https://fennellabs.com/) | [Whiteflag on Fennel Protocol](./Fennel_Protocol.md) | [GitHub](https://github.com/fennelLabs) | ☐ | ☒ | ☒ | +| [Relationlabs](https://relationlabs.ai/#/home) | [Relation Graph](./Relation-Graph.md) | [GitHub](https://github.com/relationlabs) | ☐ | ☐ | ☐ | +| [Decentration](https://kabocha.network) | [Supersig](./pallet_supersig.md) | [GitHub](https://github.com/kabocha-network) | ☐ | ☒ | ☐ | +| [Web3 Labs Ltd](https://www.web3labs.com/epirus-explorer) | [Epirus Substrate Explorer](./epirus_substrate_explorer.md) | [GitHub](https://github.com/web3labs) | ☐ | ☒ | ☒ | +| [727.ventures](https://727.ventures/) | [Sol2Ink](./sol2ink.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | +| [727.ventures](https://727.ventures/) | [OpenBrush Phase 3](./openbrush-follow-up-2.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☒ | ☐ | +| [FS](https://fair-squares.nl/) | [Fair Squares](./fair_squares.md) | [GitHub](https://github.com/Fair-squares) | ☐ | ☒ | ☐ | +| [Ideal Labs](https://www.idealabs.network/) | [Iris: Phase 2](./iris_followup.md) | [GitHub](https://github.com/ideal-lab5) | ☐ | ☒ | ☐ | +| [NeoPower](https://www.neopower.digital/) | [Roloi: Stream money from one wallet to another](./Roloi.md) | [GitHub](https://github.com/RoloiMoney) | ☐ | ☒ | ☒ | +| [Tribal Protocol Labs](https://www.tribal.fyi/) | [Tribal Protocol Smart Contract Development](./tribal_protocol.md) | [GitHub](https://github.com/tribal-protocol) | ☐ | ☒ | ☐ | +| [Yahuang Wu](https://github.com/wuyahuang) | [Dual-Key Stealth Address Protocol](./DKSAP.md) | [GitHub](https://github.com/wuyahuang) | ☐ | ☒ | ☒ | +| [UNIVERSALDOT FOUNDATION](https://universaldot.foundation) | [Universaldot.me Phase 2](./universaldot.me.md) | [GitHub](https://github.com/UniversalDot) | ☒ | ☐ | ☐ | +| [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 1](./Societal.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☒ | +| [Faceless Protocol](https://github.com/HeisenbergLin22) | [Faceless Protocol](./faceless.md) | [GitHub](https://github.com/HeisenbergLin22) | ☐ | ☒ | ☒ | +| [727.ventures](https://727.ventures/) | [Typechain](./typechain-polkadot.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☒ | ☒ | +| [Codelight](https://massbit.io/) | [Massbit Route](./massbit_route.md) | [GitHub](https://github.com/massbitprotocol/massbitroute) | ☐ | ☒ | ☒ | +| [Hypha Hashed Partners](https://hypha.earth/) | [Social Recovery Wallet](./social_recovery_wallet.md) | [GitHub](https://github.com/hypha-dao) | ☐ | ☒ | ☐ | +| [MangoBOX labs](http://mangobox.xyz/) | [MangoBOX Protocol](./MangoBOX-Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☒ | ☒ | -| Team | Project | Link | Terminated | First Delivery | Completed | -| :---------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------- | :--------- | :------------: | :-------: | -| [Bifrost](https://bifrost.finance/) | [EOS interoperable bridge](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/bifrost_network.md) | [GitHub](https://github.com/bifrost-finance) | ☐ | ☒ | ☒ | -| [Entropy Labs](https://entropylabs.hk) | A toolkit for building and deploying applications with substrate | | ☐ | ☒ | ☐ | -| [Papers GmbH](https://airgap.it) | AirGap - Desktop (+mobile) wallet for Polkadot | [GitHub](https://github.com/airgap-it) | ☐ | ☒ | ☒ | -| [Stake Technologies](https://stake.co.jp/) | [Plasm Chain + OVM Implementation](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/PlasmChian.md) | [GitHub](https://github.com/staketechnologies/) | ☐ | ☒ | ☐ | -| [Usetech](http://usetech.com/blockchain.html) | [PostgreSQL Indexer and Consensus Insurer](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/postgre_indexer_consensus_ensurer.md) | [GitHub](https://github.com/usetech-llc/) | ☐ | ☒ | ☒ | -| [Acala](https://acala.network/) | [A decentralized stablecoin platform](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/stablecoin_acala.md) | [GitHub](https://github.com/AcalaNetwork) | ☐ | ☒ | ☒ | -| [ETCDEV](https://emeraldpay.io/) | [Polkadot Network Crawler](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/crawler.md) | [GitHub](https://github.com/emeraldpay) | ☐ | ☒ | ☒ | -| [Xaya](https://xaya.io/) | Decentralised Complex Gaming | [GitHub](https://github.com/xaya) | ☐ | ☒ | ☒ | -| [Celer](https://www.celer.network/) | Layer 2 Scaling Infrastructure | [GitHub](https://github.com/celer-network) | ☐ | ☒ | ☐ | -| [Cryptoeconomics Lab](https://www.cryptoeconomicslab.com/) | Substrate adapter of Plasma child chain | [GitHub](https://github.com/cryptoeconomicslab) | ☐ | ☐ | ☐ | -| [Centrifuge / ChainSafe](https://centrifuge.io/) | Substrate / Ethereum Bridge | [GitHub 1](https://github.com/centrifuge/), [Github 2](https://github.com/ChainSafe/ChainBridge) | ☐ | ☒ | ☒ | -| [Advanca](https://www.advanca.network/) | Privacy-preserving general-purpose compute/storage layer | [GitHub](https://github.com/advanca) | ☐ | ☒ | ☒ | -| [Nodle](https://nodle.io) | Securely identify, certify and verify IoT devices | [GitHub](http://github.com/NodleCode/) | ☐ | ☒ | ☒ | -| [Figment](https://figment.network/) | DotHub: Information Hub for validators and delegators | [GitHub](https://github.com/figment-networks/dothub) | ☐ | ☒ | ☒ | -| [Lunie](http://lunie.io/) | [Web and mobile wallet](./lunie.md) | [GitHub](https://github.com/luniehq/lunie) | ☐ | ☒ | ☒ | -| [Web3 Gardens](https://web3.garden) | [Runtime modules and UI for creating stable, well-governed communities on Substrate](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/sunshine.md) | [GitHub](https://github.com/web3garden/sunshine) | ☐ | ☒ | ☐ | -| [Itering](https://itering.com/) | [Ruby Substrate API](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/ruby_substrate_api.md) | [GitHub](https://github.com/itering) | ☐ | ☒ | ☒ | -| [WEB3SCAN](https://www.web3scan.com/) | [Identity Pallet for Polkascan](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/polkascan_account_module.md) | [GitHub](https://github.com/polkascan) | ☐ | ☒ | ☒ | -| [Swisscom Blockchain AG](https://www.blockchain.swisscom.com/) | [Kubernetes Operator for Sentry nodes or Validators deployment](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/aPois.md) | [GitHub](https://github.com/swisscom-blockchain) | ☐ | ☒ | ☒ | -| [Polkastats](https://polkastats.io/) | [Polkadot/Kusama network statistics](./polkastats.md) | [GitHub](https://github.com/Colm3na/polkastats-v3) | ☐ | ☒ | ☒ | -| [Supercomputing Systems](https://www.scs.ch/) | [SubstraTEE extension pack](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/SubstraTEE-extension-pack1.md) | [GitHub](https://github.com/scs/substraTEE) | ☐ | ☒ | ☒ | -| [Encointer](https://encointer.org/) | [An Ecological, Egalitarian and Private Cryptocurrency and Self-Sovereign Identity System](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/encointer-testnet.md) | [GitHub](https://github.com/encointer) | ☐ | ☒ | ☒ | -| [FlexDapps](https://flexdapps.com/) | Gantree is a full-service node infrastructure toolkit for Substrate-based blockchains | [GitHub](https://github.com/flex-dapps) | ☐ | ☒ | ☒ | -| [Matter Labs](https://matter-labs.io) | Zinc/RedShift ZK programming framework | [GitHub](https://github.com/matter-labs) | ☐ | ☐ | ☐ | -| [Second State](https://www.secondstate.io/) | [Bridging Ethereum Tools and Smart Contracts into Substrate Ecosystem](./wasmedge_substrate.md) | [GitHub](https://github.com/second-state) | ☐ | ☒ | ☒ | -| [Sensio.Group](https://ipfs.io/ipfs/bafybeihoqt3gvmd5wbqkxt52lojuvbvgoydan3aadxhvf37qdyvpgl762e/index.html) | [Substrate modules + UI that focus on photo copyright and privacy](./sensio_network.md) | [GitLab](https://gitlab.com/sensio_group) | ☐ | ☒ | ☐ | -| [KILT](https://kilt.io/) | [Substrate Anonymous Credentials](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/KILT_AnonymousCredentials.md) | [GitHub](https://github.com/KILTprotocol) | ☐ | ☒ | ☒ | -| [Node Factory](https://www.nodefactory.io/) | [Metamask plugin for Polkadot](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/metamask-plugin-polkadot.md) | [GitHub](https://github.com/nodefactoryIo) | ☐ | ☒ | ☒ | -| [Interlay](https://www.interlay.io/) | Polkadot/BTC bridge specification (RFP) | [GitLab](https://gitlab.com/interlay/polkabtc-spec) | ☐ | ☒ | ☒ | -| [Stake Technologies](https://stake.co.jp/) | [ECDSA for Polkadot JS](https://github.com/w3f/Grants-Program/blob/master/applications/polkadotjs-ecdsa.md) | [GitHub](https://github.com/staketechnologies/apps) | ☐ | ☒ | ☒ | -| [Obsidian Labs](https://www.obsidians.io/) | Substrate IDE | [GitHub](https://github.com/ObsidianLabs) | ☐ | ☒ | ☒ | -| [Definex](https://definex.io/) | A financial market protocol | [GitHub](https://github.com/definex/definex-libs) | ☐ | ☒ | ☒ | -| [Attic Lab](https://atticlab.net/) | Multisignature Wallet Standardization/PSP | [GitHub](https://github.com/w3f/PSPs) | ☐ | ☒ | ☒ | -| [ImToken](https://token.im/) | Multi-chain non-custodial mobile and hardware wallet for iOS & Android | [GitHub](https://github.com/consenlabs/) | ☐ | ☒ | ☒ | -| [SelfKey](https://selfkey.org/) | SelfKey DIDs & Claims as Ink! Smart Contracts | [GitHub](https://github.com/SelfKeyFoundation) | ☐ | ☐ | ☐ | -| [Lyken](https://lyken.rs/) | [Rust trait system revamp](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/rust_trait_system_revamp.md) | [GitHub](https://github.com/LykenSol) | ☐ | ☒ | ☐ | -| [Chorus One](https://chorus.one/) | Grandpa light client in Tendermint | [GitHub](https://github.com/ChorusOne) | ☐ | ☒ | ☒ | +### 🏄‍♀️ Wave 13 - First Quarter 2022 +[Menu🔝](#menu) -### 🏄‍♀️ Wave 6 - Second Quarter 2020 +| Team | Project | Link | Terminated | First Delivery | Completed | +| :---------------------------------------------------- | :-------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | +| [Chainify](https://github.com/chainify) | [Nolik](./Nolik.md) | [GitHub](https://github.com/chainify) | ☐ | ☒ | ☒ | +| [Pennsylvania State University](https://www.psu.edu/) | Avoiding Rust Deadlocks via Lifetime Visualization | [GitHub](https://songlh.github.io/) | ☐ | ☒ | ☒ | +| [Anagolay](https://anagolay.network/) | [Project Idiyanale](./anagolay-project-idiyanale-phase-1.md) | [GitHub](https://github.com/anagolay) | ☐ | ☒ | ☒ | +| [Fennel Labs](https://fennellabs.com/) | [Fennel Protocol](./Fennel_Protocol.md) | [GitHub](https://github.com/fennelLabs) | ☐ | ☒ | ☒ | +| [Valletech AB](https://valletech.eu/) | [Polkawatch](./Polkawatch.md) | [GitHub](https://gitlab.com/polkawatch) | ☐ | ☒ | ☒ | +| [EzCode](https://ezcode.co/) | [Polkadot.js NoCode Plugin](./polkadotjs_no_code.md) | [GitHub](https://github.com/inartin) | ☐ | ☒ | ☒ | +| [Virto Network](https://virto.network/) | [LIP payments pallet](./lip_payments.md) | [GitHub](https://github.com/virto-network/) | ☐ | ☒ | ☒ | +| [Kami Ekbatanifard](https://github.com/Nick-1979/) | [Polkadot.js Plus Extension](./Plus.md) | [GitHub](https://github.com/Nick-1979/polkadot-Js-Plus-extension/wiki) | ☐ | ☒ | ☒ | +| [Dora Factory](https://dorafactory.org/) | [Multisig UI](./dora-factory-molochdao-v1-v2.md) | [GitHub](https://github.com/DoraFactory) | ☐ | ☒ | ☒ | +| [Blackprint](https://github.com/Blackprint) | [Integrating Polkadot.js with Blackprint](./blackprint-js.md) | [GitHub](https://github.com/Blackprint) | ☐ | ☒ | ☒ | +| [OpenSquare Network](https://www.opensquare.network/) | [OpenSquare Paid QA protocol](./OpenSquare_paid_qa_protocol.md) | [GitHub](https://github.com/opensquare-network/) | ☐ | ☒ | ☒ | +| [@Scale Technologies](https://atscale.xyz) | [Libra - Decentralized Payment Network](./Libra.md) | [GitHub](https://github.com/atscaletech/) | ☐ | ☒ | ☒ | +| [Interstellar](https://www.interstellar.gg/) | [Interstellar - Wallet Phase 1](./Interstellar-Network.md) | [GitHub](https://github.com/Interstellar-Network) | ☐ | ☒ | ☐ | +| [Pendulum](https://pendulumchain.org/) | [Spacewalk: a Stellar bridge](./spacewalk-bridge.md) | [GitHub](https://github.com/pendulum-chain) | ☐ | ☒ | ☐ | +| [Dmitrii Koshelev](https://github.com/dishport) | [Implementation of the new hash function to BLS12 curves](./new_bls12_hash_function.md) | [GitHub](https://github.com/dishport) | ☐ | ☒ | ☒ | +| [Hamster](https://github.com/orgs/hamster-shared) | [Hamster - A decentralized computing network](./hamster.md) | [GitHub](https://github.com/orgs/hamster-shared) | ☐ | ☒ | ☒ | +| [Papers GmbH](https://papers.ch/en/) | Zaturn - A Generic Attestable Oracle parachain Phase 1 | [GitHub](https://github.com/airgap-it) | ☐ | ☐ | ☐ | +| [Slonigiraf](https://www.slonigiraf.org/) | [SLON - a recommendation letter system](./slonigiraf.md) | [GitHub](https://github.com/slonigiraf) | ☐ | ☒ | ☒ | +| [Helixstreet](https://helixstreet.io/) | [Helixstreet Module](./helixstreet.md) | [GitHub](https://github.com/helixstreet) | ☐ | ☐ | ☐ | +| [Cryptoviet](https://team.cryptoviet.com/) | [Gafi Network - The Network of Game Finance](./Gafi.md) | [GitHub](https://github.com/cryptoviet/gafi) | ☐ | ☒ | ☒ | +| [Asylum](https://asylum.space/) | [Metaverse for next generation gaming](./asylum_follow_up_1.md) | [GitHub](https://gitlab.com/asylum-space/) | ☐ | ☒ | ☒ | +| [CESS LAB](https://www.cess.cloud/) | [Data Store Pallet](./ces_data_store.md) | [GitHub](https://github.com/CESSProject/cess) | ☐ | ☒ | ☒ | +| [ChainSafe](https://chainsafe.io/) | [Substrate Core Polywrapper](./substrate_core_polywrapper.md) | [GitHub](https://github.com/polywrap) | ☐ | ☐ | ☐ | +| [Bela Supernova](https://bsn.si/en/home/) | [On-chain cash exchange (OCEX)](./on-chain-cash.md) | | ☐ | ☒ | ☒ | +| [Second State](https://www.secondstate.io/) | [WasmEdge for Substrate](./wasmedge_substrate.md) | [GitHub](https://github.com/wasmedge) | ☐ | ☒ | ☐ | +| [Wow Labz](https://www.wowlabz.com/) | [Dot Marketplace Phase 2](./dot_marketplace-phase2.md) | [GitHub](https://github.com/WowLabz) | ☐ | ☒ | ☒ | +| [Stardust Labs Inc.](https://stardust.finance/) | [Uncollateralized Stablecoin Research and Design](./stardust.md) | [GitHub](https://github.com/adit313/) | ☐ | ☒ | ☒ | +| [Hashed Systems](https://hashed.io) | [Native Bitcoin Vaults (NBV)](./native-bitcoin-vaults.md) | [GitHub](https://github.com/hashed-io) | ☐ | ☒ | ☒ | +| [Setheum](https://setheum.xyz/) | [Setheum HighEnd LaunchPad Crowdsales Module](./setheum.md) | [GitHub](https://github.com/Setheum-Labs) | ☐ | ☐ | ☐ | +| [SaaS3 Lab](https://www.saas3.io) | [SaaS3](./SaaS3.md) | [GitHub](https://github.com/SaaS3Lab) | ☐ | ☐ | ☐ | +| [NUTS Finance](https://nuts.finance) | [DOT-pegged derivative built on top of the stable asset protocol](./stable-asset.md) | [GitHub](https://github.com/nutsfinance/) | ☐ | ☒ | ☒ | +| [Strategy Object](https://strategyobject.com/) | [Substrate Client for Java](./substrate_client_java.md) | [GitHub](https://github.com/strategyobject/substrate-client-java) | ☐ | ☒ | ☐ | -| Team | Project | Link | Terminated | First Delivery | Completed | -| :-------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------- | :--------- | :------------: | :-------: | -| [Protofire](https://protofire.io/) | Failover mechanism for validators | [GitHub](https://github.com/protofire) | ☐ | ☒ | ☒ | -| [HashQuark](https://www.hashquark.io/) | Validator Dashboard Phase 2 | [GitHub](https://github.com/hashquark-io) | ☐ | ☒ | ☒ | -| [BUIDL Labs](https://buidllabs.io/) | [YieldScan Staking Dashboard](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/YieldScan.md) | [GitHub](https://github.com/buidl-labs) | ☐ | ☒ | ☒ | -| BoBao Technologies | [PolkaKey an electron app to generate Polkadot addresses + tutorials](./PolkaKey.md) | [GitHub](https://github.com/w3finance/PolkaKey) | ☐ | ☒ | ☐ | -| [Webassembly Security](https://webassembly-security.com/) | [Improving security and resilience of WebAssembly runtimes](./wasm_runtimes_fuzzing.md) | [GitHub](https://github.com/pventuzelo/wasm_runtimes_fuzzing) | ☐ | ☒ | ☒ | -| [Finoa](https://finoa.io/) | C library for Substrate | [GitHub](https://github.com/finoabanking/substrate-c-tool) | ☐ | ☒ | ☒ | -| [Crust Network](https://crust.network/) | Incentive layer protocol for decentralized storage | [GitHub](https://github.com/crustio) | ☐ | ☒ | ☒ | -| [ETCDEV](https://emeraldpay.io/) | Polkadot Java Client | [GitHub](https://github.com/emeraldpay) | ☐ | ☒ | ☒ | -| [Zondax](http://zondax.ch/) | Ledger app for Polkadot/Kusama Phase 2 | [GitHub](https://github.com/ZondaX/ledger-polkadot) | ☐ | ☒ | ☒ | -| [Soramitsu](https://soramitsu.co.jp/) | Hyperledger Iroha Bridge | [GitHub](https://github.com/sora-xor/polkaswap-web) | ☐ | ☒ | ☒ | -| [LimeChain](https://github.com/LimeChain) | [AssemblyScript SCALE Codec](./assemblyscript-scale-codec.md) | [GitHub](https://github.com/LimeChain/as-scale-codec) | ☐ | ☒ | ☒ | -| [Insight](https://insightfellows.com/) | [Load Balanced Endpoints](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/load_balanced_endpoints_operations.md) | [GitHub](https://github.com/insight-w3f/terragrunt-polkadot) | ☐ | ☒ | ☒ | -| [Ethworks](https://ethworks.io/) | [Polkadot.{js} Desktop Application](./polkadot-desktop-app.md) | [GitHub](https://github.com/EthWorks/) | ☐ | ☒ | ☒ | -| [Usetech](http://usetech.com/blockchain.html) | NFT Tracking Module | [GitHub](https://github.com/usetech-llc/nft_parachain) | ☐ | ☒ | ☒ | -| [Chevdor](https://www.chevdor.com/) | Polkabot | [GitHub](https://github.com/chevdor) | ☐ | ☒ | ☒ | -| [Aleksandr Krupenkin](https://github.com/akru) | [Haskell Web3 library](./hs-web3.md) | [GitHub](https://github.com/airalab/hs-web3) | ☐ | ☒ | ☒ | -| [WEB3SCAN](https://www.web3scan.com/) | [Polkascan Signer Interfaces](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/polkascan_signer_interfaces.md) | [GitHub](https://github.com/polkascan) | ☐ | ☒ | ☒ | -| [Fortmatic](https://fortmatic.com/) | SDK + Burner Wallet to implement Web 2.0 login for dapps | [GitHub](https://github.com/fortmatic) | ☐ | ☐ | ☐ | -| [PureStake](https://www.purestake.com/) | [Web3 Compatible API](./web3-compatible-api.md) | [GitHub](https://github.com/PureStake) | ☐ | ☒ | ☒ | -| [Phala.Network](https://phala.network/) | [Web3 Analytics](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/web3_analytics.md) | [GitHub](https://github.com/Phala-Network/) | ☐ | ☐ | ☐ | -| [TerenceGe](https://github.com/TerenceGe) | [C implementation of Schnorrkel](./sr25519_donna.md) | [GitHub](https://github.com/TerenceGe/sr25519-donna) | ☐ | ☒ | ☒ | -| [Adoriasoft](https://adoriasoft.com/) | Cosmos-SDK Parachain Development Kit | [GitHub](https://github.com/adoriasoft/cosmos-sdk) | ☐ | ☒ | ☒ | -| [Laminar One](https://laminar.one/) | Reusable Libraries: Runtime Modules + Monitoring Framework | [GitHub](https://github.com/open-web3-stack) | ☐ | ☒ | ☒ | -| [Faber](https://github.com/yxf) | [Subwallet: CLI wallet for Polkadot/Substrate](./subwallet.md) | [GitHub](https://github.com/yxf/subwallet) | ☐ | ☒ | ☒ | -| [Equilibrium.co](https://equilibrium.co/) | [offchain::ipfs](./c++polkadot-light-client.md) | [GitHub](https://github.com/eqlabs) | ☐ | ☒ | ☒ | -| [Snowfork](http://www.snowfork.com/) | Ethereum Bridge | [GitHub](https://github.com/snowfork) | ☐ | ☒ | ☒ | -| [Lunie](http://lunie.io/) | [Lunie Governance integration](./lunie.md) | [GitHub](https://github.com/luniehq/lunie) | ☐ | ☒ | ☒ | -| [LimeChain](https://github.com/LimeChain) | [AssemblyScript Runtime](./assemblyscript-scale-codec.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☒ | ☒ | -| [MVP Workshop](https://mvpworkshop.co/) | [Substrate startkit GUI (marketplace for substrate pallets)](./substrate_startkit_GUI.md) | [GitHub](https://github.com/MVPWorkshop) | ☐ | ☒ | ☒ | -| [P2P](https://p2p.org/) | [Multiblockchain ETL](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Multiblockchain%20ETL.md) | [GitHub](https://github.com/p2p-org/polkadot-profit-transformer) | ☐ | ☒ | ☒ | -| [FlexDapps](https://flexdapps.com/) | Gantree Phase 4 | [GitHub](https://github.com/flex-dapps) | ☐ | ☐ | ☐ | -| [Zondax](http://zondax.ch/) | Ledgeracio: A command-line tool and Ledger app designed for staking operations | [GitHub](https://github.com/paritytech/ledgeracio) | ☐ | ☒ | ☒ | -| [Dipole Tech](https://www.dipole.tech) | [Dipole Oracle: Distributed energy resource management](./DipoleOracle.md) | [GitHub](https://github.com/DipoleTech/dipole-oracle) | ☐ | ☒ | ☒ | +## 2021 -### 🏄‍♀️ Wave 7 - Third Quarter 2020 +### 🏄‍♀️ Wave 12 - Fourth Quarter 2021 +[Menu🔝](#menu) -| Team | Project | Link | Terminated | First Delivery | Completed | -| :--------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------- | :--------- | :------------: | :-------: | -| [Halva](https://github.com/halva-suite) | [A toolchain for improving the experience of developing Decentralized Applications based on Substrate](./halva_framework.md) | [GitHub](https://github.com/halva-suite) | ☐ | ☒ | ☒ | -| [Subscan](https://subscan.io) | [Substrate explorer](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/subscan_grant_application.md) | [GitHub](https://github.com/subscan-explorer/subscan-essentials) | ☐ | ☒ | ☒ | -| [t3rn](https://github.com/t3rn/t3rn) | [A protocol for blockchain interoperability](./xbi-format-psp-t3rn.md) | [GitHub](https://github.com/t3rn/t3rn) | ☐ | ☒ | ☒ | -| [Stake Technologies](https://stake.co.jp/) | [Hardware ECDSA for Polkadot JS](https://github.com/w3f/Grants-Program/blob/master/applications/polkadotjs-hardware.md) | [GitHub](https://github.com/polkadot-js) | ☐ | ☒ | ☒ | -| [Protofire](https://protofire.io/) | Failover mechanism for validators upgrade | [GitHub](https://github.com/protofire) | ☐ | ☒ | ☐ | -| [DappForce](http://dappforce.io) | [SubSocial Chapter 2](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Subsocial-2.md) | [GitHub](https://github.com/dappforce/dappforce-subsocial) | ☐ | ☒ | ☒ | -| [OpenSquare Network](https://www.opensquare.network/) | [A blockchain based crowdsourcing and reputation platform](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/open_square_network.md) | [GitHub](https://github.com/opensquare-network) | ☐ | ☒ | ☒ | -| [Cardinals](https://cardinals.cc/) | [Threshold BLS Randomness Beacon for Substrate](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Threshold%20BLS%20Randomness%20Beacon%20for%20Substrate.md) | [GitLab](https://gitlab.com/cardinals1/threshold-ecdsa) | ☐ | ☒ | ☒ | -| [KILT](https://kilt.io/) | Polimec: A Fundraising Mechanism for Projects within the Polkadot Ecosystem | [GitHub](https://github.com/KILTprotocol) | ☐ | ☐ | ☐ | -| [Simply VC](https://simply-vc.com.mt/) | [P.A.N.I.C. Phase 2](./panic.md) | [GitHub](https://github.com/SimplyVC/panic_polkadot) | ☐ | ☐ | ☐ | -| [Interlay](https://www.interlay.io/) | Trustless BTC-Polkadot Bridge | [GitLab](https://gitlab.com/interlay) | ☐ | ☒ | ☐ | -| [DodoRare](https://github.com/enfipy) | [Crossbow: Mobile Game Framework for Substrate](./crossbow.md) | [GitHub](https://github.com/dodorare/crossbow) | ☐ | ☒ | ☒ | -| [Halva](https://github.com/halva-suite) | [Halva: Bootstrapping and Scaffolding](./halva_bootstrapping.md) | [GitHub](https://github.com/halva-suite) | ☐ | ☒ | ☒ | -| [Sunshine Systems](https://sunshine.foundation) | [Sunshine Keybase](./sunshine-keybase.md) | [GitHub](https://github.com/sunshine-protocol) | ☐ | ☒ | ☒ | -| [Subscan](https://subscan.io) | [Multi-signature Management Tool](./multisignature_management_tool.md) | [GitHub](https://github.com/subscan-explorer/subscan-multisig-react) | ☐ | ☒ | ☒ | -| [Evercity](https://evercity.io/) | Smart Sustainable Bond Protocol (SSB-P) | [GitHub](https://github.com/EvercityEcosystem/Smart-Sustainable-Bond) | ☐ | ☒ | ☒ | -| [Permiurly](http://permiurly.in) | [Polkassembly](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/polkassembly_grant_application.md) | [GitHub](https://github.com/premiurly/polkassembly) | ☐ | ☒ | ☒ | -| [Zeropool](https://zeropool.network/) | [Private transactions on Polkadot](./ZeroPool.md) | [GitHub](https://github.com/zeropoolnetwork) | ☐ | ☒ | ☐ | -| [Polkadex](https://github.com/Polkadex-Substrate) | [A decentralized, peer-peer, cryptocurrency exchange for DeFi ecosystem in Substrate](./polkadex.md) | [GitHub](https://github.com/Polkadex-Substrate/Polkadex) | ☒ | ☒ | ☐ | -| [Fractapp](https://fractapp.com) | [Messenger with crypto wallet](./fractapp.md) | [GitHub](https://github.com/fractapp) | ☐ | ☒ | ☒ | -| [Equilibrium.io](https://equilibrium.io/en) | [All-in-one Interoperable DeFi hub.](./curve_amm.md) | [GitHub](https://github.com/equilibrium-eosdt) | ☐ | ☒ | ☒ | -| [Glacier Blockchain Technology](http://www.gbctech.cn/#/) | [Starks Network](./starks_network.md) | [GitHub](https://github.com/gbctech) | ☐ | ☒ | ☒ | -| [SubDEX](http://subdex.io.s3.eu-west-2.amazonaws.com/index.html) | [A decentralized cross-chain exchange based on AMM](./subdex.md) | [GitHub](https://github.com/subdarkdex) | ☐ | ☒ | ☒ | -| [Zenlink](https://zenlink.pro/) | [A cross-chain DEX network](./zenlink.md) | [GitHub](https://github.com/zenlinkpro/zenlink_dex_module) | ☐ | ☒ | ☒ | -| [Subscript](https://github.com/slickup) | [Substrate smart contract api and sdk in AssemblyScript](./subscript_lang.md) | [GitHub](https://github.com/slickup/subscript) | ☐ | ☒ | ☒ | -| [Tesseract](https://tesseract.one/) | Swift API | [GitHub](https://github.com/tesseract-one) | ☐ | ☒ | ☐ | -| [Cobo](https://cobo.com/) | Cobo Vault | [GitHub](https://github.com/CoboVault) | ☐ | ☒ | ☒ | -| [NodeFactory](https://nodefactory.io/) | [Vedar: Auto-funded public P2P infrastructure (APPI)](https://github.com/w3f/General-Grants-Program/blob/master/grants/rfp-responses/appi.md) | [GitHub](https://github.com/NodeFactoryIo/Vedran) | ☐ | ☒ | ☒ | -| [Adoriasoft](https://adoriasoft.com/) | Cosmos-SDK Parachain Development Kit Phase 2 | [GitHub](https://github.com/adoriasoft/cosmos-sdk) | ☐ | ☒ | ☒ | -| [sup](https://github.com/clearloop/sup) | [Command line tool for generating or upgrading a Substrate node](./sup.md) | [GitHub](https://github.com/clearloop/sup) | ☐ | ☒ | ☒ | -| [Shard Labs](https://shardlabs.io) | [Tip or Donate KSM Embeddable Button](./KSM-embeddable-tip-or-donate-button.md) | [GitHub](https://github.com/Shard-Labs) | ☐ | ☒ | ☒ | +| Team | Project | Link | Terminated | First Delivery | Completed | +| :--------------------------------------------------------- | :---------------------------------------------------------------------------------------- | :------------------------------------------------------------------------- | :--------- | :------------: | :-------: | +| Matthew Darnell | [cScale](./cScale.md) | [GitHub](https://github.com/MatthewDarnell/cScale) | ☐ | ☒ | ☐ | +| [Web3go](https://web3go.xyz/) | [Web3go](./Web3Go.md) | [GitHub](https://github.com/web3go-xyz) | ☐ | ☒ | ☐ | +| [Prosopo Limited](https://prosopo.io) | [Prosopo: Human Verification Marketplace](./prosopo.md) | [GitHub](https://github.com/prosopo-io) | ☐ | ☒ | ☒ | +| [Litentry](https://www.litentry.com) | [Polka SignIn](./PolkaSignIn.md) | [GitHub](https://github.com/litentry) | ☐ | ☐ | ☐ | +| [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib](./php-rpc-lib.md) | [GitHub](https://github.com/gmajor-encrypt/) | ☐ | ☒ | ☒ | +| [logion](https://logion.network/) | [Logion wallet](./logion_wallet.md) | [GitHub](https://github.com/logion-network) | ☐ | ☒ | ☒ | +| [727.ventures](https://727.ventures/) | [OpenBrush - Secure smart-contract development on ink! Phase 2](./openbrush-follow-up.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☒ | ☐ | +| [Nitor Infotech](https://www.nitorinfotech.com/) | [Php substrate api](./php-substrate-api.md) | [GitHub](https://github.com/nitor-infotech-oss) | ☐ | ☒ | ☒ | +| [@agryaznov](https://github.com/agryaznov) | [Candle Auctions on Ink!](./candle_auction_ink.md) | [GitHub](https://github.com/agryaznov/candle-auction-ink) | ☐ | ☒ | ☒ | +| [Iridium Industries](http://www.iridium.industries) | [Iris: Decentralized storage network for substrate-based chains](./iris.md) | [GitHub](https://github.com/iridium-labs/iris) | ☐ | ☒ | ☒ | +| [DICO Team](https://dico.io/) | [DICO: Decentralized and governable ICO platform](./DICO.md) | [GitHub](https://github.com/DICO-TEAM/dico-chain) | ☐ | ☐ | ☐ | +| [DodoRare, Inc.](https://dodorare.com) | [Crossbow - Cross-Platform Rust Toolkit for Games](./faterium.md) | [GitHub](https://github.com/dodorare) | ☐ | ☒ | ☒ | +| [Rainbowcity Foundation](http://www.rainbowcity.io/) | [RainbowDAO Protocol ink! Phase 1](./RainbowDAO%20Protocol%20ink%20Phase%201.md) | [GitHub](https://github.com/RainbowcityFoundation/RainbowcityDAO) | ☐ | ☒ | ☒ | +| [Web Registry DAO](https://www.wika.network) | [Wika Network](./wika_network.md) | [GitHub](https://github.com/randombishop/wika_node) | ☐ | ☒ | ☐ | +| [Helikon Labs](http://www.helikon.tech/) | [SubVT Telegram Bot for Kusama and Polkadot](./subvt-telegram-bot.md) | [GitHub](https://github.com/helikon-labs/polkadot-kusama-1kv-telegram-bot) | ☐ | ☒ | ☒ | +| [Elamin LTD](http://imbue.network/) | [Imbue Network](./imbue_network.md) | [GitHub](https://github.com/ImbueNetwork) | ☐ | ☒ | ☒ | +| [Koi Metaverse](https://koi.io/) | [Building the Digital Collectibles Platform for Virtual GameFi NFTs](./Koiverse.md) | [GitHub](https://github.com/KoiMetaverse) | ☐ | ☐ | ☐ | +| [Health Hero](https://www.gohealthhero.com/) | [Decentralized Well-being Game API](./decentralized_well-being_game_api.md) | [GitHub](https://github.com/iumairazhar) | ☐ | ☐ | ☐ | +| [UNIVERSALDOT FOUNDATION](https://universaldot.foundation) | [A freelancing decentralized application](./universaldot.me.md) | [GitHub](https://github.com/UniversalDot) | ☐ | ☒ | ☒ | +| [AdMeta](https://admeta.network/) | [A privacy-preserving Ad Platform](./AdMeta.md) | [GitHub](https://github.com/AdMetaNetwork/admeta) | ☐ | ☒ | ☒ | +| Crypto Pay Lab (CPL)) | [Dotpay a github paid task platform using DOT](./DotPay.md) | [GitHub](https://github.com/bytepayment) | ☐ | ☒ | ☐ | -### 🏄‍♀️ Wave 8 - Fourth Quarter 2020 +### 🏄‍♀️ Wave 11 - Third Quarter 2021 +[Menu🔝](#menu) -| Team | Project | Link | Terminated | First Delivery | Completed | -| :---------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------- | :--------- | :------------: | :-------: | -| [Sean Young](https://www.mess.org/) | Solidity to WASM compiler Phase 2 | [GitHub](https://github.com/hyperledger-labs/solang) | ☐ | ☒ | ☒ | -| [Nuclei Studio](https://nuclei.studio/) | [Governance OS](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/nuclei_governance_os.md) | [GitHub](https://github.com/NucleiStudio) | ☐ | ☒ | ☒ | -| [NBLTrust](https://www.nbltrust.com/#/en/home) | [Dart SCALE Codec](./dart-scale-codec.md) | [GitHub](https://github.com/nbltrust/dart-scale-codec) | ☐ | ☒ | ☒ | -| [Nsure.Network](https://nsure.network/) | [Open Insurance Platform for Open Finance](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/nsure_network.md) | [GitHub](https://github.com/nsure-tech) | ☐ | ☒ | ☐ | -| [Kylin Network](https://kylin.network/) | [Cross-chain Platform for the Data Economy](./kylin_network.md) | [GitHub](https://github.com/Kylin-Network) | ☐ | ☒ | ☒ | -| [Bit.Country](http://bit.country/) | [A decentralized world](./bit_country.md) | [GitHub](https://github.com/bit-country) | ☐ | ☒ | ☒ | -| [MIDL.dev](https://MIDL.dev) | [Polkashots.io: Snapshot website for Polkadot and Kusama](./polkashots.md) | [GitHub](https://github.com/midl-dev) | ☐ | ☒ | ☒ | -| [Ares Protocol](https://www.aresprotocol.com/) | [Decentralized Oracle Protocol](./ares_protocol.md) | [GitHub](https://github.com/aresprotocols/ares) | ☐ | ☒ | ☒ | -| [Saito](https://saito.io/) | [Polkadot Gaming Protocol and Library](./saito-game-protocol-and-engine.md) | [GitHub](https://github.com/SaitoTech) | ☐ | ☒ | ☐ | -| [LimeChain](https://github.com/LimeChain) | [Subsembly: Framework for building AssemblyScript Runtimes](./research-feasibility-go-runtime.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☒ | ☐ | -| [Wificoin](https://wificoin.com/) | [PESA: On-ramp/off-ramp to crypto/local currencies for Polkadot](./pesa_pallet.md) | | ☐ | ☐ | ☐ | -| [WalletConnect](https://walletconnect.org/) | Open protocol for connecting Wallets to Dapps | [GitHub](https://github.com/walletconnect) | ☐ | ☒ | ☐ | -| [Citadel.one](https://citadel.one/) | Non-custodial Proof-of-Stake platform | | ☐ | ☒ | ☒ | -| [Geometry Labs](https://geometrylabs.io/) | [Load Balanced Endpoints Phase 2](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/load_balanced_endpoints_operations.md) | [GitHub](https://github.com/geometry-labs) | ☐ | ☒ | ☒ | -| [MAP labs](https://www.maplabs.io/) | [Map Bridge: Connect Polkadot and other PoW chains](./MAP-Bridge.md) | [GitHub](https://github.com/Philasande-map/mapbridge) | ☒ | ☐ | ☐ | -| [RareLink](http://rarelink.network/) | [Dynamic non-fungible token (NFT) Protocol](./RareLink.md) | [GitHub](https://github.com/RareLink) | ☐ | ☐ | ☐ | -| [Cere Network](http://cere.network/) | [Turnkey Private Blockchain Network](./Cere_Turnkey_Private_Blockchain_Network.md) | [GitHub](https://github.com/Cerebellum-Network) | ☐ | ☒ | ☒ | -| [SubDAO Labs](https://www.subdao.network/) | [SubDAO is a Cross-chain Platform to link DAO and DApp on Polkadot](./SubDAO-Chrome-Extension.md) | [GitHub](https://github.com/subdao-network) | ☐ | ☒ | ☒ | -| [Idavoll Network](https://idavoll.network/) | [Decentralized organization platform](./Idavoll%20Network.md) | [GitHub](https://github.com/idavollnetwork) | ☐ | ☒ | ☒ | -| [Zenlink](https://zenlink.pro/) | [DEX Ink! smart contract](./zenlink-smart-contract.md) | [GitHub](https://github.com/zenlinkpro/zenlink_dex_module) | ☐ | ☐ | ☐ | -| [Setheum](https://setheum.xyz/) | [Setheum Elastic Reserve Protocol](./setheum.md) | [GitHub](https://github.com/Setheum-Labs/Setheum) | ☒ | ☐ | ☐ | -| [Everstake](https://everstake.one/) | [DKG msig wallet](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Rabin_DKG_Library.md) | [GitHub](https://github.com/everstake) | ☐ | ☐ | ☐ | -| [Coinversation](http://coinversation.cn/) | [Decentralized exchange for trading synthetic assets](./Coinversation.md) | [GitHub](https://github.com/Coinversation) | ☒ | ☐ | ☐ | -| [Manta Network](https://www.manta.network/) | [A Privacy Preserving Decentralized Exchange](./manta_network.md) | [GitHub](https://github.com/Manta-Network) | ☐ | ☒ | ☐ | -| [Stake Technologies](https://stake.co.jp/en/) | [ZK Rollups Pallet](./zk-rollups.md) | [GitHub](https://github.com/staketechnologies) | ☐ | ☒ | ☐ | -| [Apron Network](https://apron.network/) | [Decentralized infrastructure provider](./Apron_Network.md) | [GitHub](https://github.com/apron-network) | ☐ | ☒ | ☒ | -| [Pocket 4D](https://pocket4d.io) | [Substrate Dart API client](./Polkadot-Dart.md) | [GitHub](https://github.com/Pocket4D) | ☐ | ☒ | ☐ | -| [Listen](https://listen.io/) | [Decentralized social network focusing on sound](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Listen.md) | [GitHub](https://github.com/ListenTeam) | ☒ | ☐ | ☐ | -| [Protofire](https://protofire.io/) | Polkadot Mempool Explorer | [GitHub](https://github.com/protofire) | ☐ | ☒ | ☒ | -| [Fuzhou Wakanda Information Technology](https://www.heizuan.com/) | Black Diamond Wallet | [GitHub](https://github.com/bdwallet) | ☐ | ☐ | ☐ | -| [Konomi](http://konomi.network/) | [Pool Lending Module](./konomi.md) | [GitHub](https://github.com/konomi-network) | ☐ | ☒ | ☒ | -| [Acala](https://acala.network/) | [Bodhi:Composable & Innovative Stack for EVM](./project_bodhi.md) | [GitHub](https://github.com/AcalaNetwork/bodhi.js) | ☐ | ☒ | ☒ | -| [Pontem Network](https://pontem.network/) | [Move smart contract pallet](./pontem.md) | [GitHub](https://github.com/dfinance) | ☐ | ☒ | ☒ | -| [SpiderDAO](https://spiderdao.io) | [Hardware-based DAO governance](./SpiderDAO.md) | [GitHub](https://github.com/SpiderDAO) | ☐ | ☐ | ☐ | -| [onfinality](https://onfinality.io) | [Subquery: Open-source tool to process and query data](./subquery.md) | [GitHub](https://github.com/onfinality-io) | ☐ | ☒ | ☒ | -| FOS Foundation LTD | [Pacific store: OpenSea.js on polkadot](./pacific_store.md) | [GitHub](https://github.com/vlbos) | ☐ | ☒ | ☐ | -| [Polkadot Technology Alliance](https://polkachina.org) | [Shadows Network: synthetic assets](./shadows-network.md) | [GitHub](https://github.com/ShadowsNetwork) | ☒ | ☒ | ☐ | -| [BLDG BLOX](https://bldg.app/) | [ESG (Environmental, Social, and Corporate Governance) ratings dashboard](./bldg_app.md) | [GitHub](https://github.com/BLDG-BLOX/) | ☐ | ☐ | ☐ | -| [DEIPWORLD](https://deip.world/) | [IP Management/Governance Module](./deip.md) | [GitHub](https://github.com/DEIPworld) | ☐ | ☒ | ☐ | -| [Deeper.Network](https://deeper.network/) | [Micropayments pallet](./deeper_network.md) | [GitHub](https://github.com/e2chain-dev/deeper-chain) | ☐ | ☒ | ☒ | -| [Evanesco](https://evanesco.org/) | [Private network protocol](./evanesco_networks.md) | [GitHub](https://github.com/Evanesco-Labs) | ☐ | ☒ | ☒ | -| [HugoByte](https://hugobyte.com/) | [Project Aurras: Event Manager](./project_aurras_mvp_phase_1.md) | [GitHub](https://github.com/HugoByte) | ☐ | ☒ | ☒ | -| [Bounce Protocol](https://bounce.finance/) | [Decentralized Auction Protocol](./bounce-protocol.md) | [GitHub](https://github.com/bouncefinance/bounce-network) | ☐ | ☐ | ☐ | +| Team | Project | Link | Terminated | First Delivery | Completed | +| :---------------------------------------------- | :---------------------------------------------------------------------------------------- | :-------------------------------------------------- | :--------- | :------------: | :-------: | +| [Pawn](https://github.com/pawnz0) | [NuLink](./NuLink.md) | [GitHub](https://github.com/pawnz0/NuLink) | ☐ | ☒ | ☒ | +| [Cyril Carlier](https://github.com/CrommVardek) | [Polk-Auction Website](./polk-auction.md) | [GitHub](https://github.com/CrommVardek) | ☐ | ☒ | ☒ | +| [Uddug](https://uddug.com/) | [JuniDB - Peer-to-Peer Databases](./JuniDB.md) | [GitHub](http://github.com/uddugteam/) | ☒ | ☐ | ☐ | +| [Canyon Labs](https://canyon-network.io) | [Permanent decentralized storage Phase 2](./canyon_network.md) | [GitHub](https://github.com/canyon-network) | ☐ | ☒ | ☒ | +| [Skynet Labs](https://siasky.net/) | [Pallet for Decentralized Off-Chain Storage on Skynet](./skynet-substrate-integration.md) | [GitHub](https://gitlab.com/SkynetLabs) | ☐ | ☒ | ☒ | +| [Uniwrap/1001 Group](https://uniwrap.io/) | [Project 1001](./project_1001.md) | [GitHub](https://github.com/uniwrap-protocol) | ☐ | ☐ | ☐ | +| [YibanChen](https://yibanchen.com) | [Notes DApp & Site-Pallet](./yiban_chen1.md) | [GitHub](https://github.com/YibanChen/) | ☐ | ☒ | ☐ | +| [727.ventures](https://727.ventures/) | [OpenBrush - Secure smart-contract development on ink!](./openbrush.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☒ | ☒ | +| [Banksy Finance](http://www.banksy.finance/) | [NFT Pool-Based Lending Hub](./Banksy_Finance.md) | [GitHub](https://github.com/Banksy-Finance) | ☐ | ☐ | ☐ | +| [SubDAO Labs](https://www.subdao.network/) | [PolkaSign - Web3.0 app for electronic agreements](./SubDAO-Chrome-Extension.md) | [GitHub](https://github.com/subdao-network) | ☐ | ☒ | ☒ | +| [Valibre](https://valibre.org) | [People Local Interactions Protocol (PLIP)](./plip.md) | [GitHub](https://github.com/valibre-org/) | ☐ | ☐ | ☐ | +| [Reaudito](https://shivarthu.reaudito.com/#/) | [Shivarthu: A blockchain-based decentralized governance system](./Shivarthu.md) | [GitHub](https://github.com/amiyatulu/shivarthu) | ☐ | ☒ | ☐ | +| Uniscan | [NFT Explorer](./nft_explorer.md) | [GitHub](https://github.com/wuminzhe) | ☐ | ☒ | ☒ | +| [LimeChain](https://limechain.tech) | [Subsembly - Support for GRANDPA](./assemblyscript-scale-codec.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☐ | ☐ | +| [OpenSquare](https://www.opensquare.network) | [Off-chain voting platform](./OpenSquare_paid_qa_protocol.md) | [GitHub](https://github.com/opensquare-network/) | ☐ | ☒ | ☒ | +| [Health Hero](https://www.gohealthhero.com/) | [NFT Product Analytics Suite](./nft_product_analytics_suite.md) | | ☐ | ☐ | ☐ | +| [Tesseract](https://tesseract.one/) | Mobile dApps/Wallet Connection | [GitHub](https://github.com/tesseract-one) | ☐ | ☒ | ☐ | +| [Wow Labz](http://www.wowlabz.com) | [Dot Marketplace](./dot_marketplace.md) | [GitHub](https://github.com/WowLabz) | ☐ | ☒ | ☒ | +| [Perun Network](https://perun.network/) | [Perun Channels - Integration with go-perun](./perun_channels-integration.md) | [GitHub](https://github.com/perun-network/) | ☐ | ☒ | ☒ | +| [InvArchitects](https://www.invarch.io/) | [InvArch - IP Infrastructure for Substrate](./InvArch.md) | [GitHub](https://github.com/InvArch) | ☐ | ☒ | ☒ | +| [SubGame Network](https://subgame.org) | [A decentralized game platform Phase 2](./SubGame_Network_m2.md) | [GitHub](https://github.com/SubGame-Network) | ☐ | ☒ | ☒ | +| [CESS LAB](https://www.cess.cloud/) | [Cumulus Encrypted Storage System (CESS)](./CESS.md) | [GitHub](https://github.com/Cumulus2021/Whitepaper) | ☐ | ☒ | ☒ | +| [CheersLand Labs](https://cheersland.org/) | [Multi-game Platform for Polkadot & Kusama](./cheersland.md) | [GitHub](https://github.com/cheersland) | ☐ | ☐ | ☐ | +| [UNI-ARTS](https://app.uniarts.network/) | [Ruby Substate Client](./rb_substrate_client.md) | [GitHub](https://github.com/uni-arts-chain/sr25519) | ☐ | ☒ | ☐ | +| [Skye Kiwi](https://skye.kiwi/) | [SkyeKiwi Protocol](./skyekiwi-protocol.md) | [GitHub](https://github.com/skyekiwi) | ☐ | ☒ | ☒ | +| [Evercity](https://evercity.io/) | Sustainable Finance Protocol | [GitHub](https://github.com/EvercityEcosystem) | ☐ | ☒ | ☒ | -## 2021 +### 🏄‍♀️ Wave 10 - Second Quarter 2021 +[Menu🔝](#menu) + +| Team | Project | Link | Terminated | First Delivery | Completed | +| :----------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | +| [GamePower](https://gamepower.network) | [NFT Collectibles Wallet](./nft_collectibles_wallet.md) | [GitHub](https://github.com/GamePowerNetwork) | ☐ | ☒ | ☐ | +| [Subspace Labs](https://www.subspace.network/) | [Proof-of-Capacity Consensus for Substrate](./spartan_poc_consensus_module.md) | [GitHub](https://github.com/subspace) | ☐ | ☒ | ☒ | +| [ChainSafe](https://chainsafe.io/) | Go implementation of Cumulus | [GitHub](https://github.com/ChainSafeSystems) | ☐ | ☐ | ☐ | +| [Polkadotters](https://polkadotters.medium.com/) | [Subauction](./subauction.md) | [GitHub](https://github.com/polkadotters/SubAuction) | ☐ | ☒ | ☒ | +| [Phala Network](https://phala.network/) | [Open Node Framework](./open-node-framework.md) | [GitHub](https://github.com/Tenet-X) | ☐ | ☐ | ☐ | +| [Ruby Protocol](http://rubyprotocol.com/) | [Cryptographic Infrastructure for Data Monetization](./RubyProtocol.md) | [GitHub](https://github.com/Ruby-Protocol) | ☐ | ☒ | ☒ | +| [Find Signal Studio PTE. LTD.](https://yieldscan.app/) | [YieldScan Phase 2](./yieldscan_phase_2.md) | [GitHub](https://github.com/yieldscan) | ☐ | ☒ | ☒ | +| [PolkaMusic](https://polkamusic.io/) | [Operating decentralized music businesses on blockchain](./polkamusic.md) | [GitHub](https://github.com/polkamusic/PolkaMusic) | ☐ | ☒ | ☐ | +| [element36](https://element36.io) | [FIAT on-off-ramp](./FIAT-on-off-ramp.md) | [GitHub](https://github.com/element36-io) | ☐ | ☒ | ☐ | +| [Zondax](https://zondax.ch/) | Ledger Asset App | [GitHub](https://github.com/Zondax) | ☐ | ☒ | ☒ | +| [Moonbeam Network](https://moonbeam.network/) | [Pallet-dPoS for Parachain Staking](./parachain-staking.md) | [GitHub](https://github.com/PureStake/moonbeam) | ☐ | ☒ | ☒ | +| [Dora Factory](https://dorafactory.org/) | [MolochDAO substrate pallets v1 and v2](./dora-factory-molochdao-v1-v2.md) | [GitHub](https://github.com/DoraFactory) | ☐ | ☒ | ☐ | +| BCANN | [Blockchain system for Assigned Names And Numbers](./BCANN.md) | [GitHub](https://github.com/weitaolee) | ☐ | ☐ | ☐ | +| [MyBank Labs](https://mybank.network/) | [Platform Bank, Social Network Bank, MyDeX and Credit Scoring System](./mybank.md) | [GitHub](https://github.com/mybank-network/mybank-network) | ☐ | ☐ | ☐ | +| [ChainBridge Network](https://github.com/ChainBridgeNetworkTeam) | [Doter: A browser extension wallet for Polkadot](./Doter.md) | [GitHub](https://github.com/ChainBridgeNetworkTeam) | ☐ | ☒ | ☒ | +| [SubDAO Labs](https://www.subdao.network/) | [SubDAO Chrome Extension](./SubDAO-Chrome-Extension.md) | [GitHub](https://github.com/subdao-network) | ☐ | ☒ | ☒ | +| [Sukhavati Labs](https://sukhavati.io/) | [Sukhavati PoC Module](./sukhavati_poc_module.md) | [GitHub](https://github.com/Sukhavati-Labs) | ☐ | ☐ | ☐ | +| [HypeLabs Inc.](https://hypelabs.io) | [UpLink - Decentralized and infrastructure-free approach to peer-to-peer connectivity](./uplink.md) | [GitHub](https://github.com/Hype-Labs) | ☐ | ☐ | ☐ | +| Jackson Harris III | [Staking Rewards Viewer](./staking-rewards-collector-front-end.md) | [GitHub](https://github.com/jackson-harris-iii/staking-rewards-viewer) | ☐ | ☐ | ☐ | +| [Klevoya](https://klevoya.com/) | [WASM Smart Contract Fuzzer](./klevoya_fuzzer.md) | [GitHub](https://github.com/klevoya/) | ☐ | ☐ | ☐ | +| [Perun Network](https://perun.network/) | [Perun Channels](./perun_channels.md) | [GitHub](https://github.com/perun-network/) | ☐ | ☒ | ☒ | +| [NewOmega](https://github.com/WiktorStarczewski/newomega.trinity ) | [A blockchain game that cannot be shut down (Milestone 3 and 4)](./newomega-m3m4.md) | [GitHub](https://github.com/WiktorStarczewski/newomega.trinity ) | ☐ | ☒ | ☒ | +| [Webb Tech](https://www.webb.tools/) | [Webb Mixer Extended](./MIXERv2.md) | [GitHub](https://github.com/webb-tools) | ☐ | ☒ | ☒ | +| [Ajuna](https://ajuna.io/) | [UnitySDK for Substrate](./ajuna_network_follow_up.md) | [GitHub](https://github.com/JetonNetwork) | ☐ | ☒ | ☐ | +| [Canyon Labs](https://canyon-network.io) | Permanent decentralized storage | [GitHub](https://github.com/canyon-network) | ☐ | ☒ | ☒ | +| [ZeroDAO Network](https://zerodao.net/) | [Decentralised reputation systems and social networks](./ZeroDAO_Network.md) | [GitHub](https://github.com/ZeroDAO) | ☐ | ☒ | ☒ | +| [Stake Technologies](https://stake.co.jp/) | [ZK Plonk Pallet](./zk-plonk.md) | [GitHub](https://github.com/PlasmNetwork) | ☐ | ☒ | ☒ | +| [CryptoLab](https://www.cryptolab.network) | [Staking Reward Collector](./cryptolab-staking-reward-collector-front-end.md) | [GitHub](https://github.com/cryptolab-network) | ☐ | ☒ | ☒ | +| [Yatima Inc](https://github.com/yatima-inc/yatima) | [Lambda-VM and programming language for Substrate](./yatima.md) | [GitHub](https://github.com/yatima-inc/yatima) | ☐ | ☒ | ☒ | ### 🏄‍♀️ Wave 9 - First Quarter 2021 +[Menu🔝](#menu) | Team | Project | Link | Terminated | First Delivery | Completed | | :---------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -316,290 +372,260 @@ Use this page for an overview of all public grants and their status. Use the sid | [Vera](https://veraprotocol.org/) | [NFT Lending + Exchange](./vera_defi.md) | [GitHub](https://github.com/veraprotocol) | ☐ | ☒ | ☒ | | [Parallel Finance](https://parallel.fi/#/) | [Decentralized lending/borrowing and staking protocol](./Parallel.md) | [GitHub](https://github.com/parallel-finance/parallel) | ☐ | ☒ | ☒ | -### 🏄‍♀️ Wave 10 - Second Quarter 2021 +## 2020 -| Team | Project | Link | Terminated | First Delivery | Completed | -| :----------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | -| [GamePower](https://gamepower.network) | [NFT Collectibles Wallet](./nft_collectibles_wallet.md) | [GitHub](https://github.com/GamePowerNetwork) | ☐ | ☒ | ☐ | -| [Subspace Labs](https://www.subspace.network/) | [Proof-of-Capacity Consensus for Substrate](./spartan_poc_consensus_module.md) | [GitHub](https://github.com/subspace) | ☐ | ☒ | ☒ | -| [ChainSafe](https://chainsafe.io/) | Go implementation of Cumulus | [GitHub](https://github.com/ChainSafeSystems) | ☐ | ☐ | ☐ | -| [Polkadotters](https://polkadotters.medium.com/) | [Subauction](./subauction.md) | [GitHub](https://github.com/polkadotters/SubAuction) | ☐ | ☒ | ☒ | -| [Phala Network](https://phala.network/) | [Open Node Framework](./open-node-framework.md) | [GitHub](https://github.com/Tenet-X) | ☐ | ☐ | ☐ | -| [Ruby Protocol](http://rubyprotocol.com/) | [Cryptographic Infrastructure for Data Monetization](./RubyProtocol.md) | [GitHub](https://github.com/Ruby-Protocol) | ☐ | ☒ | ☒ | -| [Find Signal Studio PTE. LTD.](https://yieldscan.app/) | [YieldScan Phase 2](./yieldscan_phase_2.md) | [GitHub](https://github.com/yieldscan) | ☐ | ☒ | ☒ | -| [PolkaMusic](https://polkamusic.io/) | [Operating decentralized music businesses on blockchain](./polkamusic.md) | [GitHub](https://github.com/polkamusic/PolkaMusic) | ☐ | ☒ | ☐ | -| [element36](https://element36.io) | [FIAT on-off-ramp](./FIAT-on-off-ramp.md) | [GitHub](https://github.com/element36-io) | ☐ | ☒ | ☐ | -| [Zondax](https://zondax.ch/) | Ledger Asset App | [GitHub](https://github.com/Zondax) | ☐ | ☒ | ☒ | -| [Moonbeam Network](https://moonbeam.network/) | [Pallet-dPoS for Parachain Staking](./parachain-staking.md) | [GitHub](https://github.com/PureStake/moonbeam) | ☐ | ☒ | ☒ | -| [Dora Factory](https://dorafactory.org/) | [MolochDAO substrate pallets v1 and v2](./dora-factory-molochdao-v1-v2.md) | [GitHub](https://github.com/DoraFactory) | ☐ | ☒ | ☐ | -| BCANN | [Blockchain system for Assigned Names And Numbers](./BCANN.md) | [GitHub](https://github.com/weitaolee) | ☐ | ☐ | ☐ | -| [MyBank Labs](https://mybank.network/) | [Platform Bank, Social Network Bank, MyDeX and Credit Scoring System](./mybank.md) | [GitHub](https://github.com/mybank-network/mybank-network) | ☐ | ☐ | ☐ | -| [ChainBridge Network](https://github.com/ChainBridgeNetworkTeam) | [Doter: A browser extension wallet for Polkadot](./Doter.md) | [GitHub](https://github.com/ChainBridgeNetworkTeam) | ☐ | ☒ | ☒ | -| [SubDAO Labs](https://www.subdao.network/) | [SubDAO Chrome Extension](./SubDAO-Chrome-Extension.md) | [GitHub](https://github.com/subdao-network) | ☐ | ☒ | ☒ | -| [Sukhavati Labs](https://sukhavati.io/) | [Sukhavati PoC Module](./sukhavati_poc_module.md) | [GitHub](https://github.com/Sukhavati-Labs) | ☐ | ☐ | ☐ | -| [HypeLabs Inc.](https://hypelabs.io) | [UpLink - Decentralized and infrastructure-free approach to peer-to-peer connectivity](./uplink.md) | [GitHub](https://github.com/Hype-Labs) | ☐ | ☐ | ☐ | -| Jackson Harris III | [Staking Rewards Viewer](./staking-rewards-collector-front-end.md) | [GitHub](https://github.com/jackson-harris-iii/staking-rewards-viewer) | ☐ | ☐ | ☐ | -| [Klevoya](https://klevoya.com/) | [WASM Smart Contract Fuzzer](./klevoya_fuzzer.md) | [GitHub](https://github.com/klevoya/) | ☐ | ☐ | ☐ | -| [Perun Network](https://perun.network/) | [Perun Channels](./perun_channels.md) | [GitHub](https://github.com/perun-network/) | ☐ | ☒ | ☒ | -| [NewOmega](https://github.com/WiktorStarczewski/newomega.trinity ) | [A blockchain game that cannot be shut down (Milestone 3 and 4)](./newomega-m3m4.md) | [GitHub](https://github.com/WiktorStarczewski/newomega.trinity ) | ☐ | ☒ | ☒ | -| [Webb Tech](https://www.webb.tools/) | [Webb Mixer Extended](./MIXERv2.md) | [GitHub](https://github.com/webb-tools) | ☐ | ☒ | ☒ | -| [Ajuna](https://ajuna.io/) | [UnitySDK for Substrate](./ajuna_network_follow_up.md) | [GitHub](https://github.com/JetonNetwork) | ☐ | ☒ | ☐ | -| [Canyon Labs](https://canyon-network.io) | Permanent decentralized storage | [GitHub](https://github.com/canyon-network) | ☐ | ☒ | ☒ | -| [ZeroDAO Network](https://zerodao.net/) | [Decentralised reputation systems and social networks](./ZeroDAO_Network.md) | [GitHub](https://github.com/ZeroDAO) | ☐ | ☒ | ☒ | -| [Stake Technologies](https://stake.co.jp/) | [ZK Plonk Pallet](./zk-plonk.md) | [GitHub](https://github.com/PlasmNetwork) | ☐ | ☒ | ☒ | -| [CryptoLab](https://www.cryptolab.network) | [Staking Reward Collector](./cryptolab-staking-reward-collector-front-end.md) | [GitHub](https://github.com/cryptolab-network) | ☐ | ☒ | ☒ | -| [Yatima Inc](https://github.com/yatima-inc/yatima) | [Lambda-VM and programming language for Substrate](./yatima.md) | [GitHub](https://github.com/yatima-inc/yatima) | ☐ | ☒ | ☒ | +### 🏄‍♀️ Wave 8 - Fourth Quarter 2020 +[Menu🔝](#menu) -### 🏄‍♀️ Wave 11 - Third Quarter 2021 +| Team | Project | Link | Terminated | First Delivery | Completed | +| :---------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------- | :--------- | :------------: | :-------: | +| [Sean Young](https://www.mess.org/) | Solidity to WASM compiler Phase 2 | [GitHub](https://github.com/hyperledger-labs/solang) | ☐ | ☒ | ☒ | +| [Nuclei Studio](https://nuclei.studio/) | [Governance OS](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/nuclei_governance_os.md) | [GitHub](https://github.com/NucleiStudio) | ☐ | ☒ | ☒ | +| [NBLTrust](https://www.nbltrust.com/#/en/home) | [Dart SCALE Codec](./dart-scale-codec.md) | [GitHub](https://github.com/nbltrust/dart-scale-codec) | ☐ | ☒ | ☒ | +| [Nsure.Network](https://nsure.network/) | [Open Insurance Platform for Open Finance](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/nsure_network.md) | [GitHub](https://github.com/nsure-tech) | ☐ | ☒ | ☐ | +| [Kylin Network](https://kylin.network/) | [Cross-chain Platform for the Data Economy](./kylin_network.md) | [GitHub](https://github.com/Kylin-Network) | ☐ | ☒ | ☒ | +| [Bit.Country](http://bit.country/) | [A decentralized world](./bit_country.md) | [GitHub](https://github.com/bit-country) | ☐ | ☒ | ☒ | +| [MIDL.dev](https://MIDL.dev) | [Polkashots.io: Snapshot website for Polkadot and Kusama](./polkashots.md) | [GitHub](https://github.com/midl-dev) | ☐ | ☒ | ☒ | +| [Ares Protocol](https://www.aresprotocol.com/) | [Decentralized Oracle Protocol](./ares_protocol.md) | [GitHub](https://github.com/aresprotocols/ares) | ☐ | ☒ | ☒ | +| [Saito](https://saito.io/) | [Polkadot Gaming Protocol and Library](./saito-game-protocol-and-engine.md) | [GitHub](https://github.com/SaitoTech) | ☐ | ☒ | ☐ | +| [LimeChain](https://github.com/LimeChain) | [Subsembly: Framework for building AssemblyScript Runtimes](./research-feasibility-go-runtime.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☒ | ☐ | +| [Wificoin](https://wificoin.com/) | [PESA: On-ramp/off-ramp to crypto/local currencies for Polkadot](./pesa_pallet.md) | | ☐ | ☐ | ☐ | +| [WalletConnect](https://walletconnect.org/) | Open protocol for connecting Wallets to Dapps | [GitHub](https://github.com/walletconnect) | ☐ | ☒ | ☐ | +| [Citadel.one](https://citadel.one/) | Non-custodial Proof-of-Stake platform | | ☐ | ☒ | ☒ | +| [Geometry Labs](https://geometrylabs.io/) | [Load Balanced Endpoints Phase 2](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/load_balanced_endpoints_operations.md) | [GitHub](https://github.com/geometry-labs) | ☐ | ☒ | ☒ | +| [MAP labs](https://www.maplabs.io/) | [Map Bridge: Connect Polkadot and other PoW chains](./MAP-Bridge.md) | [GitHub](https://github.com/Philasande-map/mapbridge) | ☒ | ☐ | ☐ | +| [RareLink](http://rarelink.network/) | [Dynamic non-fungible token (NFT) Protocol](./RareLink.md) | [GitHub](https://github.com/RareLink) | ☐ | ☐ | ☐ | +| [Cere Network](http://cere.network/) | [Turnkey Private Blockchain Network](./Cere_Turnkey_Private_Blockchain_Network.md) | [GitHub](https://github.com/Cerebellum-Network) | ☐ | ☒ | ☒ | +| [SubDAO Labs](https://www.subdao.network/) | [SubDAO is a Cross-chain Platform to link DAO and DApp on Polkadot](./SubDAO-Chrome-Extension.md) | [GitHub](https://github.com/subdao-network) | ☐ | ☒ | ☒ | +| [Idavoll Network](https://idavoll.network/) | [Decentralized organization platform](./Idavoll%20Network.md) | [GitHub](https://github.com/idavollnetwork) | ☐ | ☒ | ☒ | +| [Zenlink](https://zenlink.pro/) | [DEX Ink! smart contract](./zenlink-smart-contract.md) | [GitHub](https://github.com/zenlinkpro/zenlink_dex_module) | ☐ | ☐ | ☐ | +| [Setheum](https://setheum.xyz/) | [Setheum Elastic Reserve Protocol](./setheum.md) | [GitHub](https://github.com/Setheum-Labs/Setheum) | ☒ | ☐ | ☐ | +| [Everstake](https://everstake.one/) | [DKG msig wallet](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Rabin_DKG_Library.md) | [GitHub](https://github.com/everstake) | ☐ | ☐ | ☐ | +| [Coinversation](http://coinversation.cn/) | [Decentralized exchange for trading synthetic assets](./Coinversation.md) | [GitHub](https://github.com/Coinversation) | ☒ | ☐ | ☐ | +| [Manta Network](https://www.manta.network/) | [A Privacy Preserving Decentralized Exchange](./manta_network.md) | [GitHub](https://github.com/Manta-Network) | ☐ | ☒ | ☐ | +| [Stake Technologies](https://stake.co.jp/en/) | [ZK Rollups Pallet](./zk-rollups.md) | [GitHub](https://github.com/staketechnologies) | ☐ | ☒ | ☐ | +| [Apron Network](https://apron.network/) | [Decentralized infrastructure provider](./Apron_Network.md) | [GitHub](https://github.com/apron-network) | ☐ | ☒ | ☒ | +| [Pocket 4D](https://pocket4d.io) | [Substrate Dart API client](./Polkadot-Dart.md) | [GitHub](https://github.com/Pocket4D) | ☐ | ☒ | ☐ | +| [Listen](https://listen.io/) | [Decentralized social network focusing on sound](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Listen.md) | [GitHub](https://github.com/ListenTeam) | ☒ | ☐ | ☐ | +| [Protofire](https://protofire.io/) | Polkadot Mempool Explorer | [GitHub](https://github.com/protofire) | ☐ | ☒ | ☒ | +| [Fuzhou Wakanda Information Technology](https://www.heizuan.com/) | Black Diamond Wallet | [GitHub](https://github.com/bdwallet) | ☐ | ☐ | ☐ | +| [Konomi](http://konomi.network/) | [Pool Lending Module](./konomi.md) | [GitHub](https://github.com/konomi-network) | ☐ | ☒ | ☒ | +| [Acala](https://acala.network/) | [Bodhi:Composable & Innovative Stack for EVM](./project_bodhi.md) | [GitHub](https://github.com/AcalaNetwork/bodhi.js) | ☐ | ☒ | ☒ | +| [Pontem Network](https://pontem.network/) | [Move smart contract pallet](./pontem.md) | [GitHub](https://github.com/dfinance) | ☐ | ☒ | ☒ | +| [SpiderDAO](https://spiderdao.io) | [Hardware-based DAO governance](./SpiderDAO.md) | [GitHub](https://github.com/SpiderDAO) | ☐ | ☐ | ☐ | +| [onfinality](https://onfinality.io) | [Subquery: Open-source tool to process and query data](./subquery.md) | [GitHub](https://github.com/onfinality-io) | ☐ | ☒ | ☒ | +| FOS Foundation LTD | [Pacific store: OpenSea.js on polkadot](./pacific_store.md) | [GitHub](https://github.com/vlbos) | ☐ | ☒ | ☐ | +| [Polkadot Technology Alliance](https://polkachina.org) | [Shadows Network: synthetic assets](./shadows-network.md) | [GitHub](https://github.com/ShadowsNetwork) | ☒ | ☒ | ☐ | +| [BLDG BLOX](https://bldg.app/) | [ESG (Environmental, Social, and Corporate Governance) ratings dashboard](./bldg_app.md) | [GitHub](https://github.com/BLDG-BLOX/) | ☐ | ☐ | ☐ | +| [DEIPWORLD](https://deip.world/) | [IP Management/Governance Module](./deip.md) | [GitHub](https://github.com/DEIPworld) | ☐ | ☒ | ☐ | +| [Deeper.Network](https://deeper.network/) | [Micropayments pallet](./deeper_network.md) | [GitHub](https://github.com/e2chain-dev/deeper-chain) | ☐ | ☒ | ☒ | +| [Evanesco](https://evanesco.org/) | [Private network protocol](./evanesco_networks.md) | [GitHub](https://github.com/Evanesco-Labs) | ☐ | ☒ | ☒ | +| [HugoByte](https://hugobyte.com/) | [Project Aurras: Event Manager](./project_aurras_mvp_phase_1.md) | [GitHub](https://github.com/HugoByte) | ☐ | ☒ | ☒ | +| [Bounce Protocol](https://bounce.finance/) | [Decentralized Auction Protocol](./bounce-protocol.md) | [GitHub](https://github.com/bouncefinance/bounce-network) | ☐ | ☐ | ☐ | -| Team | Project | Link | Terminated | First Delivery | Completed | -| :---------------------------------------------- | :---------------------------------------------------------------------------------------- | :-------------------------------------------------- | :--------- | :------------: | :-------: | -| [Pawn](https://github.com/pawnz0) | [NuLink](./NuLink.md) | [GitHub](https://github.com/pawnz0/NuLink) | ☐ | ☒ | ☒ | -| [Cyril Carlier](https://github.com/CrommVardek) | [Polk-Auction Website](./polk-auction.md) | [GitHub](https://github.com/CrommVardek) | ☐ | ☒ | ☒ | -| [Uddug](https://uddug.com/) | [JuniDB - Peer-to-Peer Databases](./JuniDB.md) | [GitHub](http://github.com/uddugteam/) | ☒ | ☐ | ☐ | -| [Canyon Labs](https://canyon-network.io) | [Permanent decentralized storage Phase 2](./canyon_network.md) | [GitHub](https://github.com/canyon-network) | ☐ | ☒ | ☒ | -| [Skynet Labs](https://siasky.net/) | [Pallet for Decentralized Off-Chain Storage on Skynet](./skynet-substrate-integration.md) | [GitHub](https://gitlab.com/SkynetLabs) | ☐ | ☒ | ☒ | -| [Uniwrap/1001 Group](https://uniwrap.io/) | [Project 1001](./project_1001.md) | [GitHub](https://github.com/uniwrap-protocol) | ☐ | ☐ | ☐ | -| [YibanChen](https://yibanchen.com) | [Notes DApp & Site-Pallet](./yiban_chen1.md) | [GitHub](https://github.com/YibanChen/) | ☐ | ☒ | ☐ | -| [727.ventures](https://727.ventures/) | [OpenBrush - Secure smart-contract development on ink!](./openbrush.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☒ | ☒ | -| [Banksy Finance](http://www.banksy.finance/) | [NFT Pool-Based Lending Hub](./Banksy_Finance.md) | [GitHub](https://github.com/Banksy-Finance) | ☐ | ☐ | ☐ | -| [SubDAO Labs](https://www.subdao.network/) | [PolkaSign - Web3.0 app for electronic agreements](./SubDAO-Chrome-Extension.md) | [GitHub](https://github.com/subdao-network) | ☐ | ☒ | ☒ | -| [Valibre](https://valibre.org) | [People Local Interactions Protocol (PLIP)](./plip.md) | [GitHub](https://github.com/valibre-org/) | ☐ | ☐ | ☐ | -| [Reaudito](https://shivarthu.reaudito.com/#/) | [Shivarthu: A blockchain-based decentralized governance system](./Shivarthu.md) | [GitHub](https://github.com/amiyatulu/shivarthu) | ☐ | ☒ | ☐ | -| Uniscan | [NFT Explorer](./nft_explorer.md) | [GitHub](https://github.com/wuminzhe) | ☐ | ☒ | ☒ | -| [LimeChain](https://limechain.tech) | [Subsembly - Support for GRANDPA](./assemblyscript-scale-codec.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☐ | ☐ | -| [OpenSquare](https://www.opensquare.network) | [Off-chain voting platform](./OpenSquare_paid_qa_protocol.md) | [GitHub](https://github.com/opensquare-network/) | ☐ | ☒ | ☒ | -| [Health Hero](https://www.gohealthhero.com/) | [NFT Product Analytics Suite](./nft_product_analytics_suite.md) | | ☐ | ☐ | ☐ | -| [Tesseract](https://tesseract.one/) | Mobile dApps/Wallet Connection | [GitHub](https://github.com/tesseract-one) | ☐ | ☒ | ☐ | -| [Wow Labz](http://www.wowlabz.com) | [Dot Marketplace](./dot_marketplace.md) | [GitHub](https://github.com/WowLabz) | ☐ | ☒ | ☒ | -| [Perun Network](https://perun.network/) | [Perun Channels - Integration with go-perun](./perun_channels-integration.md) | [GitHub](https://github.com/perun-network/) | ☐ | ☒ | ☒ | -| [InvArchitects](https://www.invarch.io/) | [InvArch - IP Infrastructure for Substrate](./InvArch.md) | [GitHub](https://github.com/InvArch) | ☐ | ☒ | ☒ | -| [SubGame Network](https://subgame.org) | [A decentralized game platform Phase 2](./SubGame_Network_m2.md) | [GitHub](https://github.com/SubGame-Network) | ☐ | ☒ | ☒ | -| [CESS LAB](https://www.cess.cloud/) | [Cumulus Encrypted Storage System (CESS)](./CESS.md) | [GitHub](https://github.com/Cumulus2021/Whitepaper) | ☐ | ☒ | ☒ | -| [CheersLand Labs](https://cheersland.org/) | [Multi-game Platform for Polkadot & Kusama](./cheersland.md) | [GitHub](https://github.com/cheersland) | ☐ | ☐ | ☐ | -| [UNI-ARTS](https://app.uniarts.network/) | [Ruby Substate Client](./rb_substrate_client.md) | [GitHub](https://github.com/uni-arts-chain/sr25519) | ☐ | ☒ | ☐ | -| [Skye Kiwi](https://skye.kiwi/) | [SkyeKiwi Protocol](./skyekiwi-protocol.md) | [GitHub](https://github.com/skyekiwi) | ☐ | ☒ | ☒ | -| [Evercity](https://evercity.io/) | Sustainable Finance Protocol | [GitHub](https://github.com/EvercityEcosystem) | ☐ | ☒ | ☒ | +### 🏄‍♀️ Wave 7 - Third Quarter 2020 +[Menu🔝](#menu) -### 🏄‍♀️ Wave 12 - Fourth Quarter 2021 +| Team | Project | Link | Terminated | First Delivery | Completed | +| :--------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------- | :--------- | :------------: | :-------: | +| [Halva](https://github.com/halva-suite) | [A toolchain for improving the experience of developing Decentralized Applications based on Substrate](./halva_framework.md) | [GitHub](https://github.com/halva-suite) | ☐ | ☒ | ☒ | +| [Subscan](https://subscan.io) | [Substrate explorer](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/subscan_grant_application.md) | [GitHub](https://github.com/subscan-explorer/subscan-essentials) | ☐ | ☒ | ☒ | +| [t3rn](https://github.com/t3rn/t3rn) | [A protocol for blockchain interoperability](./xbi-format-psp-t3rn.md) | [GitHub](https://github.com/t3rn/t3rn) | ☐ | ☒ | ☒ | +| [Stake Technologies](https://stake.co.jp/) | [Hardware ECDSA for Polkadot JS](https://github.com/w3f/Grants-Program/blob/master/applications/polkadotjs-hardware.md) | [GitHub](https://github.com/polkadot-js) | ☐ | ☒ | ☒ | +| [Protofire](https://protofire.io/) | Failover mechanism for validators upgrade | [GitHub](https://github.com/protofire) | ☐ | ☒ | ☐ | +| [DappForce](http://dappforce.io) | [SubSocial Chapter 2](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Subsocial-2.md) | [GitHub](https://github.com/dappforce/dappforce-subsocial) | ☐ | ☒ | ☒ | +| [OpenSquare Network](https://www.opensquare.network/) | [A blockchain based crowdsourcing and reputation platform](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/open_square_network.md) | [GitHub](https://github.com/opensquare-network) | ☐ | ☒ | ☒ | +| [Cardinals](https://cardinals.cc/) | [Threshold BLS Randomness Beacon for Substrate](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Threshold%20BLS%20Randomness%20Beacon%20for%20Substrate.md) | [GitLab](https://gitlab.com/cardinals1/threshold-ecdsa) | ☐ | ☒ | ☒ | +| [KILT](https://kilt.io/) | Polimec: A Fundraising Mechanism for Projects within the Polkadot Ecosystem | [GitHub](https://github.com/KILTprotocol) | ☐ | ☐ | ☐ | +| [Simply VC](https://simply-vc.com.mt/) | [P.A.N.I.C. Phase 2](./panic.md) | [GitHub](https://github.com/SimplyVC/panic_polkadot) | ☐ | ☐ | ☐ | +| [Interlay](https://www.interlay.io/) | Trustless BTC-Polkadot Bridge | [GitLab](https://gitlab.com/interlay) | ☐ | ☒ | ☐ | +| [DodoRare](https://github.com/enfipy) | [Crossbow: Mobile Game Framework for Substrate](./crossbow.md) | [GitHub](https://github.com/dodorare/crossbow) | ☐ | ☒ | ☒ | +| [Halva](https://github.com/halva-suite) | [Halva: Bootstrapping and Scaffolding](./halva_bootstrapping.md) | [GitHub](https://github.com/halva-suite) | ☐ | ☒ | ☒ | +| [Sunshine Systems](https://sunshine.foundation) | [Sunshine Keybase](./sunshine-keybase.md) | [GitHub](https://github.com/sunshine-protocol) | ☐ | ☒ | ☒ | +| [Subscan](https://subscan.io) | [Multi-signature Management Tool](./multisignature_management_tool.md) | [GitHub](https://github.com/subscan-explorer/subscan-multisig-react) | ☐ | ☒ | ☒ | +| [Evercity](https://evercity.io/) | Smart Sustainable Bond Protocol (SSB-P) | [GitHub](https://github.com/EvercityEcosystem/Smart-Sustainable-Bond) | ☐ | ☒ | ☒ | +| [Permiurly](http://permiurly.in) | [Polkassembly](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/polkassembly_grant_application.md) | [GitHub](https://github.com/premiurly/polkassembly) | ☐ | ☒ | ☒ | +| [Zeropool](https://zeropool.network/) | [Private transactions on Polkadot](./ZeroPool.md) | [GitHub](https://github.com/zeropoolnetwork) | ☐ | ☒ | ☐ | +| [Polkadex](https://github.com/Polkadex-Substrate) | [A decentralized, peer-peer, cryptocurrency exchange for DeFi ecosystem in Substrate](./polkadex.md) | [GitHub](https://github.com/Polkadex-Substrate/Polkadex) | ☒ | ☒ | ☐ | +| [Fractapp](https://fractapp.com) | [Messenger with crypto wallet](./fractapp.md) | [GitHub](https://github.com/fractapp) | ☐ | ☒ | ☒ | +| [Equilibrium.io](https://equilibrium.io/en) | [All-in-one Interoperable DeFi hub.](./curve_amm.md) | [GitHub](https://github.com/equilibrium-eosdt) | ☐ | ☒ | ☒ | +| [Glacier Blockchain Technology](http://www.gbctech.cn/#/) | [Starks Network](./starks_network.md) | [GitHub](https://github.com/gbctech) | ☐ | ☒ | ☒ | +| [SubDEX](http://subdex.io.s3.eu-west-2.amazonaws.com/index.html) | [A decentralized cross-chain exchange based on AMM](./subdex.md) | [GitHub](https://github.com/subdarkdex) | ☐ | ☒ | ☒ | +| [Zenlink](https://zenlink.pro/) | [A cross-chain DEX network](./zenlink.md) | [GitHub](https://github.com/zenlinkpro/zenlink_dex_module) | ☐ | ☒ | ☒ | +| [Subscript](https://github.com/slickup) | [Substrate smart contract api and sdk in AssemblyScript](./subscript_lang.md) | [GitHub](https://github.com/slickup/subscript) | ☐ | ☒ | ☒ | +| [Tesseract](https://tesseract.one/) | Swift API | [GitHub](https://github.com/tesseract-one) | ☐ | ☒ | ☐ | +| [Cobo](https://cobo.com/) | Cobo Vault | [GitHub](https://github.com/CoboVault) | ☐ | ☒ | ☒ | +| [NodeFactory](https://nodefactory.io/) | [Vedar: Auto-funded public P2P infrastructure (APPI)](https://github.com/w3f/General-Grants-Program/blob/master/grants/rfp-responses/appi.md) | [GitHub](https://github.com/NodeFactoryIo/Vedran) | ☐ | ☒ | ☒ | +| [Adoriasoft](https://adoriasoft.com/) | Cosmos-SDK Parachain Development Kit Phase 2 | [GitHub](https://github.com/adoriasoft/cosmos-sdk) | ☐ | ☒ | ☒ | +| [sup](https://github.com/clearloop/sup) | [Command line tool for generating or upgrading a Substrate node](./sup.md) | [GitHub](https://github.com/clearloop/sup) | ☐ | ☒ | ☒ | +| [Shard Labs](https://shardlabs.io) | [Tip or Donate KSM Embeddable Button](./KSM-embeddable-tip-or-donate-button.md) | [GitHub](https://github.com/Shard-Labs) | ☐ | ☒ | ☒ | -| Team | Project | Link | Terminated | First Delivery | Completed | -| :--------------------------------------------------------- | :---------------------------------------------------------------------------------------- | :------------------------------------------------------------------------- | :--------- | :------------: | :-------: | -| Matthew Darnell | [cScale](./cScale.md) | [GitHub](https://github.com/MatthewDarnell/cScale) | ☐ | ☒ | ☐ | -| [Web3go](https://web3go.xyz/) | [Web3go](./Web3Go.md) | [GitHub](https://github.com/web3go-xyz) | ☐ | ☒ | ☐ | -| [Prosopo Limited](https://prosopo.io) | [Prosopo: Human Verification Marketplace](./prosopo.md) | [GitHub](https://github.com/prosopo-io) | ☐ | ☒ | ☒ | -| [Litentry](https://www.litentry.com) | [Polka SignIn](./PolkaSignIn.md) | [GitHub](https://github.com/litentry) | ☐ | ☐ | ☐ | -| [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib](./php-rpc-lib.md) | [GitHub](https://github.com/gmajor-encrypt/) | ☐ | ☒ | ☒ | -| [logion](https://logion.network/) | [Logion wallet](./logion_wallet.md) | [GitHub](https://github.com/logion-network) | ☐ | ☒ | ☒ | -| [727.ventures](https://727.ventures/) | [OpenBrush - Secure smart-contract development on ink! Phase 2](./openbrush-follow-up.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☒ | ☐ | -| [Nitor Infotech](https://www.nitorinfotech.com/) | [Php substrate api](./php-substrate-api.md) | [GitHub](https://github.com/nitor-infotech-oss) | ☐ | ☒ | ☒ | -| [@agryaznov](https://github.com/agryaznov) | [Candle Auctions on Ink!](./candle_auction_ink.md) | [GitHub](https://github.com/agryaznov/candle-auction-ink) | ☐ | ☒ | ☒ | -| [Iridium Industries](http://www.iridium.industries) | [Iris: Decentralized storage network for substrate-based chains](./iris.md) | [GitHub](https://github.com/iridium-labs/iris) | ☐ | ☒ | ☒ | -| [DICO Team](https://dico.io/) | [DICO: Decentralized and governable ICO platform](./DICO.md) | [GitHub](https://github.com/DICO-TEAM/dico-chain) | ☐ | ☐ | ☐ | -| [DodoRare, Inc.](https://dodorare.com) | [Crossbow - Cross-Platform Rust Toolkit for Games](./faterium.md) | [GitHub](https://github.com/dodorare) | ☐ | ☒ | ☒ | -| [Rainbowcity Foundation](http://www.rainbowcity.io/) | [RainbowDAO Protocol ink! Phase 1](./RainbowDAO%20Protocol%20ink%20Phase%201.md) | [GitHub](https://github.com/RainbowcityFoundation/RainbowcityDAO) | ☐ | ☒ | ☒ | -| [Web Registry DAO](https://www.wika.network) | [Wika Network](./wika_network.md) | [GitHub](https://github.com/randombishop/wika_node) | ☐ | ☒ | ☐ | -| [Helikon Labs](http://www.helikon.tech/) | [SubVT Telegram Bot for Kusama and Polkadot](./subvt-telegram-bot.md) | [GitHub](https://github.com/helikon-labs/polkadot-kusama-1kv-telegram-bot) | ☐ | ☒ | ☒ | -| [Elamin LTD](http://imbue.network/) | [Imbue Network](./imbue_network.md) | [GitHub](https://github.com/ImbueNetwork) | ☐ | ☒ | ☒ | -| [Koi Metaverse](https://koi.io/) | [Building the Digital Collectibles Platform for Virtual GameFi NFTs](./Koiverse.md) | [GitHub](https://github.com/KoiMetaverse) | ☐ | ☐ | ☐ | -| [Health Hero](https://www.gohealthhero.com/) | [Decentralized Well-being Game API](./decentralized_well-being_game_api.md) | [GitHub](https://github.com/iumairazhar) | ☐ | ☐ | ☐ | -| [UNIVERSALDOT FOUNDATION](https://universaldot.foundation) | [A freelancing decentralized application](./universaldot.me.md) | [GitHub](https://github.com/UniversalDot) | ☐ | ☒ | ☒ | -| [AdMeta](https://admeta.network/) | [A privacy-preserving Ad Platform](./AdMeta.md) | [GitHub](https://github.com/AdMetaNetwork/admeta) | ☐ | ☒ | ☒ | -| Crypto Pay Lab (CPL)) | [Dotpay a github paid task platform using DOT](./DotPay.md) | [GitHub](https://github.com/bytepayment) | ☐ | ☒ | ☐ | +### 🏄‍♀️ Wave 6 - Second Quarter 2020 +[Menu🔝](#menu) -## 2022 +| Team | Project | Link | Terminated | First Delivery | Completed | +| :-------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------- | :--------- | :------------: | :-------: | +| [Protofire](https://protofire.io/) | Failover mechanism for validators | [GitHub](https://github.com/protofire) | ☐ | ☒ | ☒ | +| [HashQuark](https://www.hashquark.io/) | Validator Dashboard Phase 2 | [GitHub](https://github.com/hashquark-io) | ☐ | ☒ | ☒ | +| [BUIDL Labs](https://buidllabs.io/) | [YieldScan Staking Dashboard](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/YieldScan.md) | [GitHub](https://github.com/buidl-labs) | ☐ | ☒ | ☒ | +| BoBao Technologies | [PolkaKey an electron app to generate Polkadot addresses + tutorials](./PolkaKey.md) | [GitHub](https://github.com/w3finance/PolkaKey) | ☐ | ☒ | ☐ | +| [Webassembly Security](https://webassembly-security.com/) | [Improving security and resilience of WebAssembly runtimes](./wasm_runtimes_fuzzing.md) | [GitHub](https://github.com/pventuzelo/wasm_runtimes_fuzzing) | ☐ | ☒ | ☒ | +| [Finoa](https://finoa.io/) | C library for Substrate | [GitHub](https://github.com/finoabanking/substrate-c-tool) | ☐ | ☒ | ☒ | +| [Crust Network](https://crust.network/) | Incentive layer protocol for decentralized storage | [GitHub](https://github.com/crustio) | ☐ | ☒ | ☒ | +| [ETCDEV](https://emeraldpay.io/) | Polkadot Java Client | [GitHub](https://github.com/emeraldpay) | ☐ | ☒ | ☒ | +| [Zondax](http://zondax.ch/) | Ledger app for Polkadot/Kusama Phase 2 | [GitHub](https://github.com/ZondaX/ledger-polkadot) | ☐ | ☒ | ☒ | +| [Soramitsu](https://soramitsu.co.jp/) | Hyperledger Iroha Bridge | [GitHub](https://github.com/sora-xor/polkaswap-web) | ☐ | ☒ | ☒ | +| [LimeChain](https://github.com/LimeChain) | [AssemblyScript SCALE Codec](./assemblyscript-scale-codec.md) | [GitHub](https://github.com/LimeChain/as-scale-codec) | ☐ | ☒ | ☒ | +| [Insight](https://insightfellows.com/) | [Load Balanced Endpoints](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/load_balanced_endpoints_operations.md) | [GitHub](https://github.com/insight-w3f/terragrunt-polkadot) | ☐ | ☒ | ☒ | +| [Ethworks](https://ethworks.io/) | [Polkadot.{js} Desktop Application](./polkadot-desktop-app.md) | [GitHub](https://github.com/EthWorks/) | ☐ | ☒ | ☒ | +| [Usetech](http://usetech.com/blockchain.html) | NFT Tracking Module | [GitHub](https://github.com/usetech-llc/nft_parachain) | ☐ | ☒ | ☒ | +| [Chevdor](https://www.chevdor.com/) | Polkabot | [GitHub](https://github.com/chevdor) | ☐ | ☒ | ☒ | +| [Aleksandr Krupenkin](https://github.com/akru) | [Haskell Web3 library](./hs-web3.md) | [GitHub](https://github.com/airalab/hs-web3) | ☐ | ☒ | ☒ | +| [WEB3SCAN](https://www.web3scan.com/) | [Polkascan Signer Interfaces](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/polkascan_signer_interfaces.md) | [GitHub](https://github.com/polkascan) | ☐ | ☒ | ☒ | +| [Fortmatic](https://fortmatic.com/) | SDK + Burner Wallet to implement Web 2.0 login for dapps | [GitHub](https://github.com/fortmatic) | ☐ | ☐ | ☐ | +| [PureStake](https://www.purestake.com/) | [Web3 Compatible API](./web3-compatible-api.md) | [GitHub](https://github.com/PureStake) | ☐ | ☒ | ☒ | +| [Phala.Network](https://phala.network/) | [Web3 Analytics](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/web3_analytics.md) | [GitHub](https://github.com/Phala-Network/) | ☐ | ☐ | ☐ | +| [TerenceGe](https://github.com/TerenceGe) | [C implementation of Schnorrkel](./sr25519_donna.md) | [GitHub](https://github.com/TerenceGe/sr25519-donna) | ☐ | ☒ | ☒ | +| [Adoriasoft](https://adoriasoft.com/) | Cosmos-SDK Parachain Development Kit | [GitHub](https://github.com/adoriasoft/cosmos-sdk) | ☐ | ☒ | ☒ | +| [Laminar One](https://laminar.one/) | Reusable Libraries: Runtime Modules + Monitoring Framework | [GitHub](https://github.com/open-web3-stack) | ☐ | ☒ | ☒ | +| [Faber](https://github.com/yxf) | [Subwallet: CLI wallet for Polkadot/Substrate](./subwallet.md) | [GitHub](https://github.com/yxf/subwallet) | ☐ | ☒ | ☒ | +| [Equilibrium.co](https://equilibrium.co/) | [offchain::ipfs](./c++polkadot-light-client.md) | [GitHub](https://github.com/eqlabs) | ☐ | ☒ | ☒ | +| [Snowfork](http://www.snowfork.com/) | Ethereum Bridge | [GitHub](https://github.com/snowfork) | ☐ | ☒ | ☒ | +| [Lunie](http://lunie.io/) | [Lunie Governance integration](./lunie.md) | [GitHub](https://github.com/luniehq/lunie) | ☐ | ☒ | ☒ | +| [LimeChain](https://github.com/LimeChain) | [AssemblyScript Runtime](./assemblyscript-scale-codec.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☒ | ☒ | +| [MVP Workshop](https://mvpworkshop.co/) | [Substrate startkit GUI (marketplace for substrate pallets)](./substrate_startkit_GUI.md) | [GitHub](https://github.com/MVPWorkshop) | ☐ | ☒ | ☒ | +| [P2P](https://p2p.org/) | [Multiblockchain ETL](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Multiblockchain%20ETL.md) | [GitHub](https://github.com/p2p-org/polkadot-profit-transformer) | ☐ | ☒ | ☒ | +| [FlexDapps](https://flexdapps.com/) | Gantree Phase 4 | [GitHub](https://github.com/flex-dapps) | ☐ | ☐ | ☐ | +| [Zondax](http://zondax.ch/) | Ledgeracio: A command-line tool and Ledger app designed for staking operations | [GitHub](https://github.com/paritytech/ledgeracio) | ☐ | ☒ | ☒ | +| [Dipole Tech](https://www.dipole.tech) | [Dipole Oracle: Distributed energy resource management](./DipoleOracle.md) | [GitHub](https://github.com/DipoleTech/dipole-oracle) | ☐ | ☒ | ☒ | -### 🏄‍♀️ Wave 13 - First Quarter 2022 +### 🏄‍♀️ Wave 5 - First Quarter 2020 +[Menu🔝](#menu) -| Team | Project | Link | Terminated | First Delivery | Completed | -| :---------------------------------------------------- | :-------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | -| [Chainify](https://github.com/chainify) | [Nolik](./Nolik.md) | [GitHub](https://github.com/chainify) | ☐ | ☒ | ☒ | -| [Pennsylvania State University](https://www.psu.edu/) | Avoiding Rust Deadlocks via Lifetime Visualization | [GitHub](https://songlh.github.io/) | ☐ | ☒ | ☒ | -| [Anagolay](https://anagolay.network/) | [Project Idiyanale](./anagolay-project-idiyanale-phase-1.md) | [GitHub](https://github.com/anagolay) | ☐ | ☒ | ☒ | -| [Fennel Labs](https://fennellabs.com/) | [Fennel Protocol](./Fennel_Protocol.md) | [GitHub](https://github.com/fennelLabs) | ☐ | ☒ | ☒ | -| [Valletech AB](https://valletech.eu/) | [Polkawatch](./Polkawatch.md) | [GitHub](https://gitlab.com/polkawatch) | ☐ | ☒ | ☒ | -| [EzCode](https://ezcode.co/) | [Polkadot.js NoCode Plugin](./polkadotjs_no_code.md) | [GitHub](https://github.com/inartin) | ☐ | ☒ | ☒ | -| [Virto Network](https://virto.network/) | [LIP payments pallet](./lip_payments.md) | [GitHub](https://github.com/virto-network/) | ☐ | ☒ | ☒ | -| [Kami Ekbatanifard](https://github.com/Nick-1979/) | [Polkadot.js Plus Extension](./Plus.md) | [GitHub](https://github.com/Nick-1979/polkadot-Js-Plus-extension/wiki) | ☐ | ☒ | ☒ | -| [Dora Factory](https://dorafactory.org/) | [Multisig UI](./dora-factory-molochdao-v1-v2.md) | [GitHub](https://github.com/DoraFactory) | ☐ | ☒ | ☒ | -| [Blackprint](https://github.com/Blackprint) | [Integrating Polkadot.js with Blackprint](./blackprint-js.md) | [GitHub](https://github.com/Blackprint) | ☐ | ☒ | ☒ | -| [OpenSquare Network](https://www.opensquare.network/) | [OpenSquare Paid QA protocol](./OpenSquare_paid_qa_protocol.md) | [GitHub](https://github.com/opensquare-network/) | ☐ | ☒ | ☒ | -| [@Scale Technologies](https://atscale.xyz) | [Libra - Decentralized Payment Network](./Libra.md) | [GitHub](https://github.com/atscaletech/) | ☐ | ☒ | ☒ | -| [Interstellar](https://www.interstellar.gg/) | [Interstellar - Wallet Phase 1](./Interstellar-Network.md) | [GitHub](https://github.com/Interstellar-Network) | ☐ | ☒ | ☐ | -| [Pendulum](https://pendulumchain.org/) | [Spacewalk: a Stellar bridge](./spacewalk-bridge.md) | [GitHub](https://github.com/pendulum-chain) | ☐ | ☒ | ☐ | -| [Dmitrii Koshelev](https://github.com/dishport) | [Implementation of the new hash function to BLS12 curves](./new_bls12_hash_function.md) | [GitHub](https://github.com/dishport) | ☐ | ☒ | ☒ | -| [Hamster](https://github.com/orgs/hamster-shared) | [Hamster - A decentralized computing network](./hamster.md) | [GitHub](https://github.com/orgs/hamster-shared) | ☐ | ☒ | ☒ | -| [Papers GmbH](https://papers.ch/en/) | Zaturn - A Generic Attestable Oracle parachain Phase 1 | [GitHub](https://github.com/airgap-it) | ☐ | ☐ | ☐ | -| [Slonigiraf](https://www.slonigiraf.org/) | [SLON - a recommendation letter system](./slonigiraf.md) | [GitHub](https://github.com/slonigiraf) | ☐ | ☒ | ☒ | -| [Helixstreet](https://helixstreet.io/) | [Helixstreet Module](./helixstreet.md) | [GitHub](https://github.com/helixstreet) | ☐ | ☐ | ☐ | -| [Cryptoviet](https://team.cryptoviet.com/) | [Gafi Network - The Network of Game Finance](./Gafi.md) | [GitHub](https://github.com/cryptoviet/gafi) | ☐ | ☒ | ☒ | -| [Asylum](https://asylum.space/) | [Metaverse for next generation gaming](./asylum_follow_up_1.md) | [GitHub](https://gitlab.com/asylum-space/) | ☐ | ☒ | ☒ | -| [CESS LAB](https://www.cess.cloud/) | [Data Store Pallet](./ces_data_store.md) | [GitHub](https://github.com/CESSProject/cess) | ☐ | ☒ | ☒ | -| [ChainSafe](https://chainsafe.io/) | [Substrate Core Polywrapper](./substrate_core_polywrapper.md) | [GitHub](https://github.com/polywrap) | ☐ | ☐ | ☐ | -| [Bela Supernova](https://bsn.si/en/home/) | [On-chain cash exchange (OCEX)](./on-chain-cash.md) | | ☐ | ☒ | ☒ | -| [Second State](https://www.secondstate.io/) | [WasmEdge for Substrate](./wasmedge_substrate.md) | [GitHub](https://github.com/wasmedge) | ☐ | ☒ | ☐ | -| [Wow Labz](https://www.wowlabz.com/) | [Dot Marketplace Phase 2](./dot_marketplace-phase2.md) | [GitHub](https://github.com/WowLabz) | ☐ | ☒ | ☒ | -| [Stardust Labs Inc.](https://stardust.finance/) | [Uncollateralized Stablecoin Research and Design](./stardust.md) | [GitHub](https://github.com/adit313/) | ☐ | ☒ | ☒ | -| [Hashed Systems](https://hashed.io) | [Native Bitcoin Vaults (NBV)](./native-bitcoin-vaults.md) | [GitHub](https://github.com/hashed-io) | ☐ | ☒ | ☒ | -| [Setheum](https://setheum.xyz/) | [Setheum HighEnd LaunchPad Crowdsales Module](./setheum.md) | [GitHub](https://github.com/Setheum-Labs) | ☐ | ☐ | ☐ | -| [SaaS3 Lab](https://www.saas3.io) | [SaaS3](./SaaS3.md) | [GitHub](https://github.com/SaaS3Lab) | ☐ | ☐ | ☐ | -| [NUTS Finance](https://nuts.finance) | [DOT-pegged derivative built on top of the stable asset protocol](./stable-asset.md) | [GitHub](https://github.com/nutsfinance/) | ☐ | ☒ | ☒ | -| [Strategy Object](https://strategyobject.com/) | [Substrate Client for Java](./substrate_client_java.md) | [GitHub](https://github.com/strategyobject/substrate-client-java) | ☐ | ☒ | ☐ | +| Team | Project | Link | Terminated | First Delivery | Completed | +| :---------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------- | :--------- | :------------: | :-------: | +| [Bifrost](https://bifrost.finance/) | [EOS interoperable bridge](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/bifrost_network.md) | [GitHub](https://github.com/bifrost-finance) | ☐ | ☒ | ☒ | +| [Entropy Labs](https://entropylabs.hk) | A toolkit for building and deploying applications with substrate | | ☐ | ☒ | ☐ | +| [Papers GmbH](https://airgap.it) | AirGap - Desktop (+mobile) wallet for Polkadot | [GitHub](https://github.com/airgap-it) | ☐ | ☒ | ☒ | +| [Stake Technologies](https://stake.co.jp/) | [Plasm Chain + OVM Implementation](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/PlasmChian.md) | [GitHub](https://github.com/staketechnologies/) | ☐ | ☒ | ☐ | +| [Usetech](http://usetech.com/blockchain.html) | [PostgreSQL Indexer and Consensus Insurer](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/postgre_indexer_consensus_ensurer.md) | [GitHub](https://github.com/usetech-llc/) | ☐ | ☒ | ☒ | +| [Acala](https://acala.network/) | [A decentralized stablecoin platform](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/stablecoin_acala.md) | [GitHub](https://github.com/AcalaNetwork) | ☐ | ☒ | ☒ | +| [ETCDEV](https://emeraldpay.io/) | [Polkadot Network Crawler](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/crawler.md) | [GitHub](https://github.com/emeraldpay) | ☐ | ☒ | ☒ | +| [Xaya](https://xaya.io/) | Decentralised Complex Gaming | [GitHub](https://github.com/xaya) | ☐ | ☒ | ☒ | +| [Celer](https://www.celer.network/) | Layer 2 Scaling Infrastructure | [GitHub](https://github.com/celer-network) | ☐ | ☒ | ☐ | +| [Cryptoeconomics Lab](https://www.cryptoeconomicslab.com/) | Substrate adapter of Plasma child chain | [GitHub](https://github.com/cryptoeconomicslab) | ☐ | ☐ | ☐ | +| [Centrifuge / ChainSafe](https://centrifuge.io/) | Substrate / Ethereum Bridge | [GitHub 1](https://github.com/centrifuge/), [Github 2](https://github.com/ChainSafe/ChainBridge) | ☐ | ☒ | ☒ | +| [Advanca](https://www.advanca.network/) | Privacy-preserving general-purpose compute/storage layer | [GitHub](https://github.com/advanca) | ☐ | ☒ | ☒ | +| [Nodle](https://nodle.io) | Securely identify, certify and verify IoT devices | [GitHub](http://github.com/NodleCode/) | ☐ | ☒ | ☒ | +| [Figment](https://figment.network/) | DotHub: Information Hub for validators and delegators | [GitHub](https://github.com/figment-networks/dothub) | ☐ | ☒ | ☒ | +| [Lunie](http://lunie.io/) | [Web and mobile wallet](./lunie.md) | [GitHub](https://github.com/luniehq/lunie) | ☐ | ☒ | ☒ | +| [Web3 Gardens](https://web3.garden) | [Runtime modules and UI for creating stable, well-governed communities on Substrate](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/sunshine.md) | [GitHub](https://github.com/web3garden/sunshine) | ☐ | ☒ | ☐ | +| [Itering](https://itering.com/) | [Ruby Substrate API](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/ruby_substrate_api.md) | [GitHub](https://github.com/itering) | ☐ | ☒ | ☒ | +| [WEB3SCAN](https://www.web3scan.com/) | [Identity Pallet for Polkascan](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/polkascan_account_module.md) | [GitHub](https://github.com/polkascan) | ☐ | ☒ | ☒ | +| [Swisscom Blockchain AG](https://www.blockchain.swisscom.com/) | [Kubernetes Operator for Sentry nodes or Validators deployment](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/aPois.md) | [GitHub](https://github.com/swisscom-blockchain) | ☐ | ☒ | ☒ | +| [Polkastats](https://polkastats.io/) | [Polkadot/Kusama network statistics](./polkastats.md) | [GitHub](https://github.com/Colm3na/polkastats-v3) | ☐ | ☒ | ☒ | +| [Supercomputing Systems](https://www.scs.ch/) | [SubstraTEE extension pack](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/SubstraTEE-extension-pack1.md) | [GitHub](https://github.com/scs/substraTEE) | ☐ | ☒ | ☒ | +| [Encointer](https://encointer.org/) | [An Ecological, Egalitarian and Private Cryptocurrency and Self-Sovereign Identity System](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/encointer-testnet.md) | [GitHub](https://github.com/encointer) | ☐ | ☒ | ☒ | +| [FlexDapps](https://flexdapps.com/) | Gantree is a full-service node infrastructure toolkit for Substrate-based blockchains | [GitHub](https://github.com/flex-dapps) | ☐ | ☒ | ☒ | +| [Matter Labs](https://matter-labs.io) | Zinc/RedShift ZK programming framework | [GitHub](https://github.com/matter-labs) | ☐ | ☐ | ☐ | +| [Second State](https://www.secondstate.io/) | [Bridging Ethereum Tools and Smart Contracts into Substrate Ecosystem](./wasmedge_substrate.md) | [GitHub](https://github.com/second-state) | ☐ | ☒ | ☒ | +| [Sensio.Group](https://ipfs.io/ipfs/bafybeihoqt3gvmd5wbqkxt52lojuvbvgoydan3aadxhvf37qdyvpgl762e/index.html) | [Substrate modules + UI that focus on photo copyright and privacy](./sensio_network.md) | [GitLab](https://gitlab.com/sensio_group) | ☐ | ☒ | ☐ | +| [KILT](https://kilt.io/) | [Substrate Anonymous Credentials](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/KILT_AnonymousCredentials.md) | [GitHub](https://github.com/KILTprotocol) | ☐ | ☒ | ☒ | +| [Node Factory](https://www.nodefactory.io/) | [Metamask plugin for Polkadot](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/metamask-plugin-polkadot.md) | [GitHub](https://github.com/nodefactoryIo) | ☐ | ☒ | ☒ | +| [Interlay](https://www.interlay.io/) | Polkadot/BTC bridge specification (RFP) | [GitLab](https://gitlab.com/interlay/polkabtc-spec) | ☐ | ☒ | ☒ | +| [Stake Technologies](https://stake.co.jp/) | [ECDSA for Polkadot JS](https://github.com/w3f/Grants-Program/blob/master/applications/polkadotjs-ecdsa.md) | [GitHub](https://github.com/staketechnologies/apps) | ☐ | ☒ | ☒ | +| [Obsidian Labs](https://www.obsidians.io/) | Substrate IDE | [GitHub](https://github.com/ObsidianLabs) | ☐ | ☒ | ☒ | +| [Definex](https://definex.io/) | A financial market protocol | [GitHub](https://github.com/definex/definex-libs) | ☐ | ☒ | ☒ | +| [Attic Lab](https://atticlab.net/) | Multisignature Wallet Standardization/PSP | [GitHub](https://github.com/w3f/PSPs) | ☐ | ☒ | ☒ | +| [ImToken](https://token.im/) | Multi-chain non-custodial mobile and hardware wallet for iOS & Android | [GitHub](https://github.com/consenlabs/) | ☐ | ☒ | ☒ | +| [SelfKey](https://selfkey.org/) | SelfKey DIDs & Claims as Ink! Smart Contracts | [GitHub](https://github.com/SelfKeyFoundation) | ☐ | ☐ | ☐ | +| [Lyken](https://lyken.rs/) | [Rust trait system revamp](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/rust_trait_system_revamp.md) | [GitHub](https://github.com/LykenSol) | ☐ | ☒ | ☐ | +| [Chorus One](https://chorus.one/) | Grandpa light client in Tendermint | [GitHub](https://github.com/ChorusOne) | ☐ | ☒ | ☒ | -### 🏄‍♀️ Wave 14 - Second Quarter 2022 +## 2019 -| Team | Project | Link | Terminated | First Delivery | Completed | -| :--------------------------------------------------------- | :------------------------------------------------------------------------------------------------------ | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | -| [TDSoftware](https://www.tdsoftware.de/) | [SubIdentity](./SubIdentity.md) | [GitHub](https://github.com/TDSoftware) | ☐ | ☒ | ☒ | -| [ChainSafe Systems](https://chainsafe.io/) | [SubstrateSnap Maintenance Proposal](./Substratesnap_Maintenance.md) | [GitHub](https://github.com/ChainSafe/metamask-snap-polkadot) | ☐ | ☒ | ☒ | -| [HugoByte](https://hugobyte.com/) | [Project Aurras - MVP - Phase 2](./project_aurras_mvp_phase_2.md) | [GitHub](https://github.com/HugoByte) | ☐ | ☐ | ☐ | -| [Perun Network](https://perun.network/) | [Perun App Channels](./perun_app_channels.md) | [GitHub](https://github.com/perun-network/) | ☐ | ☒ | ☒ | -| [ChainSafe Systems](https://chainsafe.io/) | [Privacy enhancement for Polkadot-js extension](./polkadot-js-extension-per-account-auth.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☒ | ☒ | -| [BQP](https://qbitcoin.tech/) | [Quantum Lock for QBITCOIN](./quantumLock.md) | [GitHub](https://github.com/bqpquantum/) | ☐ | ☐ | ☐ | -| [Simply VC](https://simply-vc.com.mt/) | [PANIC Monitoring and Alerting For Blockchains](./panic.md) | [GitHub](https://github.com/SimplyVC/panic) | ☐ | ☒ | ☒ | -| [Artree LLC](https://artree.co.jp/) | [Zero Network](./zero-network.md) | [GitHub](https://github.com/zero-network) | ☐ | ☐ | ☐ | -| [sigma prime](https://sigmaprime.io/) | Differential Fuzzer | [GitHub](https://github.com/sigp) | ☐ | ☐ | ☐ | -| [t3rn](https://www.t3rn.io/) | [XBI - xcm-based high-level standard and interface (ABI) for smart contracts](./xbi-format-psp-t3rn.md) | [GitHub](https://github.com/t3rn/t3rn) | ☐ | ☒ | ☒ | -| [Dante Network](https://www.dantechain.com/) | [Dante Network](./Dante_Network.md) | [GitHub](https://github.com/dantenetwork) | ☐ | ☒ | ☒ | -| [Verida](https://www.verida.io/) | [Single Sign-On for Apps](./verida_network.md) | [GitHub](https://github.com/verida) | ☐ | ☐ | ☐ | -| [Kami Ekbatanifard](https://github.com/Nick-1979/) | [Polkadot js plus / Nomination pools](./Plus-follow-up.md) | [GitHub](https://github.com/Nick-1979/polkadot-Js-Plus-extension/wiki) | ☐ | ☒ | ☒ | -| [Afloat Inc](https://stayafloat.io/#/) | [Tax Infrastructure Polkadot Integration](./Afloat.md) | [GitHub](https://github.com/hashed-io) | ☐ | ☒ | ☐ | -| [gmajor](https://github.com/gmajor-encrypt) | [SCALE Codec Comparator](./scale-codec-comparator.md) | [GitHub](https://github.com/gmajor-encrypt) | ☐ | ☒ | ☒ | -| [Rusty Crewmates](http://rustycrewmates.com/) | [Substrate Tutorials](./substrate-tutorials.md) | [GitHub](https://github.com/rusty-crewmates/substrate-tutorials) | ☐ | ☒ | ☐ | -| [Sequester](https://github.com/SequesterChain) | [A Common-Good Carbon Sink on Polkadot](./sequester.md) | [GitHub](https://github.com/SequesterChain/pallets) | ☐ | ☒ | ☒ | -| [Keysafe Network](https://github.com/keysafe-protocol) | [A decentralized protocol for private key custody and crypto asset management](./keysafe_network.md) | [GitHub](https://github.com/keysafe-protocol) | ☐ | ☒ | ☐ | -| [Fennel Labs](https://fennellabs.com/) | [Whiteflag on Fennel Protocol](./Fennel_Protocol.md) | [GitHub](https://github.com/fennelLabs) | ☐ | ☒ | ☒ | -| [Relationlabs](https://relationlabs.ai/#/home) | [Relation Graph](./Relation-Graph.md) | [GitHub](https://github.com/relationlabs) | ☐ | ☐ | ☐ | -| [Decentration](https://kabocha.network) | [Supersig](./pallet_supersig.md) | [GitHub](https://github.com/kabocha-network) | ☐ | ☒ | ☐ | -| [Web3 Labs Ltd](https://www.web3labs.com/epirus-explorer) | [Epirus Substrate Explorer](./epirus_substrate_explorer.md) | [GitHub](https://github.com/web3labs) | ☐ | ☒ | ☒ | -| [727.ventures](https://727.ventures/) | [Sol2Ink](./sol2ink.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | -| [727.ventures](https://727.ventures/) | [OpenBrush Phase 3](./openbrush-follow-up-2.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☒ | ☐ | -| [FS](https://fair-squares.nl/) | [Fair Squares](./fair_squares.md) | [GitHub](https://github.com/Fair-squares) | ☐ | ☒ | ☐ | -| [Ideal Labs](https://www.idealabs.network/) | [Iris: Phase 2](./iris_followup.md) | [GitHub](https://github.com/ideal-lab5) | ☐ | ☒ | ☐ | -| [NeoPower](https://www.neopower.digital/) | [Roloi: Stream money from one wallet to another](./Roloi.md) | [GitHub](https://github.com/RoloiMoney) | ☐ | ☒ | ☒ | -| [Tribal Protocol Labs](https://www.tribal.fyi/) | [Tribal Protocol Smart Contract Development](./tribal_protocol.md) | [GitHub](https://github.com/tribal-protocol) | ☐ | ☒ | ☐ | -| [Yahuang Wu](https://github.com/wuyahuang) | [Dual-Key Stealth Address Protocol](./DKSAP.md) | [GitHub](https://github.com/wuyahuang) | ☐ | ☒ | ☒ | -| [UNIVERSALDOT FOUNDATION](https://universaldot.foundation) | [Universaldot.me Phase 2](./universaldot.me.md) | [GitHub](https://github.com/UniversalDot) | ☒ | ☐ | ☐ | -| [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 1](./Societal.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☒ | -| [Faceless Protocol](https://github.com/HeisenbergLin22) | [Faceless Protocol](./faceless.md) | [GitHub](https://github.com/HeisenbergLin22) | ☐ | ☒ | ☒ | -| [727.ventures](https://727.ventures/) | [Typechain](./typechain-polkadot.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☒ | ☒ | -| [Codelight](https://massbit.io/) | [Massbit Route](./massbit_route.md) | [GitHub](https://github.com/massbitprotocol/massbitroute) | ☐ | ☒ | ☒ | -| [Hypha Hashed Partners](https://hypha.earth/) | [Social Recovery Wallet](./social_recovery_wallet.md) | [GitHub](https://github.com/hypha-dao) | ☐ | ☒ | ☐ | -| [MangoBOX labs](http://mangobox.xyz/) | [MangoBOX Protocol](./MangoBOX-Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☒ | ☒ | +### 🏄‍♀️ Wave 4 - Fourth Quarter 2019 +[Menu🔝](#menu) -### 🏄‍♀️ Wave 15 - Third Quarter 2022 +| Team | Project | Link | Terminated | First Delivery | Completed | +| :----------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------- | :--------- | :------------: | :-------: | +| [Genesis Lab](https://genesislab.net/) | Validator Tracker | [GitHub](https://github.com/genesis-lab-team) | ☐ | ☒ | ☒ | +| [Usetech](http://usetech.com/blockchain.html) | [Substrate API in .NET](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/dotnet_api.md) | [GitHub](https://github.com/usetech-llc/polkadot_api_dotnet) | ☐ | ☒ | ☒ | +| [BlockX Labs](http://blockxlabs.com/) | [Enzyme Browser extension wallet](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Enzyme.md) | [GitHub](https://github.com/blockxlabs/enzyme) | ☐ | ☒ | ☒ | +| [WEB3SCAN](https://www.web3scan.com/) | [Python API client](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/python_substrate_api.md) | [GitHub](https://github.com/polkascan) | ☐ | ☒ | ☒ | +| [Galactic Council](https://github.com/galacticcouncil) | [Polkalert: Validator Monitoring](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/PolkAlert.md) | [GitHub](https://github.com/galacticcouncil/polkalert) | ☐ | ☒ | ☒ | +| [Bandot](http://bandot.io/) | Stablecoin | [GitHub](https://github.com/bandotorg/Bandot) | ☒ | ☒ | ☐ | +| [Laminar One](https://laminar.one/) | LaminarChain: High performance Flow Protocols powering synthetic asset and margin trading | [GitHub](https://github.com/laminar-protocol/laminar-chain) | ☐ | ☒ | ☒ | +| [Stake Technologies](https://stake.co.jp/) | [Ink! Playground](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/ink_playground.md) | [GitHub](https://github.com/staketechnologies/ink-playground) | ☐ | ☒ | ☒ | +| [B-Harvest](https://bharvest.io/) | [Node Monitoring Tool](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/substrate%20x%20(prometheus%20%2B%20grafana)%20by%20B-Harvest.md) | [GitHub](https://github.com/b-harvest) | ☐ | ☒ | ☐ | +| [Simply VC](https://simply-vc.com.mt/) | [P.A.N.I.C. Validator alerting solution](./panic.md) | [GitHub](https://github.com/SimplyVC/panic_polkadot) | ☐ | ☒ | ☒ | +| [Ethworks](https://ethworks.io/) | [Polkadot{.js} extension improvements](./polkadot-desktop-app.md) | [GitHub](https://github.com/ethWorks) | ☐ | ☒ | ☒ | +| [Lyken Software Solutions](https://lyken.rs/) | Investigation of runtime compilation | [GitHub](https://github.com/LykenSol) | ☐ | ☒ | ☒ | +| [Blockchain IT](https://blockchain-it.hr) | [Ink! Remix Plugin](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/ink-remix-plugin.md) | [GitHub](https://github.com/blockchain-it-hr/ink-remix-plugin) | ☐ | ☒ | ☒ | +| [Kadena](https://www.kadena.io/) | Pact feasibility study | [GitHub](https://github.com/kadena-io/) | ☐ | ☐ | ☐ | +| [STAFI Protocol](http://www.stafi.io/) | Stafi is a protocol to provide liquidity for staking assets | [GitHub](https://github.com/stafiprotocol/stafi-node) | ☐ | ☒ | ☒ | +| [Vision Baker](https://playproject.io/) | [DatDot — Dat protocol for Polkadot](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/datdot.md) | [GitHub](https://github.com/playproject-io/datdot) | ☐ | ☒ | ☐ | +| [Speckle OS](https://www.speckleos.io/) | [Integrating additional features into Speckle OS](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Speckle%20Application.md) | [GitHub](https://github.com/SpeckleOS/speckle-browser-extension) | ☐ | ☐ | ☐ | +| [Archipel](https://archipel.id/) | [Solution to resolve high availability problem of Validator nodes in PoS](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/archipel.md) | [GitHub](https://github.com/luguslabs/archipel) | ☐ | ☒ | ☒ | +| [Zondax](https://zondax.ch/) | Flexible TrustZone-based HSM stack | [GitHub](https://github.com/ZondaX) | ☐ | ☒ | ☒ | +| [Usetech](http://usetech.com/blockchain.html) | SR25519 library in pure C and C# | [GitHub](https://github.com/usetech-llc/) | ☐ | ☒ | ☒ | +| [Akropolis](https://akropolis.io/) | [PolkaHub — Heroku-like infrastructure for node deployment](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/PolkaHub.md) | [GitHub](https://github.com/akropolisio) | ☐ | ☒ | ☒ | +| [Pixura](https://pixura.io/) | [Substrate API client in Haskell](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/polkadot_substrate_haskell_api.md) | [GitHub](https://github.com/Pixura) | ☐ | ☐ | ☐ | +| [HashQuark](https://www.hashquark.io/) | Validator Dashboard | [GitHub](https://github.com/hashquark-io) | ☐ | ☒ | ☒ | +| [Stacktical](https://stacktical.com/) | [Performance Management Runtime Modules](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/predictive_performance_management_runtime_module.md) | [GitHub](https://github.com/Stacktical) | ☐ | ☒ | ☐ | +| [Sean Young](https://www.mess.org/) | Solidity to WASM compiler | [GitHub](https://github.com/hyperledger-labs/solang) | ☐ | ☒ | ☒ | +| [Chain Security](https://chainsecurity.com/) | Tool for validating correctness of Polkadot runtimes | [GitHub](https://github.com/ChainSecurity/polpatrol) | ☐ | ☒ | ☒ | -| Team | Project | Link | Terminated | First Delivery | Completed | -| :----------------------------------------------------------- | :-------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | -| [QRUCIAL OÜ](https://qrucial.io/) | [QRUCIAL DAO](./QRUCIAL_DAO.md) | [GitHub](https://github.com/Qrucial/QRUCIAL-DAO) | ☐ | ☒ | ☐ | -| [Polkadot js plus](http://polkadotjs.plus/) | [Polkadot js plus / Social Recovery Wallet](./Plus-social-recovery-wallet.md) | [GitHub](https://github.com/Nick-1979/polkadot-Js-Plus-extension/wiki) | ☐ | ☒ | ☐ | -| [Lee](https://github.com/rust-0x0) | [Hex Space Social Graph](./hex.md) | [GitHub](https://github.com/rust-0x0) | ☐ | ☒ | ☐ | -| [Liberland LLC](https://liberland.org/en/) | [Liberland Pallets](./liberland.md) | [GitHub](https://github.com/liberland/liberland_substrate) | ☐ | ☒ | ☐ | -| [Standard Protocol](https://standard.tech/) | [Signac - a monorepo plugin for developing multiple Parity ink! smart contracts](./signac.md) | [GitHub](https://github.com/standardweb3/signac) | ☐ | ☒ | ☒ | -| [B-Datagray](https://www.b-datagray.com/) | [Datagen Project](./Datagen_Project.md) | [GitHub](https://github.com/Datagen-Project) | ☐ | ☒ | ☐ | -| [Colorful Notion](https://polkaholic.io/#chains) | [Polkaholic.io's Multi-Chain Substrate Block Explorer](./Polkaholic.md) | [GitHub](https://github.com/colorfulnotion/polkaholic/) | ☐ | ☐ | ☐ | -| [Common Orbit LLC](https://brson.github.io) | [`wasm-opt` for Rust](./wasm-opt-for-rust.md) | [GitHub](https://github.com/brson/wasm-opt-rs) | ☐ | ☒ | ☒ | -| [Blockcoders](https://blockcoders.io/) | [Ink Explorer](./ink-explorer.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☒ | -| [Equilibrium](https://equilibrium.co/) | [Polkadot Light Client in C++](./c++polkadot-light-client.md) | [GitHub](https://github.com/eqlabs) | ☐ | ☒ | ☒ | -| [Open rollup](https://github.com/openrollup-zk) | [Open rollup - MVP - Phase 1](./openrollup-mvp-phase-1.md) | [GitHub](https://github.com/openrollup-zk) | ☐ | ☐ | ☐ | -| [Veridise](https://veridise.com/) | [Vanguard](./vanguard.md) | [GitHub](https://github.com/Veridise/Vanguard) | ☐ | ☐ | ☐ | -| [Karolis Ramanauskas](https://krl.is/) | [Generic Sybil-Resistant Faucet](./Faucet.md) | [GitHub](https://github.com/karooolis) | ☐ | ☒ | ☒ | -| [LimeChain](https://limechain.tech/) | [Research feasibility for a Go Runtime](./research-feasibility-go-runtime.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☒ | ☒ | -| [Jim Yam](https://github.com/JimYam) | [daos](./daos.md) | [GitHub](https://github.com/daos-org/daos.git) | ☐ | ☒ | ☒ | -| [Green Lemon](https://github.com/GreenLemonProtocol) | [Green Lemon Protocol](./GreenLemon.md) | [GitHub](https://github.com/GreenLemonProtocol) | ☐ | ☒ | ☒ | -| [Stardust Labs Inc.](https://stardust.finance/) | [Integrating ISO-8583](./Integrating-ISO8583.md) | [GitHub](https://github.com/adit313/) | ☐ | ☒ | ☒ | -| [TwinP](https://www.linkedin.com/in/elioprifti/) | [Escrow Pallet](./escrow_pallet.md) | [GitHub](https://github.com/herou) | ☐ | ☒ | ☒ | -| [Meta Defender Team](https://github.com/Meta-Defender/) | [Meta Defender](./Meta_Defender.md) | [GitHub](https://github.com/Meta-Defender/) | ☐ | ☐ | ☐ | -| [ParaSpell](https://github.com/paraspell) | [ParaSpell](./ParaSpell.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | -| [Primis Labs](https://github.com/Primis-Labs) | [Primis](./Primis.md) | [GitHub](https://github.com/Primis-Labs/client) | ☐ | ☒ | ☒ | -| [Uke](https://github.com/Uke-Messaging) | [Uke Messaging - PoC - Phase 1](./uke.md) | [GitHub](https://github.com/Uke-Messaging) | ☒ | ☐ | ☐ | -| [Redstone Network](https://github.com/difttt) | [Redstone Network](./RedStone%20Network.md) | [GitHub](https://github.com/difttt) | ☐ | ☒ | ☐ | -| [JURIMETRIC TECNOLOGIA LTDA](https://www.jurimetric.com.br/) | [Polkadart](./Polkadart.md) | [GitHub](https://github.com/rankanizer/polkadart) | ☐ | ☒ | ☐ | -| [Skye Kiwi](https://skye.kiwi/) | [Choko Wallet](./choko_wallet.md) | [GitHub](https://github.com/skyekiwi) | ☐ | ☒ | ☐ | -| [Popular Coding](https://www.popularcoding.com/) | [Ventur](./ventur.md) | [GitHub](https://github.com/popular_coding) | ☐ | ☒ | ☒ | -| [Asylum](https://asylum.space/) | [Asylum follow-up 1](./asylum_follow_up_1.md) | [GitHub](https://gitlab.com/asylum-space/) | ☒ | ☒ | ☐ | -| [Cyril Carlier](https://github.com/CrommVardek) | [Maki](./Maki.md) | [GitHub](https://github.com/CrommVardek) | ☐ | ☐ | ☐ | -| [TopMonks](https://www.topmonks.com/) | [Calamar](./Calamar.md) | [GitHub](https://github.com/topmonks/calamar) | ☐ | ☒ | ☐ | -| [Bela Supernova](https://bsn.si/) | [Rubeus Keeper](./RubeusKeeper.md) | [GitHub](https://github.com/bsn-si) | ☐ | ☒ | ☒ | -| [Web3 Labs Ltd](https://www.web3labs.com/epirus-explorer) | [Epirus Substrate Explorer - Phase 2](./epirus_substrate_phase_2.md) | [GitHub](https://github.com/web3labs) | ☐ | ☒ | ☐ | -| [Uke](https://github.com/Uke-Messaging) | [Uke Protocol PoC & App (revised)](./uke-protocol.md) | [GitHub](https://github.com/Uke-Messaging) | ☐ | ☒ | ☒ | -| [727.ventures](https://727.ventures/) | [Typechain Phase 2](./typechain-polkadot-follow-up.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☒ | ☒ | -| [QSTN](https://qstn.us/) | [QSTN](./QSTN.md) | [GitHub](https://github.com/qstnus) | ☐ | ☐ | ☐ | -| [CESS LAB](https://www.cess.cloud/) | [Substats (The framework of lightweight block explorer)](./substats.md) | [GitHub](https://github.com/CESSProject) | ☐ | ☒ | ☐ | -| [Polket](https://toearn.fun) | [ToEarnFun](./polket_toearnfun.md) | [GitHub](https://github.com/polketio/polket-node) | ☐ | ☒ | ☐ | -| ALPHA LABS | [Binary merkle tree](./binary_merkle_tree.md) | [GitHub](https://github.com/frisitano) | ☐ | ☐ | ☐ | -| [Standard Protocol](https://standard.tech/) | [New Order - a full onchain orderbook dex with indexers](./Standard_Protocol.md) | [GitHub](https://github.com/standardweb3) | ☐ | ☐ | ☐ | -| [hack-ink](https://github.com/hack-ink) | [Subalfred](./subalfred.md) | [GitHub](https://github.com/hack-ink/subalfred) | ☐ | ☒ | ☒ | +### 🏄‍♀️ Wave 3 - Third Quarter 2019 +[Menu🔝](#menu) -### 🏄‍♀️ Wave 16 - Fourth Quarter 2022 +| Team | Project | Link | Terminated | First Delivery | Completed | +| :------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | +| [Supercomputing systems](http://scs.ch/) | [Substrate Rust API client](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/substrate-api-client.md) | [GitHub](https://github.com/scs/substrate-api-client) | ☐ | ☒ | ☒ | +| [NGRAVE](https://ngrave.io/) | [Substrate Hardware Wallet Integration](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/ngrave_substrate_1.md) | | ☐ | ☒ | ☐ | +| [Caelum Labs](https://caelumlabs.com/) | [Decentralised identity modules](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Self%20Sovereign%20Identity%20layer%20as%20a%20Polkadot%20runtime.md) | | ☐ | ☒ | ☐ | +| [Runtime Verification](https://runtimeverification.com/) | Build executable K specifications of the SRML | [GitHub](https://github.com/runtimeverification/polkadot-verification) | ☐ | ☒ | ☒ | +| [Attic Lab](https://atticlab.net/) | [VS Code and Atom plugins](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/vscode_plugin.md) | [GitHub](https://github.com/everstake/VSCode-Atom-Plugin) | ☐ | ☒ | ☒ | +| [Dock](http://dock.io/) | Verifiable Claims | | ☐ | ☒ | ☐ | +| [Blockdaemon](https://blockdaemon.com/) | Polkadot Package Manager | [GitHub](https://github.com/Blockdaemon/bpm-sdk) | ☐ | ☒ | ☒ | +| [Zondax](http://zondax.ch/) | Ledger app for Polkadot | [GitHub](https://github.com/ZondaX/ledger-polkadot) | ☐ | ☒ | ☒ | +| [Geefu](https://www.geefu.net/) | [Vue JS components for Polkadot JS apps](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Vuejs_ui-components.md) | [GitHub](https://github.com/vue-polkadot) | ☐ | ☒ | ☒ | +| [Centrifuge](https://centrifuge.io/) | [Substrate Go API client](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/centrifuge_go_substrate_rpc_client.md) | [GitHub](http://github.com/centrifuge) | ☐ | ☒ | ☒ | +| [Litentry](https://www.litentry.com/) | [Identity modules and corresponding UIs](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/litentry.md) | [GitHub](https://github.com/litentry/litentry-runtime) | ☐ | ☒ | ☒ | +| [DappForce](http://dappforce.io) | [SubSocial - Substrate module and web UI for decentralized communities](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Subsocial.md) | [GitHub](https://github.com/dappforce/dappforce-subsocial) | ☐ | ☒ | ☒ | +| [Phala.Network](https://phala.network/) | [pLibra, Privacy Bridge between Polkadot and Libra chain](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/pLIBRA.md) | [GitHub](https://github.com/Phala-Network/) | ☐ | ☒ | ☐ | +| [Wiv](http://wiv.io/) | Supply chain modules and front-end UI | [GitHub](https://github.com/wivtech) | ☒ | ☐ | ☐ | -| Team | Project | Link | Terminated | First Delivery | Completed | -| :----------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------- | :--------- | :------------: | :-------: | -| [CrossChain Labs](https://github.com/CrossChainLabs) | [DotPulse](DotPulse.md) | [GitHub](https://github.com/CrossChainLabs) | ☐ | ☒ | ☒ | -| [Jett Hays](https://github.com/jettblu) | [Distributed Key Management](DistributedKeyManagement.md) | [GitHub](https://github.com/KryptikApp) | ☐ | ☒ | ☐ | -| [NexToken Technology](https://github.com/NexTokenTech) | [TREX - Timed Release Encryption Xing chains](TREX_Network.md) | [GitHub](https://github.com/NexTokenTech/TREX) | ☐ | ☐ | ☐ | -| [Blockcoders](http://blockcoders.io/) | [Cross-Consensus Messaging Software Development Kit](xcm-sdk.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☐ | -| [Keystone Wallet](https://keyst.one/) | [Polkadot Snap](PolkadotSnap.md) | [GitHub](https://github.com/KeystoneHQ) | ☐ | ☐ | ☐ | -| [LeetCoin](https://www.leetcoin.co/) | [LeetCoin](leetcoin.md) | [GitHub](https://github.com/nashhq/leetcoin) | ☐ | ☐ | ☐ | -| [727.ventures](https://727.ventures/) | [Sol2Ink Phase 2](typechain-polkadot-follow-up.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | -| [walt.id](https://walt.id/) | [NFT infrastructure](walt-id_nft-infra.md) | [GitHub](https://github.com/walt-id) | ☐ | ☐ | ☐ | -| [SydTek](https://sydtek.ai/) | [Digital Inheritance in Web3: A Case Study of Soulbound Tokens and Social Recovery Pallets](SydTek.md) | [GitHub](https://github.com/jgophd/Developed-Materials-and-Raw-Data) | ☐ | ☒ | ☐ | -| [Anagolay](https://anagolay.network/) | [Multi-token community contributions for verified creators](anagolay-project-idiyanale-multi-token-community-contributions-for-verified-creators.md) | [GitHub](https://github.com/anagolay) | ☐ | ☒ | ☒ | -| [Ink Contracts Wizard Team](https://github.com/amankumar1008/contracts-wizard) | [Ink Smart Contract Wizard](ink-smart-contract-wizard.md) | [GitHub](https://github.com/amankumar1008/contracts-wizard) | ☐ | ☒ | ☒ | -| [TDSoftware](https://www.tdsoftware.de/) | [Substrate IPFS Utilities](ipfs_utilities.md) | [GitHub](https://github.com/TDSoftware) | ☐ | ☐ | ☐ | -| [Ink Boxes Team](https://github.com/nerdsince98) | [Ink Boxes](ink-boxes.md) | [GitHub](https://github.com/avirajkhare00/ink-boxes/) | ☐ | ☒ | ☒ | -| [ParaSpell](https://github.com/paraspell) | [ParaSpell Phase 2](ParaSpell_follow-up.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | -| [SubRelay](http://subrelay.xyz/) | [SubRelay](subrelay.md) | [GitHub](https://github.com/subrelay) | ☐ | ☐ | ☐ | -| [Wow Labz](http://www.wowlabz.com) | [Dot Marketplace Phase 3](dot_marketplace-Phase3.md) | [GitHub](https://github.com/orgs/WowLabz) | ☐ | ☒ | ☒ | -| [10Clouds Sp. z o.o.](https://10clouds.com/) | [Crowdloan Front End Template](crowdloan_frontend_template.md) | [GitHub](https://github.com/10clouds) | ☐ | ☐ | ☐ | -| [DodoRare, Inc.](https://dodorare.com/) | [Faterium](faterium.md) | [GitHub](https://github.com/faterium) | ☐ | ☒ | ☒ | -| [The Bacon Beacon](https://github.com/random-bacon) | [Pallet Drand Client](pallet-drand-client.md) | [GitHub](https://github.com/random-bacon) | ☐ | ☒ | ☐ | -| [Helikon Labs](https://helikon.io/) | [ChainViz v1](chainviz.md) | [GitHub](https://github.com/helikon-labs/chainviz) | ☐ | ☐ | ☐ | -| [Mutai Solutions](https://bryanmutai.co/) | [Crowdloans-FET](Crowdloans-FET.md) | [GitHub](https://github.com/brymut) | ☐ | ☐ | ☐ | -| [k/factory](https://k-f.co/) | [Centrifuge Go-Substrate-RPC Client V2](centrifuge-gsrpc-v2.md) | [GitHub](https://github.com/centrifuge/go-substrate-rpc-client) | ☐ | ☐ | ☐ | -| [Colorful Notion](https://github.com/colorfulnotion) | [Zombienet Explorer: Multi-Chain Substrate Block Explorer](Zombienet-Explorer.md) | [GitHub](https://github.com/colorfulnotion/zombienet-explorer) | ☐ | ☐ | ☐ | -| [TwinP](https://github.com/herou) | [Decentralized Invoice](decentralized_invoice.md) | [GitHub](https://github.com/herou) | ☐ | ☒ | ☒ | -| [Zondax](http://zondax.ch/) | [Hybrid node research grant](hybrid_node_research.md) | [GitHub](https://github.com/ZondaX) | ☐ | ☐ | ☐ | -| [Bright Inventions](https://brightinventions.pl/) | [ZK-Snarks Tutorial](ZK-Snarks%20tutorial.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☐ | -| [Common Orbit LLC](https://brson.github.io) | [wasm-opt-for-rust maintenance](../maintenance/wasm-opt-for-rust.md) | [GitHub](https://github.com/brson/wasm-opt-rs) | ☐ | ☒ | ☐ | -| [Salaheldin Soliman](https://github.com/salaheldinsoliman) | [Solang developer experience improvements](Solang_developer_experience_improvements.md) | [GitHub](https://github.com/hyperledger/solang) | ☐ | ☐ | ☐ | -| [Optymalizacja AI Grzegorz Miebs](https://github.com/miepsik) | [Validator selection](validators_selection.md) | [GitHub](https://github.com/miepsik) | ☒ | ☐ | ☐ | -| [Applied Blockchain Ltd](https://appliedblockchain.com/) | [Silent Data](project_silentdata.md) | [GitHub](https://github.com/appliedblockchain) | ☐ | ☐ | ☐ | -| [Web3Box Labs](https://github.com/web3box-labs) | [Web3Box](Web3Box.md) | [GitHub](https://github.com/web3box-labs) | ☐ | ☐ | ☐ | -| [LimeChain](https://limechain.tech/) | [Research feasibility of Polkadot Host in Java](research-feasibiliy-java-host.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☐ | ☐ | -| [Blaize.tech](https://blaize.tech/) | [Unified deployment for the collator node](unified_collator_node_deployment.md) | [GitHub](https://github.com/babebort-blaize) | ☐ | ☐ | ☐ | -| [Odyssey B.V.](https://odyssey.org/) | [Momentum, an open source, metaverse for digital societies](odyssey_momentum.md) | [GitHub](https://github.com/momentum-xyz) | ☐ | ☐ | ☐ | -| [Bela Supernova](https://bsn.si/) | [Rubeus Keeper Stage 2](Rubeus_keeper_st2.md) | [GitHub](https://github.com/bsn-si) | ☐ | ☒ | ☐ | -| [Coong Team](https://coong.xyz/) | [Coong Wallet](coong_wallet.md) | [GitHub](https://github.com/CoongCrafts) | ☐ | ☐ | ☐ | -| OCamlMyCaml | [PrivaDEX: Cross-Chain DEX Aggregator MVP](PrivaDEX_aggregator.md) | [GitHub](https://github.com/kapilsinha/privadex) | ☐ | ☐ | ☐ | -| [Aband-Network](https://a.band/) | [Substrate Parachain PoS Template](substrate-parachain-PoS-template.md) | [GitHub](https://github.com/Aband-Network/substrate-parachain-PoS-template) | ☐ | ☒ | ☒ | -| [MangoBOX labs](https://www.mangobox.xyz/) | [MangoSale Protocol](MangoSale_Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☐ | ☐ | +### 🏄‍♀️ Wave 2 - Second Quarter 2019 +[Menu🔝](#menu) -### 🏄‍♀️ Wave 17 - First Quarter 2023 +| Team | Project | Link | Terminated | First Delivery | Completed | +| :-------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------ | :--------- | :------------: | :-------: | +| [Cap9](https://cap9.io/) | A low-level security protocol and framework for smart contracts | [GitHub](https://github.com/Daohub-io/cap9) | ☐ | ☒ | ☒ | +| Substrate Java API | Java version of our JS API | [GitHub](https://github.com/polkadot-java) | ☐ | ☒ | ☒ | +| [Starlog](https://pact.care/) | [A metadata chain for IPFS](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/starlog.md) | [GitHub](https://github.com/PACTCare/Starlog) | ☐ | ☒ | ☐ | +| [MixBytes](https://mixbytes.io/) | [Benchmarking tool for Substrate and Polkadot](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/MixBytes_Tank.md) | [GitHub](https://github.com/mixbytes/tank) | ☐ | ☒ | ☒ | +| [Gunclear](https://gunclear.io/) | [Private secure data storage solution using Plasma Cash in Substrate](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/GunClear.md) | [GitHub](https://github.com/GunClear) | ☒ | ☒ | ☐ | +| [ZeroChain](https://layerx.co.jp/) | [Zero knowledge transactions in Substrate](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/zerochain.md) | [GitHub](https://github.com/LayerXcom/zero-chain) | ☐ | ☒ | ☒ | +| [Robonomics](https://robonomics.network/) | [Substrate modules for controlling robots](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/robotics_in_polkadot.md) | [GitHub](https://github.com/airalab/substrate-node-robonomics) | ☐ | ☒ | ☐ | +| [Avado](https://ava.do/) | Polkadot node deployment with consumer hardware | [GitHub](https://github.com/AvadoDServer/AVADO-DNP-Polkadot-custom) | ☐ | ☒ | ☒ | +| [Stake Technologies](https://stake.co.jp/) | [Plasma modules for Substrate](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/plasm.md) | [GitHub](https://github.com/staketechnologies/Plasm) | ☐ | ☒ | ☒ | +| [HOPR](https://hopr.network/) | [Substrate integration with this P2P messaging protocol](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/messaging.md) | [GitHub](https://github.com/validitylabs/HOPR-PL-Substrate) | ☐ | ☒ | ☒ | +| [Mailchain](https://mailchain.xyz/) | a Multi-Blockchain Messaging Application | [GitHub](https://github.com/mailchain) | ☐ | ☒ | ☒ | +| [Usetech](http://usetech.com/blockchain.html) | [Polkadot C++ API](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/cpp_api.md) | [GitHub](https://github.com/usetech-llc/polkadot_api_cpp) | ☐ | ☒ | ☒ | -| Team | Project | Link | Terminated | First Delivery | Completed | -| :----------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------- | :--------- | :------------: | :-------: | -| [Deep Ink Ventures GmbH](http://deep-ink.ventures/) | [GenesisDAO](GenesisDAO.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☐ | ☐ | -| [ArtZero](https://artzero.io/) | [ArtZero & InkWhale](ArtZero_InkWhale.md) | [GitHub](https://github.com/artzero-io) | ☐ | ☐ | ☐ | -| EightFish | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☐ | ☐ | -| [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☐ | ☐ | -| [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☐ | ☐ | -| [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | -| [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☐ | ☐ | -| [Blockcoders](http://blockcoders.io/) | [Cross-chain Wallet - XCW](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☐ | ☐ | -| [OmniBTC](https://omnibtc.finance/) | [Polkadot Smart Chain](psc.md) | [GitHub](https://github.com/OmniBTC/PSC) | ☐ | ☐ | ☐ | -| [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☐ | ☐ | -| [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | -| [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☐ | ☐ | ☐ | -| [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | -| [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☐ | ☐ | -| [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☐ | ☐ | -| [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | -| [Aviraj Khare](https://github.com/avirajkhare00) | [Polkasearch](polkasearch.md) | [GitHub](https://github.com/avirajkhare00) | ☐ | ☐ | ☐ | -| [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib Follow up](php-rpc-lib-follow-up.md) | [GitHub](https://github.com/gmajor-encrypt/php-substrate-api) | ☐ | ☐ | ☐ | -| [CoinFabrik](https://www.coinfabrik.com/) | [Scout - Security Analysis Tool](ScoutCoinFabrik.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | -| [727.ventures](https://727.ventures/) | [Typechain-Polkadot Follow-up-2](typechain-polkadot-follow-up-2.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☐ | ☐ | -| [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☐ | ☐ | -| [Zeeve](https://www.zeeve.io) | [Parachain deployment zoombienet testing automation](Zeeve_Parachain_deployment_zoombienet_testing_automation.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | -| [Polytope Labs](https://research.polytope.technology/) | [Trie Verifier Implementation](solidity-trie-verifier.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | -| Off-Narrative Labs | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☐ | ☐ | +### 🏄‍♀️ Wave 1 - First Quarter 2019 +[Menu🔝](#menu) + +| Team | Project | Link | Terminated | First Delivery | Completed | +| :-------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------ | :-------------------------------------------------------------------------- | :--------- | :------------: | :-------: | +| [ChainSafe](https://chainsafe.io/) | Polkadot Runtime Environment in Go (via an RFP) | [GitHub](https://github.com/ChainSafeSystems/gossamer) | ☐ | ☒ | ☒ | +| [Soramitsu](https://soramitsu.co.jp/) | Polkadot Runtime Environment in C++ (via an RFP) | [GitHub](https://github.com/soramitsu/kagome) | ☐ | ☒ | ☒ | +| [WEB3SCAN](https://www.web3scan.com/) | Polkascan: Open Source Block Explorer | [GitHub](https://github.com/polkascan) | ☐ | ☒ | ☒ | +| [Polkawallet](https://polkawallet.io/) | [Mobile Wallet](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Polkawallet%20Team.md) | [GitHub](https://github.com/polkawallet-io/polkawallet-RN) | ☐ | ☒ | ☐ | +| [Validators](http://validators.com/) | Open Source Scalable Cluster | [GitHub](https://github.com/Validators) | ☐ | ☒ | ☒ | +| [BlockX Labs](http://blockxlabs.com/) | [Enzyme Browser extension wallet](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Enzyme.md) | [GitHub](https://github.com/blockxlabs/enzyme) | ☐ | ☒ | ☒ | +| [Speckle OS](https://www.speckleos.io/) | [Browser extension wallet](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/speckleos.md) | [GitHub](https://github.com/SpeckleOS/speckle-browser-extension) | ☐ | ☒ | ☒ | +| [Noise Explorer](https://symbolic.software/) | Rust code generator for formally verified (Noise/ cryptographic) handshakes | [Source Code](https://source.symbolic.software/noiseexplorer/noiseexplorer) | ☐ | ☒ | ☒ | +| [Protos](http://protosmanagement.com/) | Open Source Node Explorer | [GitHub](https://github.com/protos-research/polkadot-node-explorer) | ☒ | ☒ | ☐ | +| [Supercomputing Systems](https://www.scs.ch/) | [Substrate Transaction Privacy using Intel SGX](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/substrate_sgx_proposal.md) | [GitHub](https://github.com/scs/substraTEE) | ☐ | ☒ | ☒ | diff --git a/docs/maintenance b/docs/maintenance new file mode 120000 index 00000000000..765a7bbc5c3 --- /dev/null +++ b/docs/maintenance @@ -0,0 +1 @@ +../maintenance \ No newline at end of file From 6fca8f2d498c45f701dd6084e56b5ea1c0077db1 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Thu, 9 Feb 2023 08:47:57 -0800 Subject: [PATCH 128/578] Update stale_checker.yml (#1525) Point workflow to new action repo --- .github/workflows/stale_checker.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/stale_checker.yml b/.github/workflows/stale_checker.yml index f8c84235c9b..239a9adc731 100644 --- a/.github/workflows/stale_checker.yml +++ b/.github/workflows/stale_checker.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - id: stale - uses: 0xCaso/label-stale-pull-requests@v1 + uses: w3f/label-stale-pull-requests@master with: context: ${{ toJSON(github) }} token: ${{ secrets.GITHUB_TOKEN }} From c7099e788de7cd000a439cf1b3e40e2c99371e16 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Fri, 10 Feb 2023 01:14:03 -0800 Subject: [PATCH 129/578] Update index.md (#1529) * Update index.md Attempt to fix the links * Update index.md --- applications/index.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/applications/index.md b/applications/index.md index 370471641b5..a081e916ffc 100644 --- a/applications/index.md +++ b/applications/index.md @@ -12,11 +12,11 @@ Use this page for an overview of all public grants and their status. Use the sid > Besides, **there is a clear difference between an application being accepted and the successful delivery of the respective project**, and only teams that have successfully delivered a milestone are allowed to make public announcements on the matter or to use our [badge](https://github.com/w3f/General-Grants-Program/blob/master/grants/grant-badge-guidelines.md). The badge can also never be used as a general endorsement for a team. Violations to this policy can be reported [here](mailto:grants@web3.foundation). ## Menu -- [2023](#2023): [17](#🏄‍♀️-wave-17---first-quarter-2023) -- [2022](#2022): [16](#🏄‍♀️-wave-16---fourth-quarter-2022), [15](#🏄‍♀️-wave-15---third-quarter-2022), [14](#🏄‍♀️-wave-14---second-quarter-2022), [13](#🏄‍♀️-wave-13---first-quarter-2022) -- [2021](#2021): [12](#🏄‍♀️-wave-12---fourth-quarter-2021), [11](#🏄‍♀️-wave-11---third-quarter-2021), [10](#🏄‍♀️-wave-10---second-quarter-2021), [9](#🏄‍♀️-wave-9---first-quarter-2021) -- [2020](#2020): [8](#🏄‍♀️-wave-8---fourth-quarter-2020), [7](#🏄‍♀️-wave-7---third-quarter-2020), [6](#🏄‍♀️-wave-6---second-quarter-2020), [5](#🏄‍♀️-wave-5---first-quarter-2020) -- [2019](#2019): [4](#🏄‍♀️-wave-4---fourth-quarter-2019), [3](#🏄‍♀️-wave-3---third-quarter-2019), [2](#🏄‍♀️-wave-2---second-quarter-2019), [1](#🏄‍♀️-wave-1---first-quarter-2019) +- [2023](#2023): [17](#%EF%B8%8F-wave-17---first-quarter-2023) +- [2022](#2022): [16](#%EF%B8%8F-wave-16---fourth-quarter-2022), [15](#%EF%B8%8F-wave-15---third-quarter-2022), [14](#%EF%B8%8F-wave-14---second-quarter-2022), [13](#%EF%B8%8F-wave-13---first-quarter-2022) +- [2021](#2021): [12](#%EF%B8%8F-wave-12---fourth-quarter-2021), [11](#%EF%B8%8F-wave-11---third-quarter-2021), [10](#%EF%B8%8F-wave-10---second-quarter-2021), [9](#%EF%B8%8F-wave-9---first-quarter-2021) +- [2020](#2020): [8](#%EF%B8%8F-wave-8---fourth-quarter-2020), [7](#%EF%B8%8F-wave-7---third-quarter-2020), [6](#%EF%B8%8F-wave-6---second-quarter-2020), [5](#%EF%B8%8F-wave-5---first-quarter-2020) +- [2019](#2019): [4](#%EF%B8%8F-wave-4---fourth-quarter-2019), [3](#%EF%B8%8F-wave-3---third-quarter-2019), [2](#%EF%B8%8F-wave-2---second-quarter-2019), [1](#%EF%B8%8F-wave-1---first-quarter-2019) ## 2023 From aaf10253aa33f5b4370032c9b1429a14d9ae9900 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Fri, 10 Feb 2023 01:49:57 -0800 Subject: [PATCH 130/578] Update index.md (#1530) Multix -> First Delivery and Completed --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index a081e916ffc..5f3cd655f31 100644 --- a/applications/index.md +++ b/applications/index.md @@ -34,7 +34,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☐ | ☐ | | [Blockcoders](http://blockcoders.io/) | [Cross-chain Wallet - XCW](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☐ | ☐ | | [OmniBTC](https://omnibtc.finance/) | [Polkadot Smart Chain](psc.md) | [GitHub](https://github.com/OmniBTC/PSC) | ☐ | ☐ | ☐ | -| [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☐ | ☐ | +| [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☒ | ☒ | | [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | | [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☐ | ☐ | ☐ | | [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | From c5243c10b61dc990239c5d1c3a2bba7a121d2bfd Mon Sep 17 00:00:00 2001 From: han <457644296@qq.com> Date: Fri, 10 Feb 2023 18:09:14 +0800 Subject: [PATCH 131/578] Update substats.md (#1509) --- applications/substats.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/substats.md b/applications/substats.md index 30e25e1bbd0..492450739e2 100644 --- a/applications/substats.md +++ b/applications/substats.md @@ -1,7 +1,7 @@ # Substats (The framework of lightweight block explorer) - **Team Name:** CESS LAB -- **Payment Address:** 0x41fC582784745Ec6B4860F47808b988a473fcEFc(USDT) +- **Payment Address:** 0x96a661ee0D829DF7c424D4415a51FFc256EEEd8A(USDC) - **Level:** 2 ## Project Overview From 27533fb97e490dfbcd5ba1b5a5b4b8a0e39364a1 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 10 Feb 2023 12:53:32 +0100 Subject: [PATCH 132/578] Update README.md Add phala program --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 84a7e7eea9e..2a669235da1 100644 --- a/README.md +++ b/README.md @@ -322,6 +322,7 @@ Below is a list of other grant programs in the Polkadot/Substrate ecosystem: - [Interlay Labs Grants Program](https://github.com/interlay/Grants-Program) - [Moonbeam Grants Program](https://moonbeam.foundation/grants/) - [OAK’s Developer Grants](https://oak.tech/community/grants/) +- [Phala Builders Program](https://wiki.phala.network/en-us/build/general/builders-program/) - [peaq Ecosystem Grant Program](https://www.peaq.network/grant-program) - [Picasso / Composable Grants Program](https://grants.composable.finance) - [SubQuery Grants Programme](https://subquery.network/grants) From b7bda12edb13f4bedd3fc3fb583bb7ef4c566b58 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 10 Feb 2023 12:54:17 +0100 Subject: [PATCH 133/578] Update funding.md Add phala --- docs/funding.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/funding.md b/docs/funding.md index 827daa7d6ec..d4391989ce1 100644 --- a/docs/funding.md +++ b/docs/funding.md @@ -33,5 +33,6 @@ Below is a list of other grant programs in the Polkadot/Substrate ecosystem: - [Moonbeam Grants Program](https://moonbeam.foundation/grants/) - [OAK’s Developer Grants](https://oak.tech/community/grants/) - [peaq Ecosystem Grant Program](https://www.peaq.network/grant-program) +- [Phala Builders Program](https://wiki.phala.network/en-us/build/general/builders-program/) - [Picasso / Composable Grants Program](https://grants.composable.finance) - [SubQuery Grants Programme](https://subquery.network/grants) From 08132c430a453ba8786abf727020972c73bf3f5a Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 10 Feb 2023 12:55:04 +0100 Subject: [PATCH 134/578] Update README.md Fix order --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2a669235da1..52ab51a465b 100644 --- a/README.md +++ b/README.md @@ -322,8 +322,8 @@ Below is a list of other grant programs in the Polkadot/Substrate ecosystem: - [Interlay Labs Grants Program](https://github.com/interlay/Grants-Program) - [Moonbeam Grants Program](https://moonbeam.foundation/grants/) - [OAK’s Developer Grants](https://oak.tech/community/grants/) -- [Phala Builders Program](https://wiki.phala.network/en-us/build/general/builders-program/) - [peaq Ecosystem Grant Program](https://www.peaq.network/grant-program) +- [Phala Builders Program](https://wiki.phala.network/en-us/build/general/builders-program/) - [Picasso / Composable Grants Program](https://grants.composable.finance) - [SubQuery Grants Programme](https://subquery.network/grants) From aff88bbbdf6998c32e517073d29a4563d75b8e0a Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Fri, 10 Feb 2023 16:15:18 +0100 Subject: [PATCH 135/578] Update index.md --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 5f3cd655f31..82e91b82aaf 100644 --- a/applications/index.md +++ b/applications/index.md @@ -170,7 +170,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Decentration](https://kabocha.network) | [Supersig](./pallet_supersig.md) | [GitHub](https://github.com/kabocha-network) | ☐ | ☒ | ☐ | | [Web3 Labs Ltd](https://www.web3labs.com/epirus-explorer) | [Epirus Substrate Explorer](./epirus_substrate_explorer.md) | [GitHub](https://github.com/web3labs) | ☐ | ☒ | ☒ | | [727.ventures](https://727.ventures/) | [Sol2Ink](./sol2ink.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | -| [727.ventures](https://727.ventures/) | [OpenBrush Phase 3](./openbrush-follow-up-2.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☒ | ☐ | +| [727.ventures](https://727.ventures/) | [OpenBrush Phase 3](./openbrush-follow-up-2.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☒ | ☒ | | [FS](https://fair-squares.nl/) | [Fair Squares](./fair_squares.md) | [GitHub](https://github.com/Fair-squares) | ☐ | ☒ | ☐ | | [Ideal Labs](https://www.idealabs.network/) | [Iris: Phase 2](./iris_followup.md) | [GitHub](https://github.com/ideal-lab5) | ☐ | ☒ | ☐ | | [NeoPower](https://www.neopower.digital/) | [Roloi: Stream money from one wallet to another](./Roloi.md) | [GitHub](https://github.com/RoloiMoney) | ☐ | ☒ | ☒ | From 2a30e5fa4a81f32f4eb1fc8625173d2fcc9f0e46 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Sat, 11 Feb 2023 14:36:53 -0500 Subject: [PATCH 136/578] Update index.md (#1533) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 82e91b82aaf..f9f8a530663 100644 --- a/applications/index.md +++ b/applications/index.md @@ -211,7 +211,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Cryptoviet](https://team.cryptoviet.com/) | [Gafi Network - The Network of Game Finance](./Gafi.md) | [GitHub](https://github.com/cryptoviet/gafi) | ☐ | ☒ | ☒ | | [Asylum](https://asylum.space/) | [Metaverse for next generation gaming](./asylum_follow_up_1.md) | [GitHub](https://gitlab.com/asylum-space/) | ☐ | ☒ | ☒ | | [CESS LAB](https://www.cess.cloud/) | [Data Store Pallet](./ces_data_store.md) | [GitHub](https://github.com/CESSProject/cess) | ☐ | ☒ | ☒ | -| [ChainSafe](https://chainsafe.io/) | [Substrate Core Polywrapper](./substrate_core_polywrapper.md) | [GitHub](https://github.com/polywrap) | ☐ | ☐ | ☐ | +| [ChainSafe](https://chainsafe.io/) | [Substrate Core Polywrapper](./substrate_core_polywrapper.md) | [GitHub](https://github.com/polywrap) | ☐ | ☒ | ☒ | | [Bela Supernova](https://bsn.si/en/home/) | [On-chain cash exchange (OCEX)](./on-chain-cash.md) | | ☐ | ☒ | ☒ | | [Second State](https://www.secondstate.io/) | [WasmEdge for Substrate](./wasmedge_substrate.md) | [GitHub](https://github.com/wasmedge) | ☐ | ☒ | ☐ | | [Wow Labz](https://www.wowlabz.com/) | [Dot Marketplace Phase 2](./dot_marketplace-phase2.md) | [GitHub](https://github.com/WowLabz) | ☐ | ☒ | ☒ | From 0b0e3492a0910ffaadb7a225f3008ea53bc684da Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Sat, 11 Feb 2023 14:37:15 -0500 Subject: [PATCH 137/578] Update substrate_core_polywrapper.md (#1534) --- applications/substrate_core_polywrapper.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/applications/substrate_core_polywrapper.md b/applications/substrate_core_polywrapper.md index f33a10f69a1..bd324a8fddc 100644 --- a/applications/substrate_core_polywrapper.md +++ b/applications/substrate_core_polywrapper.md @@ -132,7 +132,7 @@ Please also provide the GitHub accounts of all team members. If they contain no - **Total Estimated Duration:** 1 month - **Full-Time Equivalent (FTE):** 2 Software Engineer, 0.5 Project Manager -- **Total W3F Costs:** 50 000$ +- **Total Costs:** 50,000 USD - **Total Polywrap DAO Costs:** 27 000$ & 60 WRAP ([Approved Grant Proposal](https://snapshot.org/#/polywrap.eth/proposal/0x1c4b651c654c9409353e70e4675b3311f06a06ab40d8818e4370faa064c5645d)) - **Start Date:** 11. April 2022 @@ -140,7 +140,7 @@ Please also provide the GitHub accounts of all team members. If they contain no - **Estimated duration:** 1 month - **FTE:** 2 Software Engineer, 0.5 Project Manager -- **Costs:** 50 000$ +- **Costs:** $50,000 | Number | Deliverable | Specification | | -----: | ----------- | ------------- | From 627203e01cdd96e54b2bee2976fa8de8bec21b0e Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Mon, 13 Feb 2023 01:18:21 -0800 Subject: [PATCH 138/578] Update stale_checker.yml (#1535) change action version to make it work --- .github/workflows/stale_checker.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/stale_checker.yml b/.github/workflows/stale_checker.yml index 239a9adc731..83c4ae98908 100644 --- a/.github/workflows/stale_checker.yml +++ b/.github/workflows/stale_checker.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - id: stale - uses: w3f/label-stale-pull-requests@master + uses: w3f/label-stale-pull-requests@main with: context: ${{ toJSON(github) }} token: ${{ secrets.GITHUB_TOKEN }} From fc646f7640f4130f50a39cd8bc2876fd985a847c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Mon, 13 Feb 2023 10:26:04 +0100 Subject: [PATCH 139/578] Update index.md sol2ink Phase 2 completed --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index f9f8a530663..8c232da46e4 100644 --- a/applications/index.md +++ b/applications/index.md @@ -63,7 +63,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Blockcoders](http://blockcoders.io/) | [Cross-Consensus Messaging Software Development Kit](xcm-sdk.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☐ | | [Keystone Wallet](https://keyst.one/) | [Polkadot Snap](PolkadotSnap.md) | [GitHub](https://github.com/KeystoneHQ) | ☐ | ☐ | ☐ | | [LeetCoin](https://www.leetcoin.co/) | [LeetCoin](leetcoin.md) | [GitHub](https://github.com/nashhq/leetcoin) | ☐ | ☐ | ☐ | -| [727.ventures](https://727.ventures/) | [Sol2Ink Phase 2](typechain-polkadot-follow-up.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | +| [727.ventures](https://727.ventures/) | [Sol2Ink Phase 2](typechain-polkadot-follow-up.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☒ | ☒ | | [walt.id](https://walt.id/) | [NFT infrastructure](walt-id_nft-infra.md) | [GitHub](https://github.com/walt-id) | ☐ | ☐ | ☐ | | [SydTek](https://sydtek.ai/) | [Digital Inheritance in Web3: A Case Study of Soulbound Tokens and Social Recovery Pallets](SydTek.md) | [GitHub](https://github.com/jgophd/Developed-Materials-and-Raw-Data) | ☐ | ☒ | ☐ | | [Anagolay](https://anagolay.network/) | [Multi-token community contributions for verified creators](anagolay-project-idiyanale-multi-token-community-contributions-for-verified-creators.md) | [GitHub](https://github.com/anagolay) | ☐ | ☒ | ☒ | From 21e37480641656ff5c92a5e3811853a162d06e31 Mon Sep 17 00:00:00 2001 From: Chaofan Shou Date: Mon, 13 Feb 2023 02:25:15 -0800 Subject: [PATCH 140/578] Application: FuzzLand (#1499) * Create FuzzLand.md * Update FuzzLand.md * Update FuzzLand.md --- applications/FuzzLand.md | 401 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 401 insertions(+) create mode 100644 applications/FuzzLand.md diff --git a/applications/FuzzLand.md b/applications/FuzzLand.md new file mode 100644 index 00000000000..8f7397d813c --- /dev/null +++ b/applications/FuzzLand.md @@ -0,0 +1,401 @@ +# FuzzLand + +- **Team Name:** FuzzLand +- **Payment Address:** 0x3a2a700d9d822D23D3F0F55F4b097753b5B2FC9A (ERC20 DAI/USDT) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +### Overview + + +tldr: FuzzLand is a DAO leveraging crowd-sourced computation power to achieve **fast**, **accurate**, and **cheap** automated auditing. + +The importance of auditing has grown significantly in recent years as organizations strive to ensure the integrity and security of their systems. However, despite the importance of auditing, it remains challenging, with many auditing companies struggling to provide comprehensive and accurate reports. + +The use of human auditors by auditing firms presents several challenges, including the high costs of recruiting and training qualified personnel and the potential for human error. With the increasing complexity of software systems and the growing volume of data to be analyzed, manual audits can become increasingly time-consuming and error-prone. On the other hand, automated auditing solutions also present their own set of challenges. These solutions typically require high computational power and incur high running time overhead. Thus, many traditional automated auditing tools sacrifice completeness and soundness of the analysis for faster response time, resulting in both false negative and positive results. + +In contrast, FuzzLand aims to parallelize novel automated program analysis techniques to gain accurate results in a reasonable amount of time. To achieve high parallelism with low costs, FuzzLand platform allows the public to contribute computation power to accomplish the automated auditing in return for token rewards. In the meantime, all the program analysis intermediate statistics and waypoints are verified and stored on the FuzzLand chain, which can finally be leveraged to mint the auditing reports. + +Unlike traditional collaborative manual auditing platforms, FuzzLand uses sound automated program analysis (e.g., fuzzing and symbolic execution) techniques to provide accurate auditing reports. Since the program analysis results and intermediate waypoints can be easily verified through a fully automated oracle, the manual confirmation process is no longer needed. While it is impossible to quantify the performance of human auditors, FuzzLand can quantify the auditing progress and completeness of auditing reports based on metrics backed with on-chain data. + +The FuzzLand platform can offer two key benefits to the ecosystem. Firstly, it allows Substrate module and Ink developers to access low-cost, highly accurate auditing reports for their projects with on-chain guarantees. Secondly, the platform will be implemented as a Substrate chain and the platform's Substrate pallets can be easily reused by other projects. + +### Project Details + +#### Stakeholders + +* Project Owners: Anyone who needs an audit for their program. +* Validator Nodes (i.e., Judges): A proof of stake network that verifies the audting information. Note that these nodes are not necessary the validators of the *chain*. +* Auditor Nodes (i.e., Wardens): Anyone can run a nodes on their computers or even inside browsers to supply computation power for program analysis in return of token rewards. + +#### High Level Auditing Workflow + +``` ++---------+ +-------------+ +-------------+ +-------------------+ +-------+ +| Auditor | | Validator 1 | | Validator 2 | | Project Owner | | Chain | ++---------+ +-------------+ +-------------+ +-------------------+ +-------+ + | | | | | + | | | | 0. Onboard a project | + | | | |--------------------------------------------->| + | | | | | + | | | | 1. Ask for partition plan based on project | + | |<--------------------------------------------------------------------------------| + | | | | | + | | 1. Claim a partition plan and submit it | + | |-------------------------------------------------------------------------------->| + | | | | | + | | | 1. Challenge the partition plan if it is not correct | + | | |---------------------------------------------------------------->| + | | | | | + | | | | 2. Send the partition of the project | + |<---------------------------------------------------------------------------------------------------------------| + | -----------------------\ | | | | + |-| 2. Auditing with DPA | | | | | + | |----------------------| | | | | + | | | | | + | 3. When a testcase leading to vulnerability / new coverage found, submit the testcase | + |--------------------------------------------------------------------------------------------------------------->| + | | | | | + | | 3. Challenge the testcase if it is not correct | + | |-------------------------------------------------------------------------------->| + | | | | | + | | | | 4. Stop the auditing and mint the report | + | | | |--------------------------------------------->| + | | | | | + | | 4. Provide share of bounties based on the # of testcases submitted | + |<---------------------------------------------------------------------------------------------------------------| + | | | | | + | | | | 4. Provide share of bounties as reward | + | |<--------------------------------------------------------------------------------| + | | | | | +``` + + +0. Project owner can create an auditing request by staking tokens as bounties and providing the compiled program. + +1. The program being audited is divided into smaller subprograms of equal exploring complexity using static analysis by validator nodes. Each node is assigned a unique subprogram to audit for a specific period. This process, known as partitioning, is extremely fast and helps prevent auditor nodes from wasting computational power on code other nodes have already explored. The partitioning plan is deterministic and can be easily verified by other validator nodes, reaching consensus among all validator nodes before the auditing campaign begins. + +2. Each auditor nodes pick up a specific partition in the partitioning plan minted based on weighted sampling. Then, auditor nodes leverage fuzz testing techniques to analyze their subprogram. Auditor nodes are incentivized to prioritize auditing requests that are new, have high program complexity, and offer higher rewards. This is because auditor nodes are motivated to find more test cases that lead to vulnerabilities and new coverage, as well as to receive higher rewards for the test case NFTs they mint. + +3. When auditor nodes detect a test case leading to vulnerability or new code coverage, they mint an NFT for the test case. Judge nodes then verify the test case by re-executing it. Since the execution is deterministic, the outcome must also be deterministic, allowing validator nodes to reach consensus about the validity of test case NFTs. + +4. Project owner can terminate an audit request. The termination requests also mint an NFT for an auditing report automatically based on the intermediate statistics, test cases, and vulnerabilities. A reward (i.e., bounties) is then given to the validator nodes and auditor nodes that generated or verified the test case NFTs. + + +#### Technical Details + +**Partitioning Plan Synthesis** + +By converting a program into LLVM bytecode, we can create a weighted control flow graph (CFG) of it with the weight of each edge as relative difficulty of exploring such an edge. Graph partitioning algorithms can then partition the CFG into sub-trees, with the starting node of the CFG as the root of each tree. The partition plan can be concisely represented in O(log n) bytes, where `n` is the size of the CFG, making it possible to be fit into an on-chain variable. + +To determine the difficulty of exploring each edge in the CFG, we utilize static analysis tools. We pinpoint the comparison instruction that leads to the edge and determine the domain size of both the LHS and RHS. The domain size represents the likelihood of program execution failing into either side if the input is randomly selected. Currently, we use heuristics to determine the domain size. As future work, we can use abstract interpretation algorithms with a constraint solver to calculate it. The exploration difficulty is then estimated by dividing the domain size of the LHS and RHS. + +For instance, consider following simple program: + +```rust +// input: Vec +if (input[0] > 20) { // Line 1 + bug(); // Line 2 +} // Line 3 +``` + +The CFG would be +``` + + ┌──────────────┐ + ┌──────┤ Line 1 │ + │ └───────┬──────┘ + │ E2 │ E1 + │ ┌───────▼──────┐ + │ ┌──┤ Line 2 | + │ │ └──────────────┘ + │ │ E3 +┌──────▼───▼───┐ +│ Line 3 | +└──────────────┘ +``` + +Given `u8` domain is 256, weight (exploration difficulty) of E1 is `(256 - 20) / (256 + 20)` and E2 is `(256 + 20) / (256 - 20)`. By intuition, E2 is indeed more likely to be explored than E1. As there is no comparison instruction in during transition of E3, the exploration difficulty is 0, meaning as long as we can reach Line 2, we can reach Line 3. + +**Dynamic Program Analysis (DPA)** + +We support automated auditing of any program that can be compiled to LLVM bytecode by leveraging fuzz testing techniques, which involve sending random input to the program. This method, also known as heuristic search, aims to achieve 100% code coverage and uncover all vulnerabilities. While infinite time would guarantee zero false negatives, we use formal methods such as symbolic and concolic execution for guiding the fuzz testing search to reduce the time needed. Additionally, by partitioning the program into smaller, more manageable subprograms for each node, we can reduce the time required linearly as the number of nodes increases. + +Fuzz testing employs partitioning through the use of an instrumented target. If an input causes execution of code outside the partition plan, the target will terminate. Early termination reduces the time spent exploring code not within the partition, saving significant time. Similarly, symbolic and concolic execution can also conduct early-termination to avoid exploring code outside the partition. + + +**Reaching Consensus** + +Verifying partition plans and interesting test cases can be costly or even impossible on the chain. Thus, validator nodes use off-chain oracles. FuzzLand uses rollup techniques to move the oracle results onto the chain and reach consensus. Specifically, an optimistic rollup pallet is implemented to achieve consensus on partition plans and interesting test cases. Once a validator node mints a partition plan or an auditor node mints a test case NFT, other validator nodes can submit fraud proofs to challenge it within 50 blocks, or it will be committed. Unlike human auditors or judges, validator nodes can find evidence to challenge false claims in microseconds, as the verification process is automated and inexpensive, making optimistic rollups effective. + +*Interactively Partition Plan Verification*: Claimer can create a partition plan by submitting the weighted CFG and list of nodes in the CFG that needs to be divided. A challenger can either challenge the weighted CFG or the partition plan. To challenge the weighted CFG, the challenger submits a fraud-proof consisting of the root node of the minimum differing subtree in the CFG. The chain partially re-generates from that root node to the first child node by looking at branch, jump, and call instructions. That node must equal either party's differing node if at least one party is honest. Although generating full CFG is a costly operation as multiple complex graph analysis algorithm is needed, generating the next node with a known subgraph and context is cheap. To challenge the partition plan, the challenger must submit a better plan. The chain can compare the balance of each subgraph's total weights and determine which is the best partition plan. Comparison is very cheap since the chain only needs to sum up the weight of each subgraph and divide them. + +*Interactively Testcase Verification*: Claimer can confirm a test case by submitting the execution trace (a trace of basic blocks hit during execution) of the test case to the chain. The initial fraud-proof consists of the first differing program counter (PC) in execution trace and the state (i.e., dirty page of the memory and stack) before the differing PC. The challenged claimer can dispute the state and find the first differing state interactively with the challenger. When either the differing PC or state is found, the chain will re-execute partially from the state and PC with consensus (i.e., state and PC before the differing ones) using LLVM bytecode virtual machine. Since the execution would lead to a concrete result that is directly equal to that of either challenger or claimer, the chain can decide which party is gaming. Partial re-execution is not costly since the chain only needs to execute the basic block with dispute, which is usually a few simple instructions. A potential future work would be replacing this process with zero-knowledge proof. + +#### Technology Stack + +- Substrate +- Rust +- LLVM + +#### Dependencies + +- LibAFL for fuzzing +- Rustc for converting Substrate Pallets and ink! smart contracts to LLVM IR +- Substrate Client (https://github.com/scs/substrate-api-client) for WS communication between the chain and the oracles +- (Potentially) SymCC (https://github.com/eurecom-s3/symcc) for symbolic execution on LLVM bytecode +- (Potentially) yul2llvm (https://github.com/Veridise/yul2llvm) for converting Solidity to LLVM IR +- More TBD + +#### Implementation Details + +We are going to implement two Substrate modules with following traits: + + +**Optimistic Rollups**: +```rust +// Optimistic rollups pallet maintains a set of challengers and claimers. +// The claimers can claim arbitrary things that can be executed. +// The challengers can challenge arbitrary claims submitted previously. +// Optimistic rollups can transition costly on-chain execution to off-chain oracle while still reaching consensus with the execution correctness. +trait OptimisticRollups { + // When a challenge / dispute is submitted, use this function to determine whether the dispute is valid. + // Decision can be: wait for new argument (multi-round interactive rollups only); confirmed fraud; confirmed proof incorrect. + verifier: fn (proof: bytes) -> Decision; + + // When a claim is committed, the executor is invoked to execute the claim. + executor: fn (claim: bytes); + + // Claim something. + Claim(origin, data: bytes); + + // Challenge / Dispute a claim with proof. + Challenge(origin, proof: bytes); + + // Argue a challenge / dispute by challenger or claimer. + // Used for multi-round interactive rollups. + ArgueChallenge(origin, proof: bytes); + + // Commit latest block that may contain multiple claims. + Commit(origin); + + // Vote to ban a specific challenger / claimer. + // after an account gets enough vote, it gets removed from challenger / claimer set. + Ban(origin, account: Address); + + // Join with minimum token staked to be a challenger or claimer. + Join(origin, role: Role); +} + +``` + +Both partition plan and testcase can be interactively challenged and proved on chain efficiently by partial re-evaluation. + + +**Auditing**: +```rust +trait Audit { + // Onboard a project with minimum token (bounty) staked + // note: llvm_bytecode arg can be replaced by IPFS hash if the target is very large + OnboardProject(origin, llvm_bytecode: bytes) -> u256; + + // Offboard a project and mint a report + OffboardProject(origin, project_id: u256); + + // Submit a parition plan for the project by validator + SubmitPartitionPlan(origin, project_id: u256, plan: bytes); + + // Submit a testcase by auditor + SubmitTestcase(origin, project_id: u256, testcase: bytes); + + // Join with minimum token staked to be a validator or auditor + Join(origin, role: Role); + + // ...challenging methods +} +``` + +We are also going to implement the off-chain oracle. + +The oracle for auditor nodes needs to implement the DPA for LLVM targets that respect the partition they received. We use LLVM pass to modify the bytecode for achieving early termination and use LibAFL to manage the DPA campaign. + +LLVM Pass Pseudocode +```python +# Given Partition, Program +for BB in Program: + # Last instruction of BB is comparison instruction + if ProgramCounter(BB) not in Partition: + BB.Start.append( + new Instruction(Terminate()) + ) +``` + +The oracle for validator nodes needs to generate partition plans. We implement graph partitioning tool using Kernighan–Lin algorithm. As aforementioned, a crucial part for partitioning is the CFG edge weight calculation. We implement it using LLVM pass. + +Graph edge weight calculation Pseudocode +```python +# Given Program +for BB in Program: + # Last instruction of BB is comparison instruction + if BB.Tail is Comparison: + LHS, RHS, Op = BB.Tail as Comparison + # Count the percentage between domain of LHS and domain of RHS based on Op + return Count(Op, AbstractInterp(LHS), AbstractInterp(RHS)) + else: + return 0 +``` + +The oracle also interacts with chain by interacting with optimistic rollups. The VM used to re-execute LLVM bytecode partially is https://github.com/andoma/vmir, which can be compiled to WASM. We will implement a wrapper pallet for this VM. + +#### UI +Design Doc: https://xd.adobe.com/view/41cd2fa4-f124-4877-8b17-a8ff47799bf7-149e/ + +PoC Source Code: https://github.com/fuzzland/protocol_v1/tree/main/frontend + + +Screen 1: Onboarding - Upload Project +![](https://i.imgur.com/blNwnb7.png) + +Screen 2: Onboarding - Select Bounty +![](https://i.imgur.com/nJIFcWW.png) + +Screen 3: Auditing Report +![](https://i.imgur.com/2wX9Mf6.png) + + + +### Ecosystem Fit +Our platform can serve the project owners who have auditing requests for their projects, regardless of Web2 or Web3: as long as they can be compiled into LLVM (e.g., any Ink, Solidity, Rust, C++, etc. programs). The auditing reports and how they correlate with the on-chain statistics can also be reviewed by anyone: not just the project owner, but also the project users. Project owners can gain more trust by sharing the auditing reports backed with *consensus* with their users. + +Downstream DeFis, including insurance, using the auditing intermediate information and results can be deployed to our chain. As we enable the contracts pallet in our chain, the DeFis can be developed in the form of Ink smart contracts. XCM also makes it possible to pipeline the auditing results to other chains. + +Other projects can reuse the components of FuzzLand platforms. For example, the optimistic rollups pallet can be used by Layer 2 solutions. Collaborative manual auditing projects can also use the audit pallet or our chain by replacing the rollups pallet with consensus pallets. + +[Decentralized Security Marketplace](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/decentralized-security-marketplace.md) is a related RFP. [QRUCIAL DAO](https://github.com/w3f/Grants-Program/pull/989) is a related project in Substrate ecosystem. QRUCIAL DAO and FuzzLand both reach consensus about the auditing result. The fundamental differences are: +* FuzzLand harnesses the computation power of the crowd to perform compute-intensive dynamic program analysis, resulting in fast and highly accurate auditing. Yet, QRUCIAL DAO's analysis is performed by rerunning a same set of fast static analysis tools on multiple nodes, of which the requirement of multiple nodes is solely for reaching consensus. +* We support all LLVM targets, including Substrate pallet, ink!, Solidity, Move, Rust, C/C++, etc. projects while QRUCIAL DAO is tailored for smart contract auditing. +* We use optimistic rollups to efficiently reach consensus while QRUCIAL DAO uses the governance pallet. + +Code4rena, Immunefi, Secure3, Sherlock, etc. are similar projects in other ecosystems, but they all rely on human auditors. + +## Team :busts_in_silhouette: + +### Team members (In order of joining time) + +Jeff Liu (PM & Marketing) + +Chaofan Shou (Core Dev) - https://scf.so/ + +Shangying Tan (Core Dev) - https://shangyit.me/ + +Ben Fong (Core Dev + QA) + +Yiqi Hu (Core Dev) + + +### Contact + +- **Contact Name:** Jeff Liu +- **Contact Email:** jeff@fuzz.land +- **Website:** + +### Legal Structure + +- **Registered Address:** N/A +- **Registered Legal Entity:** N/A + +### Team's experience + +Chaofan is a PhD student at UC Berkeley working on program analysis and distributed system. He has multiple research papers about fuzz testing in top conferences (e.g., [CorbFuzz](https://arxiv.org/pdf/2109.00398.pdf), [Rare Path Fuzzer](https://arxiv.org/pdf/2212.09004.pdf)). He has also participated in auditing and found numerous critical vulnerabilities in well-known software and Web3 protocols. He will work on the technical portion of the project, including implementing the aforementioned Substrate pallets and the offchain oracle. + +Shangyin is a PhD student at UC Berkeley working on formal methods and fuzzing. He has previously worked at Microsoft and contributed to well-known symbolic / concolic execution tools (e.g., [sai](https://github.com/Kraks/sai)). He will be developing the algorithm for partition plan synthesis and interactive verifiers in optimistic rollups. + +Yiqi Hu graduated with a master's degree from Carnegie Mellon University. She has a strong background in program analysis and will be working on implementing the fuzz testing algorithm. + +Ben graduated from SJSU and has a strong background in full-stack development and automated QA. He will be in charge of Web App development and CI/CD pipeline. + +Jeff is the founding engineer and PM at VMware Cloud Infra org and has founded multiple startups that have been acquired by companies like Alibaba. He has co-invested in well-known Web3 companies like Deeper Network, Holokit, etc. He will be overseeing the development process. + +### Team Code Repos + +- +- + +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. + +- Chaofan Shou +- Shangying Tan +- Ben Fong +- Yiqi Hu + +### Team LinkedIn Profiles (if available) + + +## Development Status :open_book: + +- This is the Substrate chain implementation. We have just started to work on it. +- (Private for now, can share upon requests) This is our fuzz testing tool that can conduct DPA as described before. Supports for partitioning programs and conduct DPA on subprograms are WIP. Will be moved to `oracle` repo. +- We have built a simple FuzzLand protocol PoC for EVM-compatible chain in Solidity. However, due to high gas fee, low throughput, and hard to customize the chain, we decide to switch to implement a Substrate chain. Frontend and telemetry API in this repo will be reused. +- Adds the necessary analysis datasource for partition plan generation to the fuzzing library. +- We also have the first version of our website. + + +#### Related Papers +* AFLTeam: https://ieeexplore.ieee.org/document/9678810/ +* LibAFL: https://dl.acm.org/doi/abs/10.1145/3548606.3560602 + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 5 months +- **Full-Time Equivalent (FTE):** 4 FTE +- **Total Costs:** 30,000 USD + +### Milestone 1 — Offchain Oracle + +- **Estimated duration:** 1.5 month +- **FTE:** 4 FTE +- **Costs:** 12,000 USD + +| Number | Deliverable | Specification | +| -----: | --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 0a. | License | GPLv3 | +| 0b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) spin up one of a validator or a auditor node. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an **article**/workshop that explains the technical details. We will also publish research papers about our algorithms and implementations. | +| 1. | Auditor Nodes Oracle Library | We will implement our DPA algorithm for LLVM targets in the form of a Rust library and fine tune it for ink! contracts and Substrate pallets. | +| 2. | Validator Nodes Oracle Library | We will implement the partition plan synthesis algorithm and offchain testcase validation tool in the form of a Rust library. | +| 3. | Verifier | We will develop the verifier for testcase validation and partition plan validation in the form of a Rust library that can be compiled to WASM. We will benchmark this library to ensure that the complexity of result verification is significantly lower than that of offchain oracles generating results. | +| 4. | Integration Testing | We will demonstrate that at least 3 auditor nodes oracle can efficiently collaborate to conduct program analysis for a ink! contract. We will also demonstrate that verifiers can be resistent to gaming by running a cluster of 2 honest validator nodes oracle and 1 malicious node. | + + +### Milestone 2 — Substrate Chain + +- **Estimated duration:** 3 month +- **FTE:** 4 FTE +- **Costs:** 18,000 USD + +| Number | Deliverable | Specification | +| -----: | --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 0a. | License | GPLv3 | +| 0b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an **article**/workshop that explains the technical details and how to initiate an audit request. We will also publish research papers based on effectiveness of our solution and metrics collected from operating our platform. | +| 1. | Substrate module: optimistic_rollups | We will create a pallet that implements the optimistic rollups algorithm and a Rust SDK can that can interact with the pallet. We will also integrate the verifier developed in last milestone into this pallet. | +| 2. | Substrate module: audit | We will create a pallet for onboarding auditing requests, storing testcases, and distributing rewards. The pallet can also generate auditing reports in txt format automatically. | +| 3. | Substrate chain | Module `optimistic_rollups` and `auditing` will be integrated into a Substrate node, to enable auditor nodes to submit intermediate auditing results and information. This chain will integrate contracts, treasury, council, democracy and also other essential pallets, to build a full-featured blockchain. | +| 4. | Offchain oracle clients | Auditor and validator nodes clients will be built by integrating the libraries built in the last milestone. The two clients will be able to interact with the chain so that the full auditing workflow shown in the [Project Details](#Project-Details) can be accomplished. | +| 4. | Web App | We will create a web app, to let users easily interact with our substrate node. Users can create auditing requests, visualize intermediate auditing information, and view final auditing report. | + +## Future Plans + +* Allowing project owners to define their own types of vulnerabilities (e.g., business logic violations). +* Bring in ZK-SNARKs for testcase sharing. + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Personal recommendation From 8a3d2e108ce8dea6b9af3378dfec9ab4234c30a2 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 13 Feb 2023 11:27:53 +0100 Subject: [PATCH 141/578] Update index.md Add fuzzland --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 8c232da46e4..63f5a6434d1 100644 --- a/applications/index.md +++ b/applications/index.md @@ -49,6 +49,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Zeeve](https://www.zeeve.io) | [Parachain deployment zoombienet testing automation](Zeeve_Parachain_deployment_zoombienet_testing_automation.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | | [Polytope Labs](https://research.polytope.technology/) | [Trie Verifier Implementation](solidity-trie-verifier.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | | Off-Narrative Labs | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☐ | ☐ | +| [FuzzLand](https://fuzz.land/) | [FuzzLand](FuzzLand.md) | [GitHub](https://github.com/fuzzland) | ☐ | ☐ | ☐ | ## 2022 From ba2bc9d6bedaf3e4a6e509ebdf1b5237d7ddc379 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Mon, 13 Feb 2023 12:22:30 +0100 Subject: [PATCH 142/578] Update for readability --- docs/contribute.md | 10 ++++++---- docs/funding.md | 4 ++-- docs/process.md | 1 + 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/docs/contribute.md b/docs/contribute.md index 4fa142cb6f5..615bedfc735 100644 --- a/docs/contribute.md +++ b/docs/contribute.md @@ -5,8 +5,10 @@ title: Contribute The W3F Grants Program aims to be as open and accessible as possible. If you are interested in contributing or getting involved, there are several ways you can do that: -- We are open to milestone evaluations from third parties. If you are particularly interested in a certain project, or particularly knowledgeable on a relevant subject, [submit your own evaluation](https://github.com/w3f/Grant-Milestone-Delivery#ballot_box_with_check-external-evaluations). -- We encourage anyone to submit a request for proposals (RFPs). If you find that there is something missing in our ecosystem (a tool, a project, infrastructure, etc.), that we could help fund, please [submit an RFP](https://github.com/w3f/Grants-Program/blob/master/README.md#mailbox_with_mail-suggest-a-project). -- Join us! We are looking for a Technical Grants Evaluator (among other things) to join us full time. Check out [our current job openings](https://web3.bamboohr.com/jobs/) and apply! +📋 We are open to milestone evaluations from third parties. If you are particularly interested in a certain project, or particularly knowledgeable on a relevant subject, feel free to comment on any [open grant applications](https://github.com/w3f/Grants-Program/issues?q=is%3Aopen+label%3A%22ready+for+review%22+sort%3Aupdated-desc), or have a look at the [open pull requests on our milestone delivery repository](https://github.com/w3f/Grant-Milestone-Delivery/pulls) and [submit your own evaluation](https://github.com/w3f/Grant-Milestone-Delivery#ballot_box_with_check-external-evaluations). -We strive to continue improving our grants program and are always open to feedback. If you would like to share any suggestions or criticism, please reach out to us on [Github](https://github.com/w3f/Grants-Program) or [Matrix](https://matrix.to/#/#w3f:matrix.org)! +🔍 If you find that there is something missing in our ecosystem (a tool, a project, infrastructure, etc.) that we could help fund, please [submit a Request For Proposals (RFP)](https://github.com/w3f/Grants-Program/blob/master/README.md#mailbox_with_mail-suggest-a-project). If writing an RFP seems too daunting a task, feel free to [submit it as an issue on our Github repository](https://github.com/w3f/Grants-Program/issues) so anyone can contribute. + +🤝 Join us! We are looking for a Technical Grants Evaluator (among other things) to join us full time. Check out [our current job openings](https://web3.bamboohr.com/jobs/) and apply! + +We strive to continue improving our grants program and are always open to feedback. If you would like to share any suggestions or criticism, please reach out to us on [Github](https://github.com/w3f/Grants-Program) or [Matrix](https://matrix.to/#/!XpynPDLusWUWfDpaqr:matrix.org?via=web3.foundation&via=matrix.org)! diff --git a/docs/funding.md b/docs/funding.md index d4391989ce1..33af5de690f 100644 --- a/docs/funding.md +++ b/docs/funding.md @@ -32,7 +32,7 @@ Below is a list of other grant programs in the Polkadot/Substrate ecosystem: - [Interlay Labs Grants Program](https://github.com/interlay/Grants-Program) - [Moonbeam Grants Program](https://moonbeam.foundation/grants/) - [OAK’s Developer Grants](https://oak.tech/community/grants/) -- [peaq Ecosystem Grant Program](https://www.peaq.network/grant-program) -- [Phala Builders Program](https://wiki.phala.network/en-us/build/general/builders-program/) +- [peaq Ecosystem Grant Program](https://www.peaq.network/grant-program) +- [Phala Builders Program](https://wiki.phala.network/en-us/build/general/builders-program/) - [Picasso / Composable Grants Program](https://grants.composable.finance) - [SubQuery Grants Programme](https://subquery.network/grants) diff --git a/docs/process.md b/docs/process.md index 7bf65710f48..86a0b841df8 100644 --- a/docs/process.md +++ b/docs/process.md @@ -7,6 +7,7 @@ If you are certain you want to apply for a W3F grant, head straight to our [appl ## Funding Opportunities Overview +For a longer list and a description of the programs listed below, check out [our page on alternative funding opportunities](funding.md). ```mermaid flowchart LR From ebf0ed48d2100d20b7ccd61ad572bfeb82e3bd95 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Mon, 13 Feb 2023 10:23:03 -0300 Subject: [PATCH 143/578] Update index.md (#1536) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 63f5a6434d1..d34c264c054 100644 --- a/applications/index.md +++ b/applications/index.md @@ -38,7 +38,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | | [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☐ | ☐ | ☐ | | [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | -| [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☐ | ☐ | +| [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☐ | | [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☐ | ☐ | | [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | | [Aviraj Khare](https://github.com/avirajkhare00) | [Polkasearch](polkasearch.md) | [GitHub](https://github.com/avirajkhare00) | ☐ | ☐ | ☐ | From 77609bb07ea1baf83847730afa5bad620379efb5 Mon Sep 17 00:00:00 2001 From: Luca Eugenio <88165605+Lord-Nymphis@users.noreply.github.com> Date: Tue, 14 Feb 2023 07:51:42 +0000 Subject: [PATCH 144/578] Datagen-Update timeline (#1537) * Update Datagen_Project.md * Update Datagen_Project.md --------- Co-authored-by: cuteolaf <53915161+cuteolaf@users.noreply.github.com> --- applications/Datagen_Project.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/Datagen_Project.md b/applications/Datagen_Project.md index 87e014fc167..886e33485dd 100644 --- a/applications/Datagen_Project.md +++ b/applications/Datagen_Project.md @@ -174,7 +174,7 @@ The goal is to achive a fully functional mechanism for the random selection of t ### Overview -- **Total Estimated Duration:** 5 months (starting date - August 2022) +- **Total Estimated Duration:** 5 months (starting date - August 2022) _ Update: Because of changes in the development team M2 delivery date will be ≈15th of March 2023, with relative shift of the whole timeline. - **Full-Time Equivalent (FTE):** 2 - **Total Costs:** 44,000 USD From a9a83b0e3c9f431c804451f9a6a22cf34a2ecd80 Mon Sep 17 00:00:00 2001 From: fuu Date: Tue, 14 Feb 2023 20:01:17 +0800 Subject: [PATCH 145/578] Anchor, On-chain Linked List pallet and Name Service (#1528) * anchor project * Checking before pull * Modify the format. * Modify the format again. * milestone update. * update to Polkadot address * From USDC to USDT, :-) --- applications/Anchor.md | 286 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 286 insertions(+) create mode 100644 applications/Anchor.md diff --git a/applications/Anchor.md b/applications/Anchor.md new file mode 100644 index 00000000000..86a6777a936 --- /dev/null +++ b/applications/Anchor.md @@ -0,0 +1,286 @@ +# Anchor, On-chain Linked List pallet and Name Service + +- **Team Name:** Fuu +- **Payment Address:** 13u5kLGrt4n1Smc78ZXtYVedgp1U1LyGAAHtPFtVcv6Z1BtR (USDT) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + + +## Project Overview :page_facing_up: + +### Overview + +- Anchor is a on-chain linked list system base on substrate 3.0.0. It is used to support cApp ( Chain Application ) development. On another hand, Anchor can alse be treated as Name Service or on-chain key-value storage system. + +- Anchor is a isolated substrate pallet. It is currently used in the application of freeSaying. It can provide flexible data structure on the chain and handle complex logic without upgrading the substrate node itself. +You can access the [freeSaying ( Only applicable to mobile )](https://freesaying.net) demo to know well. Anchor network is the very important basic storage system. Anchor.js is a isolate JS library to access Anchor network, can read and write data easily. +Anchor pallet is a part of EasyPolka, the relationship as follow : + +![easypolka.png](http://android.im/anchor/easypolka.png) + +QR to access to freesaying.net. +![easypolka.png](http://android.im/anchor/qr.png) + +- With Anchor, you can use run a substate network just need a bit upgrade. Through the highly customizable data structure and the ability of cApp, the threshold of application development on the chain is greatly reduced. It means that new developers who even does not know blockchain well can build cApp just by Javascript and publish it nearly free. + +- As a web developer, I firmly believe in the future of blockchain technology, but when I turn to blockchain development, I encounter a huge threshold. It takes a lot of time to get familiar with both language and various concepts. At the same time, technology is still improving, and a stable development environment cannot be obtained. All of these prompted me to improve EasyPolka for my own development. +So far, only one person myself can develop complex cApp ( on-chain applications ). I believe that this can help other developers to build cApps more efficiently. +Will try to apply the left part, it is a bit complex, I am working on regrouping them now. The image show the whole structure. + +![easypolka.png](http://android.im/anchor/easypolka_not.png) + +### Project Details + +- Anchor development itself has been done, and it is deployed here [check "wss://dev.metanchor.net" on polkadot.js.org](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fdev.metanchor.net#/explorer). One cApp is deployed to test too, the URL is [https://freesaying.net](https://freesaying.net). This React project load the target Anchor "freeSaying" from dev.metanchor.net, then run the cApp which is a socail media application. + +- There are 4 methods and 2 stores to implement the on-chain linked list function in Anchor pallet. + +- Substrate 3.0.0 and Rust for Anchor pallet. Javascript for anchor.js. + +- Code here [https://github.com/ff13dfly/Anchor](https://github.com/ff13dfly/Anchor), the document is the next step. + +- Treat Anchor as Name Service, there is no available pallet can be use. Have checked here [Open Source Polkadot Stack](https://wiki.polkadot.network/docs/build-open-source). +![easypolka.png](http://android.im/anchor/status.png) + +- The function of Anchor has been finalized and will not be further expanded on substrate side. The function of the current version is the final form. + +### Ecosystem Fit + +- An available Name Services on Substrate 3.0.0, and it is extended to a On-chain Linked List system. + +- Developers who have not yet used substrate/Polkadot. Developers who do not like Smart Contract way to develop application. + +- Developer can build application flexibly without understanding the whole blockchain system. I think this is attractive to many developers. + +- From the [Open Source Polkadot Stack](https://wiki.polkadot.network/docs/build-open-source), there are 4 Name Service pallets, 2 red ( can not compatible to substrate 3.0.0 ) and 2 yellow ( code not updated more than 2 months by checking github ). + +## Team :busts_in_silhouette: + +### Team members + +- Zhongqiang Fu, individual developer. + +### Contact + +- **Contact Name:** Zhongqiang Fu +- **Contact Email:** ff13dfly@163.com +- **Website:** https://github.com/ff13dfly/ + +### Legal Structure + +- Individual + +### Team's experience + +- On substrate, Substrate with Anchor pallet has been build successful and run at [wss:dev.metanchor.net](wss:dev.metanchor.net). I have tried to load a three nodes network successful. + +### Team Code Repos + +- https://github.com/ff13dfly/ +- https://github.com/ff13dfly/Anchor + +### Team LinkedIn Profiles (if available) + +## Development Status :open_book: + +- Demo cApp [freeSaying](https://android.im/vManager/) is published now. The test network is available, you can access [wss:dev.metanchor.net](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fdev.metanchor.net#/explorer). Anchor pallet functions have been developed, but not tested entirely. + +## Development Roadmap :nut_and_bolt: + +### Anchor pallet + +- There are 4 methods exposed. One for setting data, Three for trading anchor. + ![easypolka.png](http://android.im/anchor/methods.png) + 1. setAnchor, set Anchor data method. + + ```RUST + pub fn set_anchor( + origin: OriginFor, //default + key: Vec, //Anchor name + raw: Vec, //raw data to storage + protocol: Vec, //data protocol, used to decide how to decode raw data + pre:T::BlockNumber //the previous block number which storage anchor data + ) -> DispatchResult { + // code here. + Ok(()) + } + ``` + + 2. sellAnchor, sell your Anchor publish or to target account. + + ```RUST + pub fn sell_anchor( + origin: OriginFor, //default + key: Vec, //Anchor name + cost: u32, //unit accuracy + target:::Source //target buyer SS58 address. If the same as owner, can be sold to anyone. + ) -> DispatchResult { + // code here. + Ok(()) + } + ``` + + 3. unsellAnchor, revoke Anchor sell status. + + ```RUST + pub fn unsell_anchor( + origin: OriginFor, //default + key: Vec, //Anchor name + ) -> DispatchResult { + // code here. + Ok(()) + } + ``` + + 4. buyAnchor, buy target Anchor which is on sell. + + ```RUST + pub fn buy_anchor( + origin: OriginFor, //default + key: Vec, //Anchor name + ) -> DispatchResult { + // code here. + Ok(()) + } + ``` + +- There are two Runtime Storage. One for the anchor data status, one for the on-sell list. + ![easypolka.png](http://android.im/anchor/storage.png) + ```RUST + // (T::AccountId,T::BlockNumber) + // T::AccountId, the anchor owner ss58 address + // T::BlockNumber, last block number when updated data successfully. + pub(super) type AnchorOwner = StorageMap<_, Twox64Concat, Vec, (T::AccountId,T::BlockNumber)>; + + // (T::AccountId, u32,T::AccountId) + // T::AccountId, the anchor owner ss58 address + // u32, the sell price for the anchor + // T::AccountId, the target buyer. If the same as owner, it is free to buy. + pub(super) type SellList = StorageMap<_, Twox64Concat, Vec, (T::AccountId, u32,T::AccountId)>; + ``` + +### anchor.js + +- exposed methods. Three parts : basic substrate functions, anchor data I/O functions, anchor exchange functions. It has been used in the demo freeSaying, but no isolated yet. And exchange part need to code this time. +Anchor.js can help developer accessing Anchor network by this single JS. + + ```JS + /*******************************/ + /* substrate related functions */ + /*******************************/ + + //link to target substrate node + exports.link=function(endpoint,callback){ + /* return callback && callback(PolkadotJS.API) */ + }; + + //load encry file to get pair + exports.load=function(file,password,callback){ + /* return callback && callback(pair) */ + }; + + //subcribe the latest block + exports.subcribe=function(callback){ + /* return callback && callback(anchorDataList) */ + }; + + //check account balance + exports.balance=function(ss58Address,callback){ + /* return callback && callback(amount) */ + }, + + /***********************************/ + /* Anchor pallet related functions */ + /***********************************/ + + /* data part */ + //get the latest anchor data + exports.latest=function(anchor,callback){ + /* return callback && callback(formattedAnchorData) */ + }; + + //get the anchor data on special block. + exports.target=function(anchor,block,callback){ + /* return callback && callback(formattedAnchorData) */ + }; + + //get the list data of anchor. + exports.history=function(anchor,callback,limit){ + /* return callback && callback(listofAnchorsData) */ + }; + + //set target Anchor data. + exports.write=function(pair,anchor,raw,protocol,callback){ + /* return callback && callback(toChainProcessStatus) */ + }; + + /* market part */ + //set Anchor status to sell. + exports.sell=function(pair,anchor,cost,target,callback){ + /* return callback && callback(true/false) */ + }; + + //buy anchor on sell. + exports.buy=function(pair,anchor,callback){ + /* return callback && callback(true/false) */ + }; + + //revoke anchor from selling. + exports.unsell=function(pair,anchor,callback){ + /* return callback && callback(true/false) */ + }; + ``` + +### Overview + +- **Total Estimated Duration:** 1 month +- **Full-Time Equivalent (FTE):** 1 +- **Total Costs:** 6,000 USDT + +### Milestone 1 — Anchor pallet testing & documents, anchor.js full function + +- **Estimated duration:** 1 month +- **FTE:** 1 +- **Costs:** 6,000 USDT + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | Apache 2.0 / GPLv3 | +| 0b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. On anchor.js, will supply demo to test. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. I am not so fimilar with Docker, that will take a bit long time. | +| 0e. | Anchor pallet | Will fix if neccessary. Mainly testing this time. | +| 0f. | anchor.js | A demo with all functions will be developed by React | + +## Future Plans + +- Anchor is the data storage part of EasyPolka, it is the most important component. Next, the whole EasyPolka will be open source. At present, it includes the following contents. + +| Order | Name | Demo | Github | introduction | +| -----: | ----------- | ------------- | ------------- | ------------- | +| 1 | Anchor | wss://dev.metanchor.net | [https://github.com/ff13dfly/Anchor](https://github.com/ff13dfly/Anchor) | Linked list on chian & Name service | +| 2 | Saying | [https://freesay.net](https://freesay.net) | Not yet | Plinth for cApp | +| 3 | cSaying | on block 2,220 | Not yet | FreeSaying cApp , pure JS app | +| 4 | vGateway | [https://android.im/vGateway/](https://android.im/vGateway/) | Not yet | Gateway access to vServices | +| 5 | vManager | [https://android.im/vManager/](https://android.im/vManager/) | Not yet | Management portal for vServices | +| 6 | vHistory | No domain, node.js app | Not yet |Anchor cache vService | +| 7 | vSaying | No domain, node.js app | Not yet] | FreeSaying comment vService | +| 8 | vMarket | No domain, node.js app | Not yet | Free charge vService | +| 9 | vMix | No domain, node.js app | Not yet | Front mixer vService | +| 10 | vSocial | No domain, node.js app | Not yet | Fav & tread vService | + +![easypolka.png](http://android.im/anchor/easypolka_not.png) + +- The functions above, you can test on the cApp [freeSaying](https://freesaying.net). +It is not very stable to access Github here, so the left codes are on my private git server. + +- The whole EasyPolka framework works properly, but still so many details to fix and neccesary function to add. + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Web3 Foundation Website. + +- Demo cApp [freeSaying](https://android.im/vManager/) is published now. The test network is available, you can access [wss:dev.metanchor.net](wss:dev.metanchor.net). + +- I have tried twice to apply the Gant Application but not accepted. + Anchor, a key-value storage system for substate. Now, it is extended, and applying again, :-) + SimPolk, simulator of Polkadot. From df03f6d8d248c0878055343fd699ff3c71529e8b Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 14 Feb 2023 13:03:19 +0100 Subject: [PATCH 146/578] Update index.md Add Anchor --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index d34c264c054..39879396cf6 100644 --- a/applications/index.md +++ b/applications/index.md @@ -50,6 +50,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Polytope Labs](https://research.polytope.technology/) | [Trie Verifier Implementation](solidity-trie-verifier.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | | Off-Narrative Labs | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☐ | ☐ | | [FuzzLand](https://fuzz.land/) | [FuzzLand](FuzzLand.md) | [GitHub](https://github.com/fuzzland) | ☐ | ☐ | ☐ | +| [Fuu](https://github.com/ff13dfly/) | [Anchor, On-chain Linked List pallet and Name Service](Anchor.md) | [GitHub](https://github.com/ff13dfly/Anchor) | ☐ | ☐ | ☐ | ## 2022 From 850d43e9bd2df806dd9d412bbe6209fe71cdd10f Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Wed, 15 Feb 2023 05:24:11 -0800 Subject: [PATCH 147/578] Update tokenomics-survey-2022.md (#1540) * Update tokenomics-survey-2022.md Fix format * removed ":" from the title --- applications/tokenomics-survey-2022.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/applications/tokenomics-survey-2022.md b/applications/tokenomics-survey-2022.md index 1e5eccd3fe8..6f8a5efdfaa 100644 --- a/applications/tokenomics-survey-2022.md +++ b/applications/tokenomics-survey-2022.md @@ -1,4 +1,4 @@ -# Substrate Tokenomics: +# Substrate Tokenomics - **Team Name:** Mark Van de Vyver [PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) - **Payment Address:** To be provided (e.g. 0x8920... (USD)) @@ -216,9 +216,9 @@ Personal ### Overview -- Total Estimated Duration: 3 months -- Full-Time Equivalent (FTE): 0.2 FTE -- Total Costs: 10,000 USD +- **Total Estimated Duration:** 3 months +- **Full-Time Equivalent (FTE):** 0.2 FTE +- **Total Costs:** 10,000 USD ### Milestone 1 — Data gathering & Polkadot Networks From a375228a7f01bcba26c22dcedfa6109f508df2fa Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Thu, 16 Feb 2023 08:01:30 -0500 Subject: [PATCH 148/578] RFP: Data Analytics Platform (#1539) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Create analysis-website-and-data-platform.md * Update analysis-website-and-data-platform.md * Update docs/RFPs/Open/analysis-website-and-data-platform.md Co-authored-by: Sebastian Müller * Update docs/RFPs/Open/analysis-website-and-data-platform.md Co-authored-by: Sebastian Müller * Update docs/RFPs/Open/analysis-website-and-data-platform.md Co-authored-by: Sebastian Müller --------- Co-authored-by: Sebastian Müller --- .../analysis-website-and-data-platform.md | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 docs/RFPs/Open/analysis-website-and-data-platform.md diff --git a/docs/RFPs/Open/analysis-website-and-data-platform.md b/docs/RFPs/Open/analysis-website-and-data-platform.md new file mode 100644 index 00000000000..79935c631b7 --- /dev/null +++ b/docs/RFPs/Open/analysis-website-and-data-platform.md @@ -0,0 +1,21 @@ +# Analytics Website/Data Platform + +* **Status:** Open +* **Proposer:** [Keegan Quigley](https://github.com/keeganquigley) +* **Teams/People that could deliver the RFP**: @web3go-xyz + +## Project Description :page_facing_up: +On-chain analysis is an important emerging field for the Polkadot & Kusama ecosystems. One can currently use GraphQL to query data via backend services such as [Subquery](https://explorer.subquery.network/) and [Subsquid](https://app.subsquid.io). However, it would be nice to have an easy-to-use front-end with sharable customized dashboards as well. The end result might look similar to [Dune Analytics](https://dune.com/browse/dashboards), a popular data sharing dashboard used in the Ethereum community. Using Dune Analytics, users can quickly create and openly share queries which can then be forked and remixed in a variety of ways by others. + +This RFP, based on a [forum post](https://forum.polkadot.network/t/dune-analytics-style-data-service-for-polkadot-kusama/271) by Rob Habermeier, aims to fund a dashboard designed to allow analysts and power-users to interactively query high-quality data, and subsequently create custom charts and visualizations to share metrics with others. Ideally, many projects would create custom dashboards to share data with the Polkadot & Kusama community. + +At the moment, building custom dashboards requires quite a bit of effort since the data needs to be fed directly from the parachain via Polkadot.js, or through a custom squid or GraphQL via Subquery. This RFP aims to ease the process of building dashboards and sharing powerful data visualizations. + +## Deliverables :nut_and_bolt: +The following items could be potential expected deliverables for the project. Of course, improvements and additions are more than welcome. + +- Define a common dataset and data model for Substrate that can be shared for interactive querying use cases such as on Dune Analytics. +- Build a publicly accessible interactive query engine. The platform should allow users to aggregate raw data from relay chains and parachains into SQL databases that can be easily queried. This might include storing data on a postgreSQL database, for example. +- Users should be able to perform simple SQL queries in a matter of minutes, and create visualizations and dashboards using these queries. +- Provide the ability to integrate data from backend services such as Subsquid, Subquery. +- Create UX/UI to make it easier for analysts and power-users to easily query human-readable data and follow key metrics. The front-end could be written in React, AngularJS, Vue, etc. From d2425e74be7c8732050ce9f60716dfbe4341588c Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Thu, 16 Feb 2023 05:57:41 -0800 Subject: [PATCH 149/578] Fix event (from edited to synchronize) (#1542) --- .github/workflows/check_application_document.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check_application_document.yml b/.github/workflows/check_application_document.yml index 155b519d6ea..ddb8f7574c9 100644 --- a/.github/workflows/check_application_document.yml +++ b/.github/workflows/check_application_document.yml @@ -3,7 +3,7 @@ name: Check application document on: workflow_dispatch: pull_request: - types: [opened, edited] + types: [opened, synchronize] jobs: get_filename: From 3f8b08997f6a34984f7be46ee6540c09fd51992a Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Thu, 16 Feb 2023 14:35:08 -0500 Subject: [PATCH 150/578] Rename docs/RFPs/Under Development/ISO_8583.md to docs/RFPs/open/ISO_8583.md (#1544) --- docs/RFPs/{Under Development => open}/ISO_8583.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/RFPs/{Under Development => open}/ISO_8583.md (100%) diff --git a/docs/RFPs/Under Development/ISO_8583.md b/docs/RFPs/open/ISO_8583.md similarity index 100% rename from docs/RFPs/Under Development/ISO_8583.md rename to docs/RFPs/open/ISO_8583.md From 1a01471380a42b60a7339041147beac551ebf548 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Fri, 17 Feb 2023 08:57:42 +0100 Subject: [PATCH 151/578] Move ISO_8583.md from open to Open folder --- docs/RFPs/{open => Open}/ISO_8583.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/RFPs/{open => Open}/ISO_8583.md (100%) diff --git a/docs/RFPs/open/ISO_8583.md b/docs/RFPs/Open/ISO_8583.md similarity index 100% rename from docs/RFPs/open/ISO_8583.md rename to docs/RFPs/Open/ISO_8583.md From ae26cd349e0470478334fb27d6fff591f51550d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Fri, 17 Feb 2023 09:29:15 +0100 Subject: [PATCH 152/578] Show edit links on website --- docusaurus.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docusaurus.config.js b/docusaurus.config.js index 747791e98b7..5b556500219 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -126,7 +126,7 @@ module.exports = { { docs: { routeBasePath: '/', - // editUrl: 'https://github.com/w3f/grants/edit/master/', + editUrl: 'https://github.com/w3f/Grants-Program/edit/master/', // showLastUpdateAuthor: true, // showLastUpdateTime: true, sidebarPath: require.resolve('./sidebars.js'), From 22d06e5dd150cc8a8a7b3f5e9d014a2d84dff55a Mon Sep 17 00:00:00 2001 From: ashWhiteHat Date: Sat, 18 Feb 2023 04:38:34 +0900 Subject: [PATCH 153/578] zkWasm Rollup: Rollup Transfer Transactions based on Wasm (#1487) * draft wasm rollup * specify apache 2.0 --- applications/zkwasm-rollups-transfer.md | 221 ++++++++++++++++++++++++ 1 file changed, 221 insertions(+) create mode 100644 applications/zkwasm-rollups-transfer.md diff --git a/applications/zkwasm-rollups-transfer.md b/applications/zkwasm-rollups-transfer.md new file mode 100644 index 00000000000..2465d830c58 --- /dev/null +++ b/applications/zkwasm-rollups-transfer.md @@ -0,0 +1,221 @@ +# Zkwasm Rollups Transfer + +- **Team Name:** Zkwasm Rollups Transfer +- **Payment Address:** 0x9061b0787D28d0fDaD845d670F7505EAE5F3B01B (USDT) +- **Level:** 3 + +## Project Overview :page_facing_up: + +We would like to implement transfer rollups by **zkwasm**. + +This project enables us high speed and cheap gas fee transfer transactions by **zkwasm**. The structure is similar to **zk rollup** but we use **wasm** as execution environment. + +### Overview + +Through this grant, we would like to implement rollup L2 envorinment for transfer transactions powered by **zkwasm**. The **zk rollup** allows us high speed and cheap gas fee transfer transactions, and to deposit asset safely. We inherit these features and execute transfer transactions on L2 **wasm** environment, and prove the validity of state transition by zero knowledge proof. +The main differences from **zk rollup** are two things. + +#### General purpose rollup + +The **zk rollup** is application specific and it can only execute transfer transactions. Supporting **wasm** allows us to extend to other functionalities easily as in [zkevm](https://github.com/privacy-scaling-explorations/zkevm-circuits) and we can reuse the circuit which proves the validity of **wasm** instruction set. By implementing all **wasm** ISA, we can finally prove every kind of state transition. + +#### Implement verification function as built-in + +The **zk rollup** is smart contract project. Users need to deposit their asset to smart contract on mainchain, transfer asset on chain after deposit is confirmed and withdraw asset from smart contract on mainchain. It's complicated process and needed a lot of developer workload. By implementing verification function as built-in, normal node can be L2, aggregate transfer transactions without any customizing and send it to verification on mainchain directly. This has huge usability benefit because users don't care about anything but just transfering asset as usual. + +### Project Details + +**zkwasm** depends on `cryptography primitive` and `zero knowledge proof library`. + +#### Cryptography Primitive + +In **zkwasm** scheme, proof generations needs heavy workload. The prover time is latency when users send transaction and verification time is gas cost for miner. We have two approach to resolve this problem. One is the optimization and the other is outsource. We already implemented curve so we would like to optimize and extend it. We are going to implement and optimize as following. + +1. implement `RedDSA` +2. optimize jubjub curve +3. implement client wallet + +`RedDSA` allows us to generate one time signing key which has same signature with private key. We can outsource the computation when generating proof by generating proof generation key. There are several ways to optimize jubjub so we are going to apply it to our implementation. + +Finally, we are going to implement client libraries. + +#### Zero Knowledge Proof Library + +We generate the proof to prove the validity of **wasm** execution. To prove validity of execution, we use plonk. The main strategy is that writing circuits for each **wasm** instruction set and generate the proof. The transaction can be divided into sequence of instruction set. To prove each sequence of instruction set are executed correctly, we can prove the validity of transaction. Finally, we aggregate these proof and generate one proof. Users attach it with their transaction and blockchain verify the proof. We are going to implement following libraries to realize this scheme. + +1. implement `plookup` +2. implement `recursive proof` +3. implement instruction set circuits + +`plookup` allows us to reduce the complexity of instruction set by using lookup table and `recursive proof` allows us to generate one proof by aggregating proof for each instruction set. + +### Ecosystem Fit + +This **zkwasm** allows us to prove the validity of **wasm** state transition. In the future, we can extend it to general purpose rollup as in smart contract executions. This is totally compatible with **wasm** so every project work on **wasm** can use this library and rollup their transaction. + +Our project specializes in working with Substrate and Polkadot, and if we implement cryptographic libraries and optimize these, it would be used for whole network developer. + +I think this can be applied for XCMP to prove the validity of state transaction. + + +## Team :busts_in_silhouette: + +### Team members + +- Ash Whitehat +- Kirill Karbushev + +### Contact + +- **Contact Name:** Invers Inc +- **Contact Email:** info@invers.tech +- **Website:** [Invers](https://invers.tech/) + +### Legal Structure + +- **Registered Address:** 2F・3F Emblem Nishiarai, 3-33-6 Umejima, Adachi City, Tokyo-to 121-0816, Japan +- **Registered Legal Entity:** Invers Inc. + +### Team's experience + +Our company is working on the blockchain scaling and information hiding technologies. We already delivered several grants and implemented cryptographic primitives which are compatible `parity-scale-codec` as described in [Development Status](https://github.com/zero-network/Grants-Program/blob/**zkwasm**-rollups-transfer/applications/**zkwasm**-rollups-transfer.md#development-status-open_book). + + - [zk-rollup](https://github.com/w3f/Grants-Program/blob/master/applications/zk-rollups.md) + - [zk-plonk](https://github.com/w3f/Grants-Program/blob/master/applications/zk-plonk.md) + - [zero-network](https://github.com/w3f/Grants-Program/blob/master/applications/zero-network.md) + +### Team Code Repos + +- [Zero Network](https://github.com/zero-network) +- [Ash Whitehat](https://github.com/NoCtrlZ) +- [Kirill Karbushev](https://github.com/KiriosK) + +### Team LinkedIn Profiles + +We are not on LinkedIn. + +## Development Status :open_book: + +We already implemented cryptographic primitives which are compatible with `parity-scale-codec`. + +- [zero-crypto](https://github.com/zero-network/zero/tree/master/primitive/crypto) [![crates.io badge](https://img.shields.io/crates/v/zero-crypto.svg)](https://crates.io/crates/zero-crypto) +- [zero-jubjub](https://github.com/zero-network/zero/tree/master/primitive/jubjub) [![crates.io badge](https://img.shields.io/crates/v/zero-jubjub.svg)](https://crates.io/crates/zero-jubjub) +- [zero-bls12-381](https://github.com/zero-network/zero/tree/master/primitive/bls12_381) [![crates.io badge](https://img.shields.io/crates/v/zero-bls12-381.svg)](https://crates.io/crates/zero-bls12-381) +- [zero-elgamal](https://github.com/zero-network/zero/tree/master/primitive/elgamal) [![crates.io badge](https://img.shields.io/crates/v/zero-elgamal.svg)](https://crates.io/crates/zero-elgamal) +- [zero-pairing](https://github.com/zero-network/zero/tree/master/primitive/pairing) [![crates.io badge](https://img.shields.io/crates/v/zero-pairing.svg)](https://crates.io/crates/zero-pairing) +- [zero-plonk](https://github.com/zero-network/dusk-plonk/tree/acffa2e0af43fdaf40c0f1e4d38b6124c57f5a05) [![crates.io badge](https://img.shields.io/crates/v/zero-plonk.svg)](https://crates.io/crates/zero-plonk) + +## Development Roadmap :nut_and_bolt: + +Through this grant, we are going to implement the **zkwasm** which supports transfer transactions. + +### Overview + +- **Total Estimated Duration:** 6 months +- **Full-Time Equivalent (FTE):** 2 FTE +- **Total Costs:** 40,000 USDT + +### Milestone 1 | Crypto Primitive + +- **Estimated duration:** 1.5 month +- **FTE:** 2 +- **Costs:** 10,000 USDT + +In `Milestone 1`, we are going to implement `RedDSA`, optimize `Jubjub` curve and client wallet. These can improve usability. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide both `inline documentation` of the code and a `basic tutorial` that explains how users use the wallet and delegate proof generation. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide Dockerfiles that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an article/tutorial/workshop that explains | +| 1. | `RedDSA` implementation | We are going to implement `RedDSA`. `RedDSA` implementation allows us to generate one time signing key to encrypt zero knowledge proof witness. One time signing key doesn't have permission to transfer asset. The specification is aligned with zcash [sapling 5.4.6](https://github.com/zcash/zips/blob/main/protocol/sapling.pdf) | +| 2. | `Jubjub` curve optimization | `Jubjub` curve optimization allows us to perform elliptic curve arithmetic quickly. In our scheme, zero-knowledge prover time is latency when users send transaction and verification time is gas cost on chain. Specifically, we implement [Twisted Edwards Curves Revisited](https://iacr.org/archive/asiacrypt2008/53500329/53500329.pdf), [Jacobian Coordinates](https://eprint.iacr.org/2014/1014.pdf) and [wNAF](https://www.scitepress.org/papers/2014/50587/50587.pdf), [pippenger](https://cr.yp.to/papers/pippenger.pdf). | +|3. | Client wallet implementation |We are going to implement client wallet of `RedDSA`. With this wallet, user can generate private key and one time signing key, and delegate their proof generation, in addition to normal wallet functionalities through RPC.| + +### Milestone 2 | Plonk Extension + +- **Estimated duration:** 1.5 month +- **FTE:** 2 +- **Costs:** 10,000 USDT + +In `Milestone 2`, we are going to implement `plookup` and recursion on top of [plonk](https://github.com/zero-network/dusk-plonk). These can improve the performance and prove the validity of several circuits separatelly. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide both `inline documentation` of the code and a `basic tutorial` that explains how users implement `plookup` circuit and aggregate proofs. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide Dockerfiles that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an article/tutorial/workshop that explains | +| 1. | `plookup` implementation | We are going to implement `plookup` to our [plonk](https://github.com/zero-network/dusk-plonk). `plookup` allows us to use precomputed lookup table in zero knowledge circuit and reduce complexity of circuit.| +| 2. | `recursive proof` implementation | We are going to implement `recursive proof` to our [plonk](https://github.com/zero-network/dusk-plonk). `recursive proof` allows us to generate aggregation circuit and bundle **wasm** ISA proofs to one.| +| 3. | circuit implementation | We are going to implement zero knowledge circuit which supports combination of `plookup` and `recursive proof`. This circuit allows us to implement the circuit for **zkwasm**.| + +### Milestone 3 | Zk Wasm Transfer Prover and Verifier + +- **Estimated duration:** 1.5 month +- **FTE:** 2 +- **Costs:** 10,000 USDT + +In `Milestone 3`, we are going to implement `plookup` and `recursive proof` on top of [plonk](https://github.com/zero-network/dusk-plonk). These can improve the performance and prove the validity of several circuits separatelly. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide both `inline documentation` of the code and a `basic tutorial` that explains how users prove the validity of **wasm** ISA execution. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide Dockerfiles that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an article/tutorial/workshop that explains | +| 1. | **wasm** circuit implementation | We are going to implement zero knowledge circuit for **wasm** ISA. The transfer transaction consists of **wasm** ISA. We divide it into read and write access to each resource and prove with `plookup` and `recursive proof`.| +| 2. | proof generator implementation | We are going to implement proof generator which generates the proof for **wasm** ISA. The input is execution trace of **wasm** ISA and output is zero knowledge proof. This is implemented on off-chain.| +| 3. | proof verification implementation | We are going to implement proof verification function which verifies the proof. This is implemented on on-chain.| + +### Milestone 4 | Zk Wasm Transfer Rollup Node + +- **Estimated duration:** 1.5 month +- **FTE:** 2 +- **Costs:** 10,000 USDT + +In `Milestone 4`, we are going to implement rollup node. This can aggregate transfer transactions and generate proof. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide both `inline documentation` of the code and a `basic tutorial` that explains how users setup the node and send transfer transactions. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide Dockerfiles that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an article/tutorial/workshop that explains | +| 1. | rollup node implementation | We are going to implement rollup node. This allows to setup the execution environment of L2 transfer transactions, generate the proof and commit the state to mainchain.| +| 2. | client transactor implementation | We are going to implement client library to request transfer transactions to rollup node. This is the combination of Redsa wallet and proof generator. | +| 3. | integrate network | We are going to integrate network. There are four actor mainchain, rollup node and transactor, prover. The transactor generates the transaction and delegate proof generation to prover. The prover generates proof and send it back to transactor. The transactor send transaction to rollup node. The rollup node aggregates these transaction and commit the state to mainchain. | + +## Future Plans + +- Fully zkwasm rollup +- Proof for XCMP +- FHE +- Verifiable hardware + +## Additional Information :heavy_plus_sign: + +- How did you hear about the Grants Program? + - Announcement by another team +- Work you have already done. + - [zero-crypto](https://crates.io/crates/zero-crypto) + - [zero-jubjub](https://crates.io/crates/zero-jubjub) + - [zero-bls12-381](https://crates.io/crates/zero-bls12-381) + - [zero-elgamal](https://crates.io/crates/zero-elgamal) + - [zero-pairing](https://crates.io/crates/zero-pairing) + - [zero-plonk](https://crates.io/crates/zero-plonk) + - [pallet-plonk](https://github.com/zero-network/zero/tree/master/pallets/plonk) + - [pallet-encrypted-balance](https://github.com/zero-network/zero/tree/master/pallets/encrypted_balance) + - [pallet-confidential-transfer](https://github.com/zero-network/zero/tree/master/pallets/confidential_transfer) + - [above documentation](https://zero-network.github.io/zero/) +- Wheter there are any other teams who have already contributed (financially) to the project. + - No. +- Previous grants you may have applied for. + - [zk-rollup](https://github.com/w3f/Grants-Program/blob/master/applications/zk-rollups.md) + - [zk-plonk](https://github.com/w3f/Grants-Program/blob/master/applications/zk-plonk.md) + - [zero-network](https://github.com/w3f/Grants-Program/blob/master/applications/zero-network.md) From 509c45283c530d0b4bcc86fe921915f26e707de7 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 17 Feb 2023 20:42:08 +0100 Subject: [PATCH 154/578] Update index.md Zkwasm Rollups Transfer --- applications/index.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/applications/index.md b/applications/index.md index 39879396cf6..496932213d1 100644 --- a/applications/index.md +++ b/applications/index.md @@ -51,6 +51,7 @@ Use this page for an overview of all public grants and their status. Use the sid | Off-Narrative Labs | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☐ | ☐ | | [FuzzLand](https://fuzz.land/) | [FuzzLand](FuzzLand.md) | [GitHub](https://github.com/fuzzland) | ☐ | ☐ | ☐ | | [Fuu](https://github.com/ff13dfly/) | [Anchor, On-chain Linked List pallet and Name Service](Anchor.md) | [GitHub](https://github.com/ff13dfly/Anchor) | ☐ | ☐ | ☐ | +| [Invers Inc](https://invers.tech/) | [Zkwasm Rollups Transfer](zkwasm-rollups-transfer.md) | [GitHub](https://github.com/zero-network) | ☐ | ☐ | ☐ | ## 2022 @@ -631,3 +632,4 @@ Use this page for an overview of all public grants and their status. Use the sid | [Noise Explorer](https://symbolic.software/) | Rust code generator for formally verified (Noise/ cryptographic) handshakes | [Source Code](https://source.symbolic.software/noiseexplorer/noiseexplorer) | ☐ | ☒ | ☒ | | [Protos](http://protosmanagement.com/) | Open Source Node Explorer | [GitHub](https://github.com/protos-research/polkadot-node-explorer) | ☒ | ☒ | ☐ | | [Supercomputing Systems](https://www.scs.ch/) | [Substrate Transaction Privacy using Intel SGX](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/substrate_sgx_proposal.md) | [GitHub](https://github.com/scs/substraTEE) | ☐ | ☒ | ☒ | + From 11ed0257c245feb855d64b4370da4d3a909266a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Fri, 17 Feb 2023 21:11:01 +0100 Subject: [PATCH 155/578] Update index.md Interstellar completed --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 496932213d1..2bea4b2013c 100644 --- a/applications/index.md +++ b/applications/index.md @@ -204,7 +204,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Blackprint](https://github.com/Blackprint) | [Integrating Polkadot.js with Blackprint](./blackprint-js.md) | [GitHub](https://github.com/Blackprint) | ☐ | ☒ | ☒ | | [OpenSquare Network](https://www.opensquare.network/) | [OpenSquare Paid QA protocol](./OpenSquare_paid_qa_protocol.md) | [GitHub](https://github.com/opensquare-network/) | ☐ | ☒ | ☒ | | [@Scale Technologies](https://atscale.xyz) | [Libra - Decentralized Payment Network](./Libra.md) | [GitHub](https://github.com/atscaletech/) | ☐ | ☒ | ☒ | -| [Interstellar](https://www.interstellar.gg/) | [Interstellar - Wallet Phase 1](./Interstellar-Network.md) | [GitHub](https://github.com/Interstellar-Network) | ☐ | ☒ | ☐ | +| [Interstellar](https://www.interstellar.gg/) | [Interstellar - Wallet Phase 1](./Interstellar-Network.md) | [GitHub](https://github.com/Interstellar-Network) | ☐ | ☒ | ☒ | | [Pendulum](https://pendulumchain.org/) | [Spacewalk: a Stellar bridge](./spacewalk-bridge.md) | [GitHub](https://github.com/pendulum-chain) | ☐ | ☒ | ☐ | | [Dmitrii Koshelev](https://github.com/dishport) | [Implementation of the new hash function to BLS12 curves](./new_bls12_hash_function.md) | [GitHub](https://github.com/dishport) | ☐ | ☒ | ☒ | | [Hamster](https://github.com/orgs/hamster-shared) | [Hamster - A decentralized computing network](./hamster.md) | [GitHub](https://github.com/orgs/hamster-shared) | ☐ | ☒ | ☒ | From 801d1dc628d560f70fb7cffcfd44b01d9f07c84a Mon Sep 17 00:00:00 2001 From: Xavier Lau Date: Sat, 18 Feb 2023 14:59:17 +0800 Subject: [PATCH 156/578] Application: Slothunter (#1531) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Application: Slothunter * Update applications/slothunter.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update applications/slothunter.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update applications/slothunter.md Co-authored-by: Sebastian Müller * Update * Update Signed-off-by: Xavier Lau * Update --------- Signed-off-by: Xavier Lau Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Co-authored-by: Sebastian Müller --- applications/slothunter.md | 157 +++++++++++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 applications/slothunter.md diff --git a/applications/slothunter.md b/applications/slothunter.md new file mode 100644 index 00000000000..e1fbe510309 --- /dev/null +++ b/applications/slothunter.md @@ -0,0 +1,157 @@ +# Slothunter + +- **Team Name:** hack-ink +- **Payment Address:** 0xccd79b2b77e71292924e85de130bfb1c03d94522 (Ethereum) USDC +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +### Overview + +Slothunter is a Rust CLI program. + +It's goal is to help teams/users to participate in the Polkadot auction more easily and efficiently. + +### Ecosystem Fit + +I noticed nobody realized there was a slot action, and no one participated in it until Kusama's 58th auction ended. + +This could help small teams to catch the chance. + +And this also could help teams/users to bid/contribute automatically. + +### Details(spec) + +Slothunter will be implemented in Rust, which means it will be efficient and stable while running as a system service. + +This grant contains 7 parts. + +1. Monitor the auction state. + 1. This program will run as a system service. + 2. It will fetch and cache the chain state periodically. +2. Calculate the current winner. + 1. Base on previous data, calculate the current auction winner. +3. Email and webhook notifications. + 1. It could notify the users: + 1. New auction started. + 2. Insufficient fund for bidding/contributing. + 3. Stop bidding/contributing and reason. + 4. New winner. + 5. Auction ended. + 2. The email and webhook addresses are configurable. + 3. The notification will be logged in the terminal by default. + 4. The email/webhook notification can be enabled or disabled by user. e.g. Some users think the email is annoying. + 5. All the notification content will be present in json style. + 6. Webhook notification can be integrated to Slack, Telegram, etc. e.g. the telegram bot will provide a listen address and Slothunter will push the notification to the bot periodically. +4. Auto bidding/contributing. + 1. Auto bid/contribute if there is new winner. And the bot will stop if the new winner's price is greater than the max acceptable value in the configuration file. + 2. Able to use regular account to bid/contribute. + 3. Able to use proxy account to bid/contribute. +5. Customize bidding/contributing strategy, including: + 1. Set max acceptable value. + 2. Set bidding/contributing frequency every `x` blocks. +6. Provide a config.toml to configure: + 1. Relaychain. + 2. Bidding/contributing account. + 3. Bidding/contributing amount, target and max acceptable price. + 4. Keep bidding/contributing every `x` blocks. + 5. Notification mailbox. + 6. Webhook URI. +7. A Telegram bot, this should be easily deployed on any ubuntu:20.04+ server. + +Teams/users could start the bot before the auction. And all the things should go as expected. +Teams/users could deploy the telegram bot and get latest auction status in group. + +## Team :busts_in_silhouette: + +### Team members + +- Xavier Lau + +### Contact + +- **Contact Name:** Xavier Lau +- **Contact Email:** xavier@inv.cafe +- **Website:** https://linktr.ee/aurevoirxavier + +### Legal Structure + +Personal. (no legal structure entry) + +### Team's experience + +[Xavier Lau](https://github.com/AurevoirXavier) + +- Six years of experience in Rust. +- Three years of experience in Substrate. +- Darwinia Network core developer, since 2019. +- Actively at [Substrate StackExchange](https://substrate.stackexchange.com/users/251/aurevoirxavier). +- Grants contributor, [Subalfred](https://github.com/hack-ink/subalfred). + +### Team Code Repos + +- https://github.com/hack-ink +- https://github.com/hack-ink/array-bytes +- https://github.com/hack-ink/githuber +- https://github.com/hack-ink/subalfred +- https://github.com/hack-ink/unescaper + +Please also provide the GitHub accounts of all team members. +If they contain no activity, references to projects hosted elsewhere or live are also fine. + +- https://github.com/AurevoirXavier + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/xavier-lau-b0655310a + +### Overview + +- **Total Estimated Duration:** 5 weeks +- **Full-Time Equivalent (FTE):** 1 FTE +- **Total Costs:** 11,000 USD + +### Milestone 1 Slothunter CLI tool + +- **Estimated duration:** 4 weeks +- **FTE:** 1 +- **Costs:** 10,000 USD + +| Number | Deliverable | Specification | +| -----: | -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 0a. | License | GPLv3 | +| 0b. | Documentation | There will be a guide to tell people how to use this. | +| 0c. | Testing guide | There will be a docker file and a guide to tell the auditor how to run the tests. It will guide you how to setup an auction and do the tests. | +| 1. | Auction winner calculator | Based on the 0c., run the binary, you should see the current winner from the terminal log. | +| 2. | Notification component | Based on the 0c., run the binary, you should receive these notification correctly. | +| 3. | Auto bidding/contributing component | Based on the 0c., run the binary, you should see you are bidding/contributing your parathread from the Polkadot Apps. | +| 4. | Bidding/contributing configuration component | Based on the 3., you can customize your bidding/contributing strategy in a toml file, you should see your bidding/contributing behavior works the same as the strategy defined. | +| 5. | Releases | Linux, macOS, Windows prebuilt binaries, and crates.io release. | + +### Milestone 2 Slothunter notification Slack/Telegram bot setup guide + +- **Estimated duration:** 1 weeks +- **FTE:** 1 +- **Costs:** 1,000 USD + +| Number | Deliverable | Specification | +| -----: | ------------------- | -------------------------------------------------------------------------------------------------------------------------- | +| 0a. | License | GPLv3 | +| 0b. | Documentation | There will be a guide to tell people how to use this. | +| 0c. | Testing guide | There will be a guide to tell the auditor how to run the tests. | +| 1. | Workshop repository | Follow the tutorial in this repository to setup the bot, and you should see the notification appear in Slack and Telegram. | + +## Future Plans + +- Keep connected with the community/parity and make it better. + +## Additional Information :heavy_plus_sign: + +We could talk about the bidding/contributing strategy. It's really flexible. If anyone got more ideas. I can integrate them into the program. + +I have talked to some teams few months ago. Because they ask me what script did I use during the bidding. Can I share it? +Actually, I set some proxies accounts and share them with my team members. Then we watch the auction manually. If there is a new winner we could bid immediately. + +As I said before, there is even an empty auction in Kusama. This is not friendly and not good for the ecosystem. So, I decided to develop this. And I think it is valuable. + +**How did you hear about the Grants Program?** GitHub. From 5e375de639891c3ae1c16ff7d4912772321ae1f9 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Mon, 20 Feb 2023 02:05:18 -0800 Subject: [PATCH 157/578] Update centrifuge-gsrpc-v2.md (#1552) Fix https://github.com/w3f/Grant-Milestone-Delivery/pull/753 checks --- applications/centrifuge-gsrpc-v2.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/applications/centrifuge-gsrpc-v2.md b/applications/centrifuge-gsrpc-v2.md index a340ae42b0c..672fbc21212 100644 --- a/applications/centrifuge-gsrpc-v2.md +++ b/applications/centrifuge-gsrpc-v2.md @@ -177,6 +177,10 @@ V2 will be implemented as part of this grant ## Development Roadmap :nut_and_bolt: +### Overview + +- **Total Costs:** 54,000 USD + ### Milestone 1 - Dynamic Type Loader from metadata - **Estimated duration:** 5 weeks (200 hours) From e366852c744918c42539a38f6eb44c68b37df398 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Mon, 20 Feb 2023 02:05:34 -0800 Subject: [PATCH 158/578] Update validators_selection.md (#1553) Attempt to fix format --- applications/validators_selection.md | 1 - 1 file changed, 1 deletion(-) diff --git a/applications/validators_selection.md b/applications/validators_selection.md index fd162fd4202..0729259771f 100644 --- a/applications/validators_selection.md +++ b/applications/validators_selection.md @@ -1,4 +1,3 @@ - # Validators selection From 3caf045e50eb8ef36fd0e69ee435fe83d09fb3d9 Mon Sep 17 00:00:00 2001 From: Michael Yuan Date: Mon, 20 Feb 2023 04:15:26 -0600 Subject: [PATCH 159/578] Amend milestone #3 delivery timeline (#1551) As discussed here: https://github.com/w3f/Grants-Program/pull/862#issuecomment-1382385409 the milestone #3 task is much greater than we originally envisioned. We need to reconcile changes to the substrate code base since we started and then merge our changes back into the main tree in order to propose an upstream PR and run the most up-to-date performance tests. So, I extended the time needed for this task to 6 months. Thank you. --- applications/wasmedge_substrate.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/wasmedge_substrate.md b/applications/wasmedge_substrate.md index 21757fe802d..12a3c89d54c 100644 --- a/applications/wasmedge_substrate.md +++ b/applications/wasmedge_substrate.md @@ -129,7 +129,7 @@ https://github.com/ParaState/substrate-ssvm-node ### Milestone 3 -- Performance benchmarks and analysis -- Estimated duration: 2 month +- Estimated duration: 6 months - FTE: 2 - Costs: 15,000 USD From 97406fd0828e0cb065823d0c195639d8cca790a7 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Mon, 20 Feb 2023 04:01:26 -0800 Subject: [PATCH 160/578] Update index.md (#1554) Polkadot Smart Chain -> First Delivery, Completed --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 2bea4b2013c..15e37d61948 100644 --- a/applications/index.md +++ b/applications/index.md @@ -33,7 +33,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | | [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☐ | ☐ | | [Blockcoders](http://blockcoders.io/) | [Cross-chain Wallet - XCW](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☐ | ☐ | -| [OmniBTC](https://omnibtc.finance/) | [Polkadot Smart Chain](psc.md) | [GitHub](https://github.com/OmniBTC/PSC) | ☐ | ☐ | ☐ | +| [OmniBTC](https://omnibtc.finance/) | [Polkadot Smart Chain](psc.md) | [GitHub](https://github.com/OmniBTC/PSC) | ☐ | ☒ | ☒ | | [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☒ | ☒ | | [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | | [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☐ | ☐ | ☐ | From 46bf2fa8c56816ba0b9858b056c57cf8e6c53d6f Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 20 Feb 2023 16:33:26 +0100 Subject: [PATCH 161/578] Update index.md Add Slothunter --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 15e37d61948..2a9785fbca4 100644 --- a/applications/index.md +++ b/applications/index.md @@ -51,6 +51,7 @@ Use this page for an overview of all public grants and their status. Use the sid | Off-Narrative Labs | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☐ | ☐ | | [FuzzLand](https://fuzz.land/) | [FuzzLand](FuzzLand.md) | [GitHub](https://github.com/fuzzland) | ☐ | ☐ | ☐ | | [Fuu](https://github.com/ff13dfly/) | [Anchor, On-chain Linked List pallet and Name Service](Anchor.md) | [GitHub](https://github.com/ff13dfly/Anchor) | ☐ | ☐ | ☐ | +| [hack-ink](https://hack.ink/) | [Slothunter](slothunter.md) | [GitHub](https://github.com/hack-ink) | ☐ | ☐ | ☐ | | [Invers Inc](https://invers.tech/) | [Zkwasm Rollups Transfer](zkwasm-rollups-transfer.md) | [GitHub](https://github.com/zero-network) | ☐ | ☐ | ☐ | ## 2022 From f562caa7438ebb507059df06567c0eecb7eee0f8 Mon Sep 17 00:00:00 2001 From: Arthur Hoeke <34348870+ArthurHoeke@users.noreply.github.com> Date: Mon, 20 Feb 2023 19:42:32 +0100 Subject: [PATCH 162/578] Cyclops Grant Request (#1549) * added cyclops * Updated payment method * Changed PHP to Node-JS solution * Added ERA point tracking --- applications/cyclops.md | 232 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 232 insertions(+) create mode 100644 applications/cyclops.md diff --git a/applications/cyclops.md b/applications/cyclops.md new file mode 100644 index 00000000000..2ac1e9958f4 --- /dev/null +++ b/applications/cyclops.md @@ -0,0 +1,232 @@ +# Cyclops Validator Dashboard + +- **Team Name:** decentraDOT +- **Payment Address:** BTC: `36GRQ5h9L17fSDsbK59mpkYvsQuifatRpr` +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +### Overview + +Cyclops keeps a watchful eye on your Polkadot validators, giving you a clear vision of their performance and rewards. + +Cyclops aims to provide a comprehensive validator dashboard application for network validators. Cyclops will help validators to keep track of all their validators' performance and income, making it easier to manage and optimize their operations. With Cyclops, validators can access real-time data, view historical data, and receive notifications on key performance indicators, making it a vital tool for those who want to optimize their operations. + +We became interested in building this project due to the popularity of our close-sourced proof of concept validator dashboard, available at [dashboard.decentradot.com](https://dashboard.decentradot.com). Currently our PoC product is monitoring over 80 validators for 50+ validator operators. We recognized the need for a similar open-sourced solution which supports parachain validators, and is developed in a future proof way. + +Cyclops will provide a user-friendly interface for validators to monitor their nodes' performance, income, and network stats. The app will feature customizable alerts that notify validators of critical events, such as downtime or poor parachain performance. + +### Project Details + +![image](https://user-images.githubusercontent.com/34348870/219812406-f01a970c-616b-4feb-8d1c-ee14975a9f17.png) + +#### PoC + +![image](https://user-images.githubusercontent.com/34348870/219812313-94c0f79c-f5b9-42c2-a724-04c6cbfaccec.png) + +We currently have an operational proof-of-concept [here](https://dashboard.decentradot.com). + +Initially this PoC was developed as a passion project, only meant as a closed-source tool for monitoring our own validators. After much interest from other 1kv community members, we decided to create a simple registration module and allow other network operators to use our tool. Currently our PoC has over 50 active users, monitoring 80+ validators. Even though this PoC is currently functional, it was never built with the intention to become a public service, and much of the back-end code and database structure reflects this. + +The front-end is fully developed using vanilla Javascript, and the back-end runs on a node-js server utilising SocketJS for data transfer. Because of this, the current dashboard is not future proof and is hard to maintain / add additional features. Adding support for parachain validators would require a full code refactor. + + +#### Front-end stack + +- Angular +- Typescript +- SCSS +- jQuery +- Chart.js + +The combination of Angular and TypeScript will provide a powerful toolset for building the front-end of Cyclops, allowing us to easily implement API features and manage data / requests. + +#### Back-end stack + +- Node-JS +- Express framework +- Subscan API +- coingecko API + +Cyclops will use the Express Node framework for a custom middleware solution, fetching data from the Polkadot subscan API, processing it, and providing it to the frontend application. The middleware will also handle any necessary authentication and rate limiting that may be required. + +#### Features + +- Login & registration system +- Support for Polkadot and parachain validators +- Elected / waiting status information +- Daily income tracking +- Token price tracking +- Network ERA progress information +- 1kv statistics +- Stash balance tracking +- Per-session ERA point performance tracking +- Monthly income reports (PDF overview of all reward transactions, handy for TAX purposes) + Reward date + Amount + Monetary value at time of payout + Extrinsic hash +- E-mail alert system + downtime + poor performance + +### Ecosystem Fit + +#### Where and how does your project fit into the ecosystem? +Cyclops is an important addition to the Polkadot ecosystem as it addresses a key need for network validators. Validators are a critical part of any blockchain network, and they play a key role in securing the network, validating transactions. However, managing a large number of validators can be a complex and time-consuming task, and there is a need for tools that can help validators to manage their operations more efficiently. + +Cyclops fits into the Polkadot ecosystem as a validator dashboard application that provides a comprehensive and user-friendly interface for validators to manage their operations. The application also provides detailed analytics and insights to help validators make informed decisions about their operations. + +Cyclops complements other tools and services in the Polkadot ecosystem, such as Polkadot-JS, Polkadot telemetry, and Polkadot wallet applications. + +#### Who is your target audience (parachain/dapp/wallet/UI developers, designers, your own user base, some dapp's userbase, yourself)? +Validator operators + +#### What need(s) does your project meet? +We meet several critical needs for validators in the Polkadot ecosystem, including: + +Efficient Validator Management: Validator management can be a complex and time-consuming task, especially for validators who are managing a large number of validators. Cyclops provides a user-friendly dashboard that allows validators to easily monitor and manage their validators' performance and income, enabling them to optimize their operations. + +Real-Time Performance Monitoring: The Polkadot network is constantly evolving, and validators need to stay on top of performance metrics to ensure that their validators are operating effectively and efficiently. Cyclops provides real-time data on key performance indicators, enabling validators to quickly identify and address any issues. + +Historical Data Analysis: Historical data analysis is critical for validators who need to understand their validators' performance over time. Cyclops provides historical data and detailed analytics, allowing validators to make informed decisions about their operations. + +Notifications and Alerts: Validators need to stay on top of network events and changes that can impact their validators' performance and income. Cyclops provides notifications and alerts to help validators stay informed about critical events and make informed decisions about their operations. + +#### Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem? +As far as I am aware, there are no similar projects on either Polkadot nor other blockchains. Grafana validator dashboards exist for Ethereum, though do not offer a similar level of insight and income management tools. + +## Team :busts_in_silhouette: + +### Team members + +* Arthur Hoeke (team leader, full-stack developer) [linkedIn](https://www.linkedin.com/in/arthur-hoeke-170691103/) +* Johan Hoeke (UNIX SysAdmin) [linkedIn](https://nl.linkedin.com/in/johanhoeke) + +### Contact + +- **Contact Name:** Arthur Hoeke +- **Contact Email:** [admin@decentradot.com](mailto:admin@decentradot.com) +- **Website:** [decentradot.com](https://decentradot.com/) + +### Legal Structure + +- **Registered Address:** Kea boumanstraat 74, Tilburg, The Netherlands +- **Registered Legal Entity:** decentraDOT (KVK 85801925) + +### Team's experience + +#### Arthur Hoeke +Arthur Hoeke is a seasoned full-stack software developer with over 7 years of experience in developing web and software products. He has specialized in web development and blockchain technology and has a track record of working on various projects. + +Arthur started his career in software development in 2016 and has since then been involved in developing a wide range of web applications and software applications. One of Arthur's notable projects was the development of a Zilliqa wallet app, a decentralized cryptocurrency wallet built on the Zilliqa blockchain. He played a key role in developing the app's architecture, designing the user interface, and implementing various security features to ensure the wallet's safety and security. + +Arthur has also worked as a full-stack developer for the NFT platform Mintable, where he was responsible for developing various features for the platform, including the backend APIs, and the user interface. + +#### Johan Hoeke +Johan Hoeke is an experienced Unix SysAdmin with over 16 years of experience working for Tilburg University in Holland. He is a highly skilled professional with a strong service-oriented mindset and an extensive background in problem-solving using open source solutions. + +Johan is a Red Hat Certified Engineer (RHCE) and has a deep understanding of Unix-based systems, with expertise in system administration, security, network architecture, and high availability solutions. + +### Team Code Repos + +- https://github.com/ArthurHoeke?tab=repositories + +### Team LinkedIn Profiles (if available) + +- [Arthur Hoeke](https://www.linkedin.com/in/arthur-hoeke-170691103/) +- [Johan Hoeke](https://nl.linkedin.com/in/johanhoeke) + + +## Development Status :open_book: + +We currently have a fully operational proof-of-concept, and have started with the UI-UX rework. Work on front and back-end will begin after the user-interface design has been completed. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 3 months +- **Full-Time Equivalent (FTE):** 1 FTE +- **Total Costs:** $26,000 + +### Milestone 1 Front-end — finish UI design in Figma and convert to HTML, Angular setup + +- **Estimated duration:** 3 weeks +- **FTE:** 1 +- **Costs:** 6,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide basic documentation about how to setup the project and generate a build. (eg. install node packages, et cetera) | +| **0c.** | Testing and Testing Guide | Website design will corrospond to Figma design and be developed to HTML5 standards. | +| **0d.** | Docker | does not apply | +| 1. | Figma design | UI-UX design for Cyclops in Figma, containing screens for: login, register, dashboard, settings | +| 2. | HTML / SCSS | Convert Figma design into a website using HTML5 and CSS | +| 3. | Angular setup | Create the Angular project for Cyclops, include pages for website | + + +### Milestone 2 Back-end — Middleware API + +- **Estimated Duration:** 1 month +- **FTE:** 1 +- **Costs:** 10,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide basic documentation about how to self-host the express middle, setup database, setup e-mail smtp, subscan API key and API endpoints | +| **0c.** | Testing and Testing Guide | We will provide an API-endpoint which tests all services (smtp, substrate API, database connection) and returns status | +| **0d.** | Docker | We will provide a dockerfile to demonstrate the API running on a local machine | +| 1. | Express API endpoints | Setup express and all required end-points | +| 2. | Database structure | Setup full database structure | +| 3. | SMTP functionality | Setup smtp functionality for e-mail alerts | +| 4. | Subscan API | Implement subscan API | + +### Milestone 3 Release — Implement middleware into front-end + +- **Estimated Duration:** 1 month +- **FTE:** 1 +- **Costs:** 10,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will update our front-end documentation to reflect how to implement the back-end API | +| **0c.** | Testing and Testing Guide | We will host Cyclops on dashboard.decentradot.com for public testing and provide a basic guide on how to get started using the application | +| **0d.** | Docker | We will provide a dockerfile to demonstrate the full project running on a local machine | +| **0e.** | Article | We will publish an article on Medium which explains Cyclops and a basic setup guide | +| 1. | API Service | Create service in Angular to communicate with API | +| 2. | Display data | Fetch data from API and display on dashboard | +| 3. | Elected / waiting | Display elected / waiting status per validator | +| 4. | Reward tracking | Display daily income tracking | +| 5. | Token price tracking | Display token price data | +| 6. | ERA | Display network ERA progress information | +| 7. | 1kv statistics | Display 1kv statistics if applicable to selected validator | +| 8. | Stash | Stash balance tracking | +| 9. | PDF reports | Monthly PDF export functionality, overview of all reward transactions | +| 10. | E-mail alert system | Sent e-mail alert if validator is down | +| 11. | ERA point tracking | Per-session ERA point performance tracking | + + +## Future Plans + +We are committed to supporting and promoting the project both in the short term and in the long term. In the short term, we intend to use, enhance, promote and support the project in the following ways: +Use: We will use Cyclops internally to monitor and manage our own validators, and to gain insight into the performance and income of our validators. This will allow us to optimize Cyclops accordingly. + +Enhance: We will continuously work to enhance Cyclops by adding new features and improving existing ones. We will listen to feedback from our users and incorporate their suggestions into the project, ensuring that it remains a valuable tool for network validators. + +Promote: We will promote Cyclops to the Polkadot community and beyond, through various channels including social media, forums, and other relevant communities. We will actively seek out new users and collaborators, and work to build a strong community around the project. + +Support: We will provide support to our users through various channels including email and the 1kv Element chatroom. We will ensure that our users have a smooth experience with Cyclops, and that any issues are resolved quickly and efficiently. + +## Referral Program (optional) :moneybag: + +Not applicable + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** + +Web3 Foundation Website From 6355031ddeedc3a41d9b50799b87e9eb760cb31a Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Mon, 20 Feb 2023 16:40:57 -0500 Subject: [PATCH 163/578] Update index.md (#1555) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 2a9785fbca4..4cc94cc7f51 100644 --- a/applications/index.md +++ b/applications/index.md @@ -91,7 +91,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Salaheldin Soliman](https://github.com/salaheldinsoliman) | [Solang developer experience improvements](Solang_developer_experience_improvements.md) | [GitHub](https://github.com/hyperledger/solang) | ☐ | ☐ | ☐ | | [Optymalizacja AI Grzegorz Miebs](https://github.com/miepsik) | [Validator selection](validators_selection.md) | [GitHub](https://github.com/miepsik) | ☒ | ☐ | ☐ | | [Applied Blockchain Ltd](https://appliedblockchain.com/) | [Silent Data](project_silentdata.md) | [GitHub](https://github.com/appliedblockchain) | ☐ | ☐ | ☐ | -| [Web3Box Labs](https://github.com/web3box-labs) | [Web3Box](Web3Box.md) | [GitHub](https://github.com/web3box-labs) | ☐ | ☐ | ☐ | +| [Web3Box Labs](https://github.com/web3box-labs) | [Web3Box](Web3Box.md) | [GitHub](https://github.com/web3box-labs) | ☐ | ☒ | ☒ | | [LimeChain](https://limechain.tech/) | [Research feasibility of Polkadot Host in Java](research-feasibiliy-java-host.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☐ | ☐ | | [Blaize.tech](https://blaize.tech/) | [Unified deployment for the collator node](unified_collator_node_deployment.md) | [GitHub](https://github.com/babebort-blaize) | ☐ | ☐ | ☐ | | [Odyssey B.V.](https://odyssey.org/) | [Momentum, an open source, metaverse for digital societies](odyssey_momentum.md) | [GitHub](https://github.com/momentum-xyz) | ☐ | ☐ | ☐ | From 40331b6b91a7a9f983e66c6b459f926214f28119 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 21 Feb 2023 09:30:24 +0100 Subject: [PATCH 164/578] Update index.md Add Cyclops --- applications/index.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/applications/index.md b/applications/index.md index 4cc94cc7f51..353a3e8b1ec 100644 --- a/applications/index.md +++ b/applications/index.md @@ -53,6 +53,8 @@ Use this page for an overview of all public grants and their status. Use the sid | [Fuu](https://github.com/ff13dfly/) | [Anchor, On-chain Linked List pallet and Name Service](Anchor.md) | [GitHub](https://github.com/ff13dfly/Anchor) | ☐ | ☐ | ☐ | | [hack-ink](https://hack.ink/) | [Slothunter](slothunter.md) | [GitHub](https://github.com/hack-ink) | ☐ | ☐ | ☐ | | [Invers Inc](https://invers.tech/) | [Zkwasm Rollups Transfer](zkwasm-rollups-transfer.md) | [GitHub](https://github.com/zero-network) | ☐ | ☐ | ☐ | +| [decentraDOT](https://decentradot.com/) | [Cyclops Validator Dashboard](cyclops.md) | [GitHub](https://github.com/ArthurHoeke?tab=repositories) | ☐ | ☐ | ☐ | + ## 2022 From 40131b3de761616392d2b1ea045648a41a98ac3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Tue, 21 Feb 2023 12:42:30 +0100 Subject: [PATCH 165/578] Update rfps.md Add Analytics Website/Data Platform RFP to readme --- docs/rfps.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/rfps.md b/docs/rfps.md index 7a947c1b4ae..e83d623ced6 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -29,6 +29,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | :-- | :----: | :----------: | | [a-and-v-topology.md](RFPs/Open/a-and-v-topology.md) | 🟢 | 29.11.2021 | | [alternative_polkadot_host_implementations.md](RFPs/Open/alternative_polkadot_host_implementations.md) | 🟢 | 29.11.2021 | +| [analysis-website-and-data-platform.md](RFPs/Open/analysis-website-and-data-platform.md) | 🟢 | 17.02.2023 | | [anti-collusion_infrastructure.md](RFPs/Open/anti-collusion_infrastructure.md) | 🟢 | 29.11.2021 | | [appi.md](RFPs/Implemented/appi.md) | 🔴 | 20.07.2021 | | [bpf-contracts.md](RFPs/Open/bpf-contracts.md) | 🟢 | 06.01.2023 | From cf8ccd97a489f913cda92b08ac498dcab1902877 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 21 Feb 2023 20:28:20 +0100 Subject: [PATCH 166/578] fiat payment (#1556) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fiat payment * Update README.md Co-authored-by: Sebastian Müller * Update applications/application-template-research.md Co-authored-by: Sebastian Müller * Update applications/application-template.md Co-authored-by: Sebastian Müller * Update docs/Process/how-to-apply.md Co-authored-by: Sebastian Müller * Update docs/Support Docs/T&Cs.md Co-authored-by: Sebastian Müller * Update maintenance/maintenance-template.md Co-authored-by: Sebastian Müller * Update .github/pull_request_template.md Co-authored-by: Sebastian Müller * Update T&Cs.md --------- Co-authored-by: Sebastian Müller --- .github/pull_request_template.md | 2 +- README.md | 4 ++-- applications/application-template-research.md | 4 ++-- applications/application-template.md | 4 ++-- docs/Process/how-to-apply.md | 2 +- docs/Support Docs/T&Cs.md | 6 +++--- docs/referral-program.md | 2 +- maintenance/maintenance-template.md | 2 +- 8 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 50a61943176..365efb7229a 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -14,7 +14,7 @@ - [x] The [application template](https://github.com/w3f/Grants-Program/blob/master/applications/application-template.md) has been copied and aptly renamed (`project_name.md`). - [ ] I have read the [application guidelines](https://github.com/w3f/Grants-Program/blob/master/docs/Support%20Docs/grant_guidelines_per_category.md). -- [ ] A BTC, Ethereum (USDC/DAI) or Polkadot/Kusama (aUSD/USDT) address for the payment of the milestones is provided in the application. +- [ ] Payment details have been provided (bank details via email _or_ BTC, Ethereum (USDC/DAI) or Polkadot/Kusama (USDT) address in the application). - [ ] The software delivered for this grant will be released under an open-source license specified in the application. - [ ] The initial PR contains only one commit (squash and force-push if needed). - [ ] The grant will only be announced once the first milestone [has been accepted](https://github.com/w3f/Grant-Milestone-Delivery#process) (see the [announcement guidelines](https://github.com/w3f/Grants-Program/blob/master/docs/Support%20Docs/announcement-guidelines.md)). diff --git a/README.md b/README.md index 52ab51a465b..c4b54011a0a 100644 --- a/README.md +++ b/README.md @@ -148,7 +148,7 @@ The W3F Grants Program offers different grant levels to help you best depending ## :pencil: Process -> **:loudspeaker:** The process below is independent of the [level](#level_slider-levels). Payment is made in Bitcoin, USDT (on [Statemine/Statemint](https://support.polkadot.network/support/solutions/articles/65000181800-what-is-statemint-and-statemine-and-how-do-i-use-them-)), USDC/DAI (Ethereum) or aUSD (Acala). If you want to apply in **private** and/or you need to be paid out in **fiat**, you can apply [:arrow_right: here](https://docs.google.com/forms/d/e/1FAIpQLSfMfjiRmDQDRk-4OhNASM6BAKii7rz_B1jWtbCPkUh6N7M2ww/viewform). Note that this is generally a slower process and imposes stricter requirements on applicants. +> **:loudspeaker:** The process below is independent of the [level](#level_slider-levels). Payment is made in fiat, Bitcoin, USDT (on [Statemine/Statemint](https://support.polkadot.network/support/solutions/articles/65000181800-what-is-statemint-and-statemine-and-how-do-i-use-them-)) or USDC/DAI (Ethereum). If you want to apply in **private**, you can apply [:arrow_right: here](https://docs.google.com/forms/d/e/1FAIpQLSfMfjiRmDQDRk-4OhNASM6BAKii7rz_B1jWtbCPkUh6N7M2ww/viewform). Note that this is generally a slower process and imposes stricter requirements on applicants. ### 1. Application @@ -223,7 +223,7 @@ Please note that: We give away 500 USD to each referral of a successful grant application by _anyone having previously worked on a Web3 Foundation grant_ or _a [Polkadot Ambassador](https://wiki.polkadot.network/docs/ambassadors)_. Web3 Foundation and Parity employees do not qualify for the program, even if they previously worked on a grant. -In order to be eligible for the referral bonus, the application itself must contain the name of the [Polkadot Ambassador](https://wiki.polkadot.network/docs/ambassadors) or the GitHub account of the grantee as well as the payment address for the referral bonus (see the [application template](applications/application-template.md)). Payment is made in Bitcoin, USDT (on Kusama or Polkadot), USDC/DAI (Ethereum) or aUSD (Acala). +In order to be eligible for the referral bonus, the application itself must contain the name of the [Polkadot Ambassador](https://wiki.polkadot.network/docs/ambassadors) or the GitHub account of the grantee as well as the payment address for the referral bonus (see the [application template](applications/application-template.md)). Payment is made in Bitcoin, USDT (on Kusama or Polkadot) or USDC/DAI (Ethereum). ## :bulb: Help diff --git a/applications/application-template-research.md b/applications/application-template-research.md index f455aec6ad4..f191321f29f 100644 --- a/applications/application-template-research.md +++ b/applications/application-template-research.md @@ -4,7 +4,7 @@ > > See the [Grants Program Process](https://github.com/w3f/Grants-Program/#pencil-process) on how to submit a proposal. - **Team Name:** Legal name of your team (e.g. Duo) -- **Payment Address:** BTC, Ethereum (USDT/USDC/DAI) or Polkadot/Kusama (aUSD) payment address. Please also specify the currency. (e.g. 0x8920... (DAI)) +- **Payment Address:** In the case of fiat payment, please share your bank account privately with grants@web3.foundation via your contact email (see below) and enter the date when you shared the information with us (e.g. Fiat 24.12.1971, 11:59) here. Otherwise, provide the BTC, Ethereum (USDC/DAI) or Polkadot/Kusama (USDT) payment address. Please also specify the currency. (e.g. 0x8920... (DAI)) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1, 2 or 3 > :exclamation: *The combination of your GitHub account submitting the application and the payment address above will be your unique identifier during the program. Please keep them safe.* @@ -159,7 +159,7 @@ Please include here You can find more information about the program [here](../README.md#moneybag-referral-program). - **Referrer:** Name of the Polkadot Ambassador or GitHub account of the Web3 Foundation grantee -- **Payment Address:** BTC, Ethereum (USDT/USDC/DAI) or Polkadot/Kusama (aUSD) payment address. Please also specify the currency. (e.g. 0x8920... (DAI)) +- **Payment Address:** BTC, Ethereum (USDC/DAI) or Polkadot/Kusama (USDT) payment address. Please also specify the currency. (e.g. 0x8920... (DAI)) ## Additional Information :heavy_plus_sign: diff --git a/applications/application-template.md b/applications/application-template.md index 29a3e5405b9..57087dad840 100644 --- a/applications/application-template.md +++ b/applications/application-template.md @@ -4,7 +4,7 @@ > > See the [Grants Program Process](https://github.com/w3f/Grants-Program/#pencil-process) on how to submit a proposal. - **Team Name:** Legal name of your team (e.g. Duo) -- **Payment Address:** BTC, Ethereum (USDT/USDC/DAI) or Polkadot/Kusama (aUSD) payment address. Please also specify the currency. (e.g. 0x8920... (DAI)) +- **Payment Address:** In the case of fiat payment, please share your bank account privately with grants@web3.foundation via your contact email (see below) and enter the date when you shared the information with us (e.g. Fiat 24.12.1971, 11:59) here. Otherwise, provide the BTC, Ethereum (USDC/DAI) or Polkadot/Kusama (USDT) payment address. Please also specify the currency. (e.g. 0x8920... (DAI)) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1, 2 or 3 > :exclamation: *The combination of your GitHub account submitting the application and the payment address above will be your unique identifier during the program. Please keep them safe.* @@ -159,7 +159,7 @@ Please include here You can find more information about the program [here](../README.md#moneybag-referral-program). - **Referrer:** Name of the Polkadot Ambassador or GitHub account of the Web3 Foundation grantee -- **Payment Address:** BTC, Ethereum (USDT/USDC/DAI) or Polkadot/Kusama (aUSD) payment address. Please also specify the currency. (e.g. 0x8920... (DAI)) +- **Payment Address:** BTC, Ethereum (USDC/DAI) or Polkadot/Kusama (USDT) payment address. Please also specify the currency. (e.g. 0x8920... (DAI)) ## Additional Information :heavy_plus_sign: diff --git a/docs/Process/how-to-apply.md b/docs/Process/how-to-apply.md index 892fbcb0703..cd1d80b9dca 100644 --- a/docs/Process/how-to-apply.md +++ b/docs/Process/how-to-apply.md @@ -6,7 +6,7 @@ title: 1. Application :::caution -The process below is independent of the [level](../Introduction/levels.md). Payment is made in Bitcoin, USDT (on Kusama or Polkadot), USDC/DAI (Ethereum) or aUSD (Acala). If you want to apply in **private** and/or you need to be paid out in **fiat**, you can apply [:arrow_right: here](https://docs.google.com/forms/d/e/1FAIpQLSfMfjiRmDQDRk-4OhNASM6BAKii7rz_B1jWtbCPkUh6N7M2ww/viewform). Note that this is generally a slower process and imposes stricter requirements on applicants. +The process below is independent of the [level](../Introduction/levels.md). Payment is made in fiat, Bitcoin, USDT (on Kusama or Polkadot) or USDC/DAI (Ethereum). If you want to apply in **private**, you can apply [:arrow_right: here](https://docs.google.com/forms/d/e/1FAIpQLSfMfjiRmDQDRk-4OhNASM6BAKii7rz_B1jWtbCPkUh6N7M2ww/viewform). Note that this is generally a slower process and imposes stricter requirements on applicants. ::: diff --git a/docs/Support Docs/T&Cs.md b/docs/Support Docs/T&Cs.md index 8f300069bd0..69468d88c17 100644 --- a/docs/Support Docs/T&Cs.md +++ b/docs/Support Docs/T&Cs.md @@ -1,7 +1,7 @@ Grants Terms and Conditions =========================== -Updated December 2022 +Updated February 2023 * * * * * @@ -75,7 +75,7 @@ To apply for the Web 3.0 Foundation Grants Program, your application shall fulfi - it shall be a research or software-based project, which contributes to the advancement of the Polkadot ecosystem; - the Software shall be released under the Apache license version 2.0.; -- You must accept payment in Bitcoin, USDT (on Kusama or Polkadot), USDC/DAI (Ethereum) or aUSD (Acala); +- You must accept payment in fiat, Bitcoin, USDT (on Kusama or Polkadot) or USDC/DAI (Ethereum); - You will need to submit the application and deliver the milestones according to the process specified below; The grants process consists of five parts, each of them described in more detail below: @@ -123,7 +123,7 @@ As soon as one evaluator approves the pull request, the delivery is officially a **(v) Payment process:** -The Operations Team specified in the [Grants-Program GitHub repository](https://github.com/w3f/Grants-Program), gets notified once the above-specified delivery was accepted. As soon as any feedback is provided by the evaluators, this feedback first needs to be resolved. After this, the Operations Team makes the payment to the Bitcoin, USDT (on Kusama or Polkadot), USDC/DAI (Ethereum) or aUSD (Acala) address specified in the initial application. +The Operations Team specified in the [Grants-Program GitHub repository](https://github.com/w3f/Grants-Program), gets notified once the above-specified delivery was accepted. As soon as any feedback is provided by the evaluators, this feedback first needs to be resolved. After this, the Operations Team makes the payment to the Bitcoin, USDT (on Kusama or Polkadot) or USDC/DAI (Ethereum) address specified in the initial application. ## 5. Scope of these Terms and Conditions The subject matter of these Terms and Conditions is (i) the development of the Software by You in accordance with the Specifications, Milestones and Time Schedule, as well as any related activities (including any development activities undertaken before the Effective Date in relation to the Software) (collectively referred to as "Development Work") in accordance with the terms of these Terms and Conditions. diff --git a/docs/referral-program.md b/docs/referral-program.md index 63b5933c0ad..dc030b2a613 100644 --- a/docs/referral-program.md +++ b/docs/referral-program.md @@ -5,4 +5,4 @@ title: Referral Program We give away 500 USD to each referral of a successful grant application by _anyone having previously worked on a Web3 Foundation grant_ or _a [Polkadot Ambassador](https://wiki.polkadot.network/docs/ambassadors)_. Web3 Foundation and Parity employees do not qualify for the program, even if they previously worked on a grant. -In order to be eligible for the referral bonus, the application itself must contain the name of the [Polkadot Ambassador](https://wiki.polkadot.network/docs/ambassadors) or the GitHub account of the grantee as well as the payment address for the referral bonus (see the [application template](https://github.com/w3f/Grants-Program/blob/master/applications/application-template.md)). Payment is made in Bitcoin, USDT (on Kusama or Polkadot), USDC/DAI (Ethereum) or aUSD (Acala). +In order to be eligible for the referral bonus, the application itself must contain the name of the [Polkadot Ambassador](https://wiki.polkadot.network/docs/ambassadors) or the GitHub account of the grantee as well as the payment address for the referral bonus (see the [application template](https://github.com/w3f/Grants-Program/blob/master/applications/application-template.md)). Payment is made in Bitcoin, USDT (on Kusama or Polkadot) or USDC/DAI (Ethereum). diff --git a/maintenance/maintenance-template.md b/maintenance/maintenance-template.md index 742bfd8b913..56ed521e59d 100644 --- a/maintenance/maintenance-template.md +++ b/maintenance/maintenance-template.md @@ -5,7 +5,7 @@ > See the [Maintenance Grants Process](https://github.com/w3f/Grants-Program#hammer_and_wrench-maintenance-grants) on how to submit a proposal. - **Team Name:** Legal name of your team (e.g. JsonCorp) -- **Payment Address:** BTC, Ethereum (USDC/DAI) or Polkadot/Kusama (aUSD/USDT) payment address. Please also specify the currency. (e.g. 0x8920... (DAI)) +- **Payment Address:** In the case of fiat payment, please share your bank account privately with grants@web3.foundation via your contact email (see below) and enter the date when you shared the information with us (e.g. Fiat 24.12.1971, 11:59) here. Otherwise, provide the BTC, Ethereum (USDC/DAI) or Polkadot/Kusama (USDT) payment address. Please also specify the currency. (e.g. 0x8920... (DAI)) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1, 2 or 3 > ⚠️ *The combination of your GitHub account submitting the application and the payment address above will be your unique identifier during the program. Please keep them safe.* From 64c8bac13b6598284ed2188e9c5d093267bb6fc5 Mon Sep 17 00:00:00 2001 From: Nabil Abdellaoui Date: Tue, 21 Feb 2023 14:35:13 -0500 Subject: [PATCH 167/578] Update application index (#1557) IPFS Utilities first delivery --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 353a3e8b1ec..68baad7aec0 100644 --- a/applications/index.md +++ b/applications/index.md @@ -74,7 +74,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [SydTek](https://sydtek.ai/) | [Digital Inheritance in Web3: A Case Study of Soulbound Tokens and Social Recovery Pallets](SydTek.md) | [GitHub](https://github.com/jgophd/Developed-Materials-and-Raw-Data) | ☐ | ☒ | ☐ | | [Anagolay](https://anagolay.network/) | [Multi-token community contributions for verified creators](anagolay-project-idiyanale-multi-token-community-contributions-for-verified-creators.md) | [GitHub](https://github.com/anagolay) | ☐ | ☒ | ☒ | | [Ink Contracts Wizard Team](https://github.com/amankumar1008/contracts-wizard) | [Ink Smart Contract Wizard](ink-smart-contract-wizard.md) | [GitHub](https://github.com/amankumar1008/contracts-wizard) | ☐ | ☒ | ☒ | -| [TDSoftware](https://www.tdsoftware.de/) | [Substrate IPFS Utilities](ipfs_utilities.md) | [GitHub](https://github.com/TDSoftware) | ☐ | ☐ | ☐ | +| [TDSoftware](https://www.tdsoftware.de/) | [Substrate IPFS Utilities](ipfs_utilities.md) | [GitHub](https://github.com/TDSoftware) | ☐ | ☒ | ☐ | | [Ink Boxes Team](https://github.com/nerdsince98) | [Ink Boxes](ink-boxes.md) | [GitHub](https://github.com/avirajkhare00/ink-boxes/) | ☐ | ☒ | ☒ | | [ParaSpell](https://github.com/paraspell) | [ParaSpell Phase 2](ParaSpell_follow-up.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | | [SubRelay](http://subrelay.xyz/) | [SubRelay](subrelay.md) | [GitHub](https://github.com/subrelay) | ☐ | ☐ | ☐ | From c405925056d9cad4075fb624e28a77457f7b0e5d Mon Sep 17 00:00:00 2001 From: Noc2 Date: Tue, 21 Feb 2023 20:43:21 +0100 Subject: [PATCH 168/578] npm update --- package-lock.json | 25561 +++++++++++++------------------------------- 1 file changed, 7137 insertions(+), 18424 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7146ccdfaa4..854cc8357c6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,7 +1,7 @@ { "name": "grants", "version": "0.0.0", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { @@ -20,26 +20,25 @@ "pretty-quick": "^3.1.3", "prism-react-renderer": "^1.2.1", "react": "^17.0.1", + "react-countup": "^6.4.0", "react-dom": "^17.0.1", "url-loader": "^4.1.1" } }, "node_modules/@algolia/autocomplete-core": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.7.2.tgz", - "integrity": "sha512-eclwUDC6qfApNnEfu1uWcL/rudQsn59tjEoUYZYE2JSXZrHLRjBUGMxiCoknobU2Pva8ejb0eRxpIYDtVVqdsw==", - "license": "MIT", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.7.4.tgz", + "integrity": "sha512-daoLpQ3ps/VTMRZDEBfU8ixXd+amZcNJ4QSP3IERGyzqnL5Ch8uSRFt/4G8pUvW9c3o6GA4vtVv4I4lmnkdXyg==", "dependencies": { - "@algolia/autocomplete-shared": "1.7.2" + "@algolia/autocomplete-shared": "1.7.4" } }, "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.2.tgz", - "integrity": "sha512-+RYEG6B0QiGGfRb2G3MtPfyrl0dALF3cQNTWBzBX6p5o01vCCGTTinAm2UKG3tfc2CnOMAtnPLkzNZyJUpnVJw==", - "license": "MIT", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.4.tgz", + "integrity": "sha512-s37hrvLEIfcmKY8VU9LsAXgm2yfmkdHT3DnA3SgHaY93yjZ2qL57wzb5QweVkYuEBZkT2PIREvRoLXC2sxTbpQ==", "dependencies": { - "@algolia/autocomplete-shared": "1.7.2" + "@algolia/autocomplete-shared": "1.7.4" }, "peerDependencies": { "@algolia/client-search": ">= 4.9.1 < 6", @@ -47,151 +46,134 @@ } }, "node_modules/@algolia/autocomplete-shared": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.2.tgz", - "integrity": "sha512-QCckjiC7xXHIUaIL3ektBtjJ0w7tTA3iqKcAE/Hjn1lZ5omp7i3Y4e09rAr9ZybqirL7AbxCLLq0Ra5DDPKeug==", - "license": "MIT" + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.4.tgz", + "integrity": "sha512-2VGCk7I9tA9Ge73Km99+Qg87w0wzW4tgUruvWAn/gfey1ZXgmxZtyIRBebk35R1O8TbK77wujVtCnpsGpRy1kg==" }, "node_modules/@algolia/cache-browser-local-storage": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.14.2.tgz", - "integrity": "sha512-FRweBkK/ywO+GKYfAWbrepewQsPTIEirhi1BdykX9mxvBPtGNKccYAxvGdDCumU1jL4r3cayio4psfzKMejBlA==", - "license": "MIT", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.14.3.tgz", + "integrity": "sha512-hWH1yCxgG3+R/xZIscmUrWAIBnmBFHH5j30fY/+aPkEZWt90wYILfAHIOZ1/Wxhho5SkPfwFmT7ooX2d9JeQBw==", "dependencies": { - "@algolia/cache-common": "4.14.2" + "@algolia/cache-common": "4.14.3" } }, "node_modules/@algolia/cache-common": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.14.2.tgz", - "integrity": "sha512-SbvAlG9VqNanCErr44q6lEKD2qoK4XtFNx9Qn8FK26ePCI8I9yU7pYB+eM/cZdS9SzQCRJBbHUumVr4bsQ4uxg==", - "license": "MIT" + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.14.3.tgz", + "integrity": "sha512-oZJofOoD9FQOwiGTzyRnmzvh3ZP8WVTNPBLH5xU5JNF7drDbRT0ocVT0h/xB2rPHYzOeXRrLaQQBwRT/CKom0Q==" }, "node_modules/@algolia/cache-in-memory": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.14.2.tgz", - "integrity": "sha512-HrOukWoop9XB/VFojPv1R5SVXowgI56T9pmezd/djh2JnVN/vXswhXV51RKy4nCpqxyHt/aGFSq2qkDvj6KiuQ==", - "license": "MIT", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.14.3.tgz", + "integrity": "sha512-ES0hHQnzWjeioLQf5Nq+x1AWdZJ50znNPSH3puB/Y4Xsg4Av1bvLmTJe7SY2uqONaeMTvL0OaVcoVtQgJVw0vg==", "dependencies": { - "@algolia/cache-common": "4.14.2" + "@algolia/cache-common": "4.14.3" } }, "node_modules/@algolia/client-account": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.14.2.tgz", - "integrity": "sha512-WHtriQqGyibbb/Rx71YY43T0cXqyelEU0lB2QMBRXvD2X0iyeGl4qMxocgEIcbHyK7uqE7hKgjT8aBrHqhgc1w==", - "license": "MIT", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.14.3.tgz", + "integrity": "sha512-PBcPb0+f5Xbh5UfLZNx2Ow589OdP8WYjB4CnvupfYBrl9JyC1sdH4jcq/ri8osO/mCZYjZrQsKAPIqW/gQmizQ==", "dependencies": { - "@algolia/client-common": "4.14.2", - "@algolia/client-search": "4.14.2", - "@algolia/transporter": "4.14.2" + "@algolia/client-common": "4.14.3", + "@algolia/client-search": "4.14.3", + "@algolia/transporter": "4.14.3" } }, "node_modules/@algolia/client-analytics": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.14.2.tgz", - "integrity": "sha512-yBvBv2mw+HX5a+aeR0dkvUbFZsiC4FKSnfqk9rrfX+QrlNOKEhCG0tJzjiOggRW4EcNqRmaTULIYvIzQVL2KYQ==", - "license": "MIT", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.14.3.tgz", + "integrity": "sha512-eAwQq0Hb/aauv9NhCH5Dp3Nm29oFx28sayFN2fdOWemwSeJHIl7TmcsxVlRsO50fsD8CtPcDhtGeD3AIFLNvqw==", "dependencies": { - "@algolia/client-common": "4.14.2", - "@algolia/client-search": "4.14.2", - "@algolia/requester-common": "4.14.2", - "@algolia/transporter": "4.14.2" + "@algolia/client-common": "4.14.3", + "@algolia/client-search": "4.14.3", + "@algolia/requester-common": "4.14.3", + "@algolia/transporter": "4.14.3" } }, "node_modules/@algolia/client-common": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.14.2.tgz", - "integrity": "sha512-43o4fslNLcktgtDMVaT5XwlzsDPzlqvqesRi4MjQz2x4/Sxm7zYg5LRYFol1BIhG6EwxKvSUq8HcC/KxJu3J0Q==", - "license": "MIT", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.14.3.tgz", + "integrity": "sha512-jkPPDZdi63IK64Yg4WccdCsAP4pHxSkr4usplkUZM5C1l1oEpZXsy2c579LQ0rvwCs5JFmwfNG4ahOszidfWPw==", "dependencies": { - "@algolia/requester-common": "4.14.2", - "@algolia/transporter": "4.14.2" + "@algolia/requester-common": "4.14.3", + "@algolia/transporter": "4.14.3" } }, "node_modules/@algolia/client-personalization": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.14.2.tgz", - "integrity": "sha512-ACCoLi0cL8CBZ1W/2juehSltrw2iqsQBnfiu/Rbl9W2yE6o2ZUb97+sqN/jBqYNQBS+o0ekTMKNkQjHHAcEXNw==", - "license": "MIT", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.14.3.tgz", + "integrity": "sha512-UCX1MtkVNgaOL9f0e22x6tC9e2H3unZQlSUdnVaSKpZ+hdSChXGaRjp2UIT7pxmPqNCyv51F597KEX5WT60jNg==", "dependencies": { - "@algolia/client-common": "4.14.2", - "@algolia/requester-common": "4.14.2", - "@algolia/transporter": "4.14.2" + "@algolia/client-common": "4.14.3", + "@algolia/requester-common": "4.14.3", + "@algolia/transporter": "4.14.3" } }, "node_modules/@algolia/client-search": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.14.2.tgz", - "integrity": "sha512-L5zScdOmcZ6NGiVbLKTvP02UbxZ0njd5Vq9nJAmPFtjffUSOGEp11BmD2oMJ5QvARgx2XbX4KzTTNS5ECYIMWw==", - "license": "MIT", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.14.3.tgz", + "integrity": "sha512-I2U7xBx5OPFdPLA8AXKUPPxGY3HDxZ4r7+mlZ8ZpLbI8/ri6fnu6B4z3wcL7sgHhDYMwnAE8Xr0AB0h3Hnkp4A==", "dependencies": { - "@algolia/client-common": "4.14.2", - "@algolia/requester-common": "4.14.2", - "@algolia/transporter": "4.14.2" + "@algolia/client-common": "4.14.3", + "@algolia/requester-common": "4.14.3", + "@algolia/transporter": "4.14.3" } }, "node_modules/@algolia/events": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", - "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==", - "license": "MIT" + "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" }, "node_modules/@algolia/logger-common": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.14.2.tgz", - "integrity": "sha512-/JGlYvdV++IcMHBnVFsqEisTiOeEr6cUJtpjz8zc0A9c31JrtLm318Njc72p14Pnkw3A/5lHHh+QxpJ6WFTmsA==", - "license": "MIT" + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.14.3.tgz", + "integrity": "sha512-kUEAZaBt/J3RjYi8MEBT2QEexJR2kAE2mtLmezsmqMQZTV502TkHCxYzTwY2dE7OKcUTxi4OFlMuS4GId9CWPw==" }, "node_modules/@algolia/logger-console": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.14.2.tgz", - "integrity": "sha512-8S2PlpdshbkwlLCSAB5f8c91xyc84VM9Ar9EdfE9UmX+NrKNYnWR1maXXVDQQoto07G1Ol/tYFnFVhUZq0xV/g==", - "license": "MIT", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.14.3.tgz", + "integrity": "sha512-ZWqAlUITktiMN2EiFpQIFCJS10N96A++yrexqC2Z+3hgF/JcKrOxOdT4nSCQoEPvU4Ki9QKbpzbebRDemZt/hw==", "dependencies": { - "@algolia/logger-common": "4.14.2" + "@algolia/logger-common": "4.14.3" } }, "node_modules/@algolia/requester-browser-xhr": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.14.2.tgz", - "integrity": "sha512-CEh//xYz/WfxHFh7pcMjQNWgpl4wFB85lUMRyVwaDPibNzQRVcV33YS+63fShFWc2+42YEipFGH2iPzlpszmDw==", - "license": "MIT", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.14.3.tgz", + "integrity": "sha512-AZeg2T08WLUPvDncl2XLX2O67W5wIO8MNaT7z5ii5LgBTuk/rU4CikTjCe2xsUleIZeFl++QrPAi4Bdxws6r/Q==", "dependencies": { - "@algolia/requester-common": "4.14.2" + "@algolia/requester-common": "4.14.3" } }, "node_modules/@algolia/requester-common": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.14.2.tgz", - "integrity": "sha512-73YQsBOKa5fvVV3My7iZHu1sUqmjjfs9TteFWwPwDmnad7T0VTCopttcsM3OjLxZFtBnX61Xxl2T2gmG2O4ehg==", - "license": "MIT" + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.14.3.tgz", + "integrity": "sha512-RrRzqNyKFDP7IkTuV3XvYGF9cDPn9h6qEDl595lXva3YUk9YSS8+MGZnnkOMHvjkrSCKfoLeLbm/T4tmoIeclw==" }, "node_modules/@algolia/requester-node-http": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.14.2.tgz", - "integrity": "sha512-oDbb02kd1o5GTEld4pETlPZLY0e+gOSWjWMJHWTgDXbv9rm/o2cF7japO6Vj1ENnrqWvLBmW1OzV9g6FUFhFXg==", - "license": "MIT", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.14.3.tgz", + "integrity": "sha512-O5wnPxtDRPuW2U0EaOz9rMMWdlhwP0J0eSL1Z7TtXF8xnUeeUyNJrdhV5uy2CAp6RbhM1VuC3sOJcIR6Av+vbA==", "dependencies": { - "@algolia/requester-common": "4.14.2" + "@algolia/requester-common": "4.14.3" } }, "node_modules/@algolia/transporter": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.14.2.tgz", - "integrity": "sha512-t89dfQb2T9MFQHidjHcfhh6iGMNwvuKUvojAj+JsrHAGbuSy7yE4BylhLX6R0Q1xYRoC4Vvv+O5qIw/LdnQfsQ==", - "license": "MIT", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.14.3.tgz", + "integrity": "sha512-2qlKlKsnGJ008exFRb5RTeTOqhLZj0bkMCMVskxoqWejs2Q2QtWmsiH98hDfpw0fmnyhzHEt0Z7lqxBYp8bW2w==", "dependencies": { - "@algolia/cache-common": "4.14.2", - "@algolia/logger-common": "4.14.2", - "@algolia/requester-common": "4.14.2" + "@algolia/cache-common": "4.14.3", + "@algolia/logger-common": "4.14.3", + "@algolia/requester-common": "4.14.3" } }, "node_modules/@ampproject/remapping": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.1.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -200,24 +182,10 @@ "node": ">=6.0.0" } }, - "node_modules/@ampproject/remapping/node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@babel/code-frame": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "license": "MIT", "dependencies": { "@babel/highlight": "^7.18.6" }, @@ -226,33 +194,32 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", - "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz", + "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz", - "integrity": "sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.0.tgz", + "integrity": "sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA==", "dependencies": { - "@ampproject/remapping": "^2.1.0", + "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.5", - "@babel/parser": "^7.20.5", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5", + "@babel/generator": "^7.21.0", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-module-transforms": "^7.21.0", + "@babel/helpers": "^7.21.0", + "@babel/parser": "^7.21.0", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", + "json5": "^2.2.2", "semver": "^6.3.0" }, "engines": { @@ -263,47 +230,45 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@babel/core/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "license": "MIT" - }, "node_modules/@babel/generator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz", - "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==", + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz", + "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==", "dependencies": { - "@babel/types": "^7.20.5", + "@babel/types": "^7.21.0", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@babel/helper-annotate-as-pure": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "license": "MIT", "dependencies": { "@babel/types": "^7.18.6" }, @@ -315,7 +280,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", - "license": "MIT", "dependencies": { "@babel/helper-explode-assignable-expression": "^7.18.6", "@babel/types": "^7.18.9" @@ -325,14 +289,14 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", - "license": "MIT", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", + "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", "dependencies": { - "@babel/compat-data": "^7.20.0", + "@babel/compat-data": "^7.20.5", "@babel/helper-validator-option": "^7.18.6", "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", "semver": "^6.3.0" }, "engines": { @@ -342,18 +306,26 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.2.tgz", - "integrity": "sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.0.tgz", + "integrity": "sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-member-expression-to-functions": "^7.21.0", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-replace-supers": "^7.20.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", "@babel/helper-split-export-declaration": "^7.18.6" }, "engines": { @@ -364,13 +336,12 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", - "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.0.tgz", + "integrity": "sha512-N+LaFW/auRSWdx7SHD/HiARwXQju1vXTW4fKr4u5SgBUTm51OKEjKgj+cs00ggW3kEvNqwErnlwuq7Y3xBe4eg==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.1.0" + "regexpu-core": "^5.3.1" }, "engines": { "node": ">=6.9.0" @@ -383,7 +354,6 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.17.7", "@babel/helper-plugin-utils": "^7.16.7", @@ -396,34 +366,18 @@ "@babel/core": "^7.4.0-0" } }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "license": "MIT" - }, "node_modules/@babel/helper-environment-visitor": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -432,7 +386,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "license": "MIT", "dependencies": { "@babel/types": "^7.18.6" }, @@ -441,13 +394,12 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", "dependencies": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -457,7 +409,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "license": "MIT", "dependencies": { "@babel/types": "^7.18.6" }, @@ -466,12 +417,11 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", - "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz", + "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==", "dependencies": { - "@babel/types": "^7.18.9" + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -481,7 +431,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "license": "MIT", "dependencies": { "@babel/types": "^7.18.6" }, @@ -490,19 +439,18 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.0.tgz", + "integrity": "sha512-eD/JQ21IG2i1FraJnTMbUarAUkA7G988ofehG5MDCRXaUU91rEBJuCeSoou2Sk1y4RbLYXzqEg1QLwEmRU4qcQ==", "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", "@babel/helper-simple-access": "^7.20.2", "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -512,7 +460,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "license": "MIT", "dependencies": { "@babel/types": "^7.18.6" }, @@ -524,7 +471,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", - "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -533,7 +479,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", @@ -548,16 +493,16 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", - "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", - "license": "MIT", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", + "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.20.7", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.19.1", - "@babel/types": "^7.19.0" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.7", + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" @@ -567,7 +512,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "license": "MIT", "dependencies": { "@babel/types": "^7.20.2" }, @@ -579,7 +523,6 @@ "version": "7.20.0", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", - "license": "MIT", "dependencies": { "@babel/types": "^7.20.0" }, @@ -591,7 +534,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "license": "MIT", "dependencies": { "@babel/types": "^7.18.6" }, @@ -603,7 +545,6 @@ "version": "7.19.4", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -612,43 +553,40 @@ "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", + "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", - "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", - "license": "MIT", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", + "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", "dependencies": { "@babel/helper-function-name": "^7.19.0", "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" + "@babel/traverse": "^7.20.5", + "@babel/types": "^7.20.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz", - "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", + "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", "dependencies": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -658,7 +596,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", @@ -672,7 +609,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -684,7 +620,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -698,7 +633,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "license": "MIT", "dependencies": { "color-name": "1.1.3" } @@ -706,14 +640,12 @@ "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -722,7 +654,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "license": "MIT", "engines": { "node": ">=4" } @@ -731,7 +662,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -740,9 +670,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz", - "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==", + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.1.tgz", + "integrity": "sha512-JzhBFpkuhBNYUY7qs+wTzNmyCWUHEaAFpQQD2YfU1rPL38/L43Wvid0fFkiOCnHvsGncRZgEPyGnltABLcVDTg==", "bin": { "parser": "bin/babel-parser.js" }, @@ -754,7 +684,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -766,14 +695,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", - "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", - "license": "MIT", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", + "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-proposal-optional-chaining": "^7.18.9" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.7" }, "engines": { "node": ">=6.9.0" @@ -783,13 +711,12 @@ } }, "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz", - "integrity": "sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==", - "license": "MIT", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-remap-async-to-generator": "^7.18.9", "@babel/plugin-syntax-async-generators": "^7.8.4" }, @@ -804,7 +731,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -817,13 +743,12 @@ } }, "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", - "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz", + "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { @@ -837,7 +762,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-dynamic-import": "^7.8.3" @@ -853,7 +777,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" @@ -869,7 +792,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-json-strings": "^7.8.3" @@ -882,12 +804,11 @@ } }, "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", - "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", - "license": "MIT", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", + "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { @@ -901,7 +822,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" @@ -917,7 +837,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-numeric-separator": "^7.10.4" @@ -930,16 +849,15 @@ } }, "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz", - "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==", - "license": "MIT", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", + "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", "dependencies": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.1" + "@babel/plugin-transform-parameters": "^7.20.7" }, "engines": { "node": ">=6.9.0" @@ -952,7 +870,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" @@ -965,13 +882,12 @@ } }, "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", - "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { @@ -985,7 +901,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -998,14 +913,13 @@ } }, "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", - "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz", + "integrity": "sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -1019,7 +933,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1035,7 +948,6 @@ "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1047,7 +959,6 @@ "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -1059,7 +970,6 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1074,7 +984,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1086,7 +995,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" }, @@ -1098,7 +1006,6 @@ "version": "7.20.0", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.19.0" }, @@ -1113,7 +1020,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1122,12 +1028,14 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "license": "MIT", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -1137,7 +1045,6 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1149,7 +1056,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1161,7 +1067,6 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1173,7 +1078,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1185,7 +1089,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1197,7 +1100,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1209,7 +1111,6 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1224,7 +1125,6 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1239,7 +1139,6 @@ "version": "7.20.0", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.19.0" }, @@ -1251,12 +1150,11 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", - "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", - "license": "MIT", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", + "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -1266,14 +1164,13 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", - "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", - "license": "MIT", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", + "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", "dependencies": { "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9" }, "engines": { "node": ">=6.9.0" @@ -1286,7 +1183,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1298,10 +1194,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.2.tgz", - "integrity": "sha512-y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz", + "integrity": "sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2" }, @@ -1313,18 +1208,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz", - "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz", + "integrity": "sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-compilation-targets": "^7.20.7", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", + "@babel/helper-function-name": "^7.21.0", "@babel/helper-optimise-call-expression": "^7.18.6", "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-replace-supers": "^7.20.7", "@babel/helper-split-export-declaration": "^7.18.6", "globals": "^11.1.0" }, @@ -1336,12 +1230,12 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", - "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", - "license": "MIT", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", + "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/template": "^7.20.7" }, "engines": { "node": ">=6.9.0" @@ -1351,10 +1245,9 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz", - "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==", - "license": "MIT", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz", + "integrity": "sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2" }, @@ -1369,7 +1262,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1385,7 +1277,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1400,7 +1291,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "license": "MIT", "dependencies": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1413,12 +1303,11 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz", + "integrity": "sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -1431,7 +1320,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.18.9", "@babel/helper-function-name": "^7.18.9", @@ -1448,7 +1336,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1463,7 +1350,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1475,13 +1361,12 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz", - "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==", - "license": "MIT", + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", + "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", "dependencies": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0" + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -1491,14 +1376,13 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", - "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", - "license": "MIT", + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.20.11.tgz", + "integrity": "sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==", "dependencies": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-simple-access": "^7.19.4" + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-simple-access": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -1508,14 +1392,13 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz", - "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==", - "license": "MIT", + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", + "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", "dependencies": { "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-validator-identifier": "^7.19.1" }, "engines": { @@ -1529,7 +1412,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1542,13 +1424,12 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", - "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", - "license": "MIT", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", + "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.19.0", - "@babel/helper-plugin-utils": "^7.19.0" + "@babel/helper-create-regexp-features-plugin": "^7.20.5", + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -1561,7 +1442,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1576,7 +1456,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/helper-replace-supers": "^7.18.6" @@ -1589,10 +1468,9 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.3.tgz", - "integrity": "sha512-oZg/Fpx0YDrj13KsLyO8I/CX3Zdw7z0O9qOd95SqcoIzuqy/WTGWvePeHAnZCN54SfdyjHcb1S30gc8zlzlHcA==", - "license": "MIT", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz", + "integrity": "sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2" }, @@ -1607,7 +1485,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1622,7 +1499,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.20.2.tgz", "integrity": "sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2" }, @@ -1637,7 +1513,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1649,16 +1524,15 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", - "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.0.tgz", + "integrity": "sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.19.0" + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -1671,7 +1545,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", - "license": "MIT", "dependencies": { "@babel/plugin-transform-react-jsx": "^7.18.6" }, @@ -1682,26 +1555,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-transform-react-pure-annotations": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", - "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1714,13 +1571,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", - "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", - "license": "MIT", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", + "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "regenerator-transform": "^0.15.0" + "@babel/helper-plugin-utils": "^7.20.2", + "regenerator-transform": "^0.15.1" }, "engines": { "node": ">=6.9.0" @@ -1733,7 +1589,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1745,13 +1600,12 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", - "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.21.0.tgz", + "integrity": "sha512-ReY6pxwSzEU0b3r2/T/VhqMKg/AkceBT19X0UptA3/tYi5Pe2eXgEUH+NNMC5nok6c6XQz5tyVTUpuezRfSMSg==", "dependencies": { "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-plugin-utils": "^7.20.2", "babel-plugin-polyfill-corejs2": "^0.3.3", "babel-plugin-polyfill-corejs3": "^0.6.0", "babel-plugin-polyfill-regenerator": "^0.4.1", @@ -1764,11 +1618,18 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1780,13 +1641,12 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", - "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", - "license": "MIT", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", + "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" }, "engines": { "node": ">=6.9.0" @@ -1799,7 +1659,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1814,7 +1673,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1829,7 +1687,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1841,12 +1698,11 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.2.tgz", - "integrity": "sha512-jvS+ngBfrnTUBfOQq8NfGnSbF9BrqlR6hjJ2yVxMkmO5nL/cdifNbI30EfjRlN4g5wYWNnMPyj5Sa6R1pbLeag==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.0.tgz", + "integrity": "sha512-xo///XTPp3mDzTtrqXoBlK9eiAYW3wv9JXglcn/u1bi60RW11dEUxIgA8cbnDhutS1zacjMRmAwxE0gMklLnZg==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.20.2", + "@babel/helper-create-class-features-plugin": "^7.21.0", "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-typescript": "^7.20.0" }, @@ -1861,7 +1717,6 @@ "version": "7.18.10", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1876,7 +1731,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1892,7 +1746,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", - "license": "MIT", "dependencies": { "@babel/compat-data": "^7.20.1", "@babel/helper-compilation-targets": "^7.20.0", @@ -1977,11 +1830,18 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/preset-modules": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", @@ -1997,7 +1857,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/helper-validator-option": "^7.18.6", @@ -2014,14 +1873,13 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", - "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.21.0.tgz", + "integrity": "sha512-myc9mpoVA5m1rF8K8DgLEatOYFDpwC+RkMkjZ0Du6uI62YvDe8uxIEYVs/VCdSJ097nlALiU/yBC7//3nI+hNg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-typescript": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.21.0", + "@babel/plugin-transform-typescript": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -2030,58 +1888,60 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" + }, "node_modules/@babel/runtime": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", - "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", + "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", "dependencies": { - "regenerator-runtime": "^0.13.10" + "regenerator-runtime": "^0.13.11" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.1.tgz", - "integrity": "sha512-CGulbEDcg/ND1Im7fUNRZdGXmX2MTWVVZacQi/6DiKE5HNwZ3aVTm5PV4lO8HHz0B2h8WQyvKKjbX5XgTtydsg==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.21.0.tgz", + "integrity": "sha512-TDD4UJzos3JJtM+tHX+w2Uc+KWj7GV+VKKFdMVd2Rx8sdA19hcc3P3AHFYd5LVOw+pYuSd5lICC3gm52B6Rwxw==", "dependencies": { "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.10" + "regenerator-runtime": "^0.13.11" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "license": "MIT", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz", - "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.0.tgz", + "integrity": "sha512-Xdt2P1H4LKTO8ApPfnO1KmzYMFpp7D/EinoXzLYN/cHcBNrVCAkAtGUcXnHXrl/VGktureU6fkQrHSBE2URfoA==", "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", + "@babel/generator": "^7.21.0", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", + "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.5", - "@babel/types": "^7.20.5", + "@babel/parser": "^7.21.0", + "@babel/types": "^7.21.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -2089,33 +1949,10 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/traverse/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/traverse/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "license": "MIT" - }, "node_modules/@babel/types": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz", - "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.0.tgz", + "integrity": "sha512-uR7NWq2VNFnDi7EYqiRz2Jv/VQIu38tu64Zy8TX2nQFQ6etJ9V/Rr2msW8BS132mum2rL645qpDrLtAJtVpuow==", "dependencies": { "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", @@ -2128,34 +1965,38 @@ "node_modules/@braintree/sanitize-url": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz", - "integrity": "sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==", - "license": "MIT" + "integrity": "sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==" }, "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "license": "MIT", "optional": true, "engines": { "node": ">=0.1.90" } }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/@docsearch/css": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.3.0.tgz", - "integrity": "sha512-rODCdDtGyudLj+Va8b6w6Y85KE85bXRsps/R4Yjwt5vueXKXZQKYw0aA9knxLBT6a/bI/GMrAcmCR75KYOM6hg==", - "license": "MIT" + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.3.3.tgz", + "integrity": "sha512-6SCwI7P8ao+se1TUsdZ7B4XzL+gqeQZnBc+2EONZlcVa0dVrk0NjETxozFKgMv0eEGH8QzP1fkN+A1rH61l4eg==" }, "node_modules/@docsearch/react": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.3.0.tgz", - "integrity": "sha512-fhS5adZkae2SSdMYEMVg6pxI5a/cE+tW16ki1V0/ur4Fdok3hBRkmN/H8VvlXnxzggkQIIRIVvYPn00JPjen3A==", - "license": "MIT", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.3.3.tgz", + "integrity": "sha512-pLa0cxnl+G0FuIDuYlW+EBK6Rw2jwLw9B1RHIeS4N4s2VhsfJ/wzeCi3CWcs5yVfxLd5ZK50t//TMA5e79YT7Q==", "dependencies": { - "@algolia/autocomplete-core": "1.7.2", - "@algolia/autocomplete-preset-algolia": "1.7.2", - "@docsearch/css": "3.3.0", + "@algolia/autocomplete-core": "1.7.4", + "@algolia/autocomplete-preset-algolia": "1.7.4", + "@docsearch/css": "3.3.3", "algoliasearch": "^4.0.0" }, "peerDependencies": { @@ -2176,10 +2017,9 @@ } }, "node_modules/@docusaurus/core": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.2.0.tgz", - "integrity": "sha512-Vd6XOluKQqzG12fEs9prJgDtyn6DPok9vmUWDR2E6/nV5Fl9SVkhEQOBxwObjk3kQh7OY7vguFaLh0jqdApWsA==", - "license": "MIT", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.3.1.tgz", + "integrity": "sha512-0Jd4jtizqnRAr7svWaBbbrCCN8mzBNd2xFLoT/IM7bGfFie5y58oz97KzXliwiLY3zWjqMXjQcuP1a5VgCv2JA==", "dependencies": { "@babel/core": "^7.18.6", "@babel/generator": "^7.18.7", @@ -2191,13 +2031,13 @@ "@babel/runtime": "^7.18.6", "@babel/runtime-corejs3": "^7.18.6", "@babel/traverse": "^7.18.8", - "@docusaurus/cssnano-preset": "2.2.0", - "@docusaurus/logger": "2.2.0", - "@docusaurus/mdx-loader": "2.2.0", + "@docusaurus/cssnano-preset": "2.3.1", + "@docusaurus/logger": "2.3.1", + "@docusaurus/mdx-loader": "2.3.1", "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/utils": "2.2.0", - "@docusaurus/utils-common": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", + "@docusaurus/utils": "2.3.1", + "@docusaurus/utils-common": "2.3.1", + "@docusaurus/utils-validation": "2.3.1", "@slorber/static-site-generator-webpack-plugin": "^4.0.7", "@svgr/webpack": "^6.2.1", "autoprefixer": "^10.4.7", @@ -2218,7 +2058,7 @@ "del": "^6.1.1", "detect-port": "^1.3.0", "escape-html": "^1.0.3", - "eta": "^1.12.3", + "eta": "^2.0.0", "file-loader": "^6.2.0", "fs-extra": "^10.1.0", "html-minifier-terser": "^6.1.0", @@ -2264,34 +2104,25 @@ "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/core/node_modules/@svgr/hast-util-to-babel-ast": { + "node_modules/@docusaurus/core/node_modules/@svgr/babel-plugin-add-jsx-attribute": { "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", - "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.20.0", - "entities": "^4.4.0" - }, + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz", + "integrity": "sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==", "engines": { "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@docusaurus/core/node_modules/@svgr/plugin-jsx": { + "node_modules/@docusaurus/core/node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", - "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/hast-util-to-babel-ast": "^6.5.1", - "svg-parser": "^2.0.4" - }, + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz", + "integrity": "sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==", "engines": { "node": ">=10" }, @@ -2300,15 +2131,155 @@ "url": "https://github.com/sponsors/gregberge" }, "peerDependencies": { - "@svgr/core": "^6.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@docusaurus/core/node_modules/@svgr/plugin-svgo": { + "node_modules/@docusaurus/core/node_modules/@svgr/babel-plugin-svg-dynamic-title": { "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz", - "integrity": "sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==", - "license": "MIT", - "dependencies": { + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz", + "integrity": "sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@docusaurus/core/node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz", + "integrity": "sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@docusaurus/core/node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz", + "integrity": "sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@docusaurus/core/node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz", + "integrity": "sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@docusaurus/core/node_modules/@svgr/babel-preset": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz", + "integrity": "sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==", + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "^6.5.1", + "@svgr/babel-plugin-remove-jsx-attribute": "*", + "@svgr/babel-plugin-remove-jsx-empty-expression": "*", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1", + "@svgr/babel-plugin-svg-dynamic-title": "^6.5.1", + "@svgr/babel-plugin-svg-em-dimensions": "^6.5.1", + "@svgr/babel-plugin-transform-react-native-svg": "^6.5.1", + "@svgr/babel-plugin-transform-svg-component": "^6.5.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@docusaurus/core/node_modules/@svgr/core": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz", + "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==", + "dependencies": { + "@babel/core": "^7.19.6", + "@svgr/babel-preset": "^6.5.1", + "@svgr/plugin-jsx": "^6.5.1", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@docusaurus/core/node_modules/@svgr/hast-util-to-babel-ast": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", + "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", + "dependencies": { + "@babel/types": "^7.20.0", + "entities": "^4.4.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@docusaurus/core/node_modules/@svgr/plugin-jsx": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", + "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", + "dependencies": { + "@babel/core": "^7.19.6", + "@svgr/babel-preset": "^6.5.1", + "@svgr/hast-util-to-babel-ast": "^6.5.1", + "svg-parser": "^2.0.4" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "^6.0.0" + } + }, + "node_modules/@docusaurus/core/node_modules/@svgr/plugin-svgo": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz", + "integrity": "sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==", + "dependencies": { "cosmiconfig": "^7.0.1", "deepmerge": "^4.2.2", "svgo": "^2.8.0" @@ -2328,7 +2299,6 @@ "version": "6.5.1", "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.1.tgz", "integrity": "sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==", - "license": "MIT", "dependencies": { "@babel/core": "^7.19.6", "@babel/plugin-transform-react-constant-elements": "^7.18.12", @@ -2347,35 +2317,118 @@ "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/@docusaurus/core/node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "license": "MIT", + "node_modules/@docusaurus/core/node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/@docusaurus/core/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, "engines": { - "node": ">= 6" + "node": ">=8.0.0" } }, - "node_modules/@docusaurus/core/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "license": "ISC", + "node_modules/@docusaurus/core/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dependencies": { - "lru-cache": "^6.0.0" + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/@docusaurus/core/node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/@docusaurus/core/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/@docusaurus/core/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/@docusaurus/core/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "node_modules/@docusaurus/core/node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" }, "bin": { - "semver": "bin/semver.js" + "svgo": "bin/svgo" }, "engines": { - "node": ">=10" + "node": ">=10.13.0" + } + }, + "node_modules/@docusaurus/core/node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" } }, "node_modules/@docusaurus/cssnano-preset": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.2.0.tgz", - "integrity": "sha512-mAAwCo4n66TMWBH1kXnHVZsakW9VAXJzTO4yZukuL3ro4F+JtkMwKfh42EG75K/J/YIFQG5I/Bzy0UH/hFxaTg==", - "license": "MIT", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.3.1.tgz", + "integrity": "sha512-7mIhAROES6CY1GmCjR4CZkUfjTL6B3u6rKHK0ChQl2d1IevYXq/k/vFgvOrJfcKxiObpMnE9+X6R2Wt1KqxC6w==", "dependencies": { "cssnano-preset-advanced": "^5.3.8", "postcss": "^8.4.14", @@ -2387,10 +2440,9 @@ } }, "node_modules/@docusaurus/logger": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.2.0.tgz", - "integrity": "sha512-DF3j1cA5y2nNsu/vk8AG7xwpZu6f5MKkPPMaaIbgXLnWGfm6+wkOeW7kNrxnM95YOhKUkJUophX69nGUnLsm0A==", - "license": "MIT", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.3.1.tgz", + "integrity": "sha512-2lAV/olKKVr9qJhfHFCaqBIl8FgYjbUFwgUnX76+cULwQYss+42ZQ3grHGFvI0ocN2X55WcYe64ellQXz7suqg==", "dependencies": { "chalk": "^4.1.2", "tslib": "^2.4.0" @@ -2400,15 +2452,14 @@ } }, "node_modules/@docusaurus/mdx-loader": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.2.0.tgz", - "integrity": "sha512-X2bzo3T0jW0VhUU+XdQofcEeozXOTmKQMvc8tUnWRdTnCvj4XEcBVdC3g+/jftceluiwSTNRAX4VBOJdNt18jA==", - "license": "MIT", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.3.1.tgz", + "integrity": "sha512-Gzga7OsxQRpt3392K9lv/bW4jGppdLFJh3luKRknCKSAaZrmVkOQv2gvCn8LAOSZ3uRg5No7AgYs/vpL8K94lA==", "dependencies": { "@babel/parser": "^7.18.8", "@babel/traverse": "^7.18.8", - "@docusaurus/logger": "2.2.0", - "@docusaurus/utils": "2.2.0", + "@docusaurus/logger": "2.3.1", + "@docusaurus/utils": "2.3.1", "@mdx-js/mdx": "^1.6.22", "escape-html": "^1.0.3", "file-loader": "^6.2.0", @@ -2431,32 +2482,13 @@ "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/mdx-loader/node_modules/unified": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", - "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", - "license": "MIT", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@docusaurus/module-type-aliases": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.2.0.tgz", - "integrity": "sha512-wDGW4IHKoOr9YuJgy7uYuKWrDrSpsUSDHLZnWQYM9fN7D5EpSmYHjFruUpKWVyxLpD/Wh0rW8hYZwdjJIQUQCQ==", - "license": "MIT", + "node_modules/@docusaurus/module-type-aliases": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.3.1.tgz", + "integrity": "sha512-6KkxfAVOJqIUynTRb/tphYCl+co3cP0PlHiMDbi+SzmYxMdgIrwYqH9yAnGSDoN6Jk2ZE/JY/Azs/8LPgKP48A==", "dependencies": { "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/types": "2.2.0", + "@docusaurus/types": "2.3.1", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", @@ -2470,18 +2502,17 @@ } }, "node_modules/@docusaurus/plugin-content-blog": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.2.0.tgz", - "integrity": "sha512-0mWBinEh0a5J2+8ZJXJXbrCk1tSTNf7Nm4tYAl5h2/xx+PvH/Bnu0V+7mMljYm/1QlDYALNIIaT/JcoZQFUN3w==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "2.2.0", - "@docusaurus/logger": "2.2.0", - "@docusaurus/mdx-loader": "2.2.0", - "@docusaurus/types": "2.2.0", - "@docusaurus/utils": "2.2.0", - "@docusaurus/utils-common": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.3.1.tgz", + "integrity": "sha512-f5LjqX+9WkiLyGiQ41x/KGSJ/9bOjSD8lsVhPvYeUYHCtYpuiDKfhZE07O4EqpHkBx4NQdtQDbp+aptgHSTuiw==", + "dependencies": { + "@docusaurus/core": "2.3.1", + "@docusaurus/logger": "2.3.1", + "@docusaurus/mdx-loader": "2.3.1", + "@docusaurus/types": "2.3.1", + "@docusaurus/utils": "2.3.1", + "@docusaurus/utils-common": "2.3.1", + "@docusaurus/utils-validation": "2.3.1", "cheerio": "^1.0.0-rc.12", "feed": "^4.2.2", "fs-extra": "^10.1.0", @@ -2501,18 +2532,17 @@ } }, "node_modules/@docusaurus/plugin-content-docs": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.2.0.tgz", - "integrity": "sha512-BOazBR0XjzsHE+2K1wpNxz5QZmrJgmm3+0Re0EVPYFGW8qndCWGNtXW/0lGKhecVPML8yyFeAmnUCIs7xM2wPw==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "2.2.0", - "@docusaurus/logger": "2.2.0", - "@docusaurus/mdx-loader": "2.2.0", - "@docusaurus/module-type-aliases": "2.2.0", - "@docusaurus/types": "2.2.0", - "@docusaurus/utils": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.3.1.tgz", + "integrity": "sha512-DxztTOBEruv7qFxqUtbsqXeNcHqcVEIEe+NQoI1oi2DBmKBhW/o0MIal8lt+9gvmpx3oYtlwmLOOGepxZgJGkw==", + "dependencies": { + "@docusaurus/core": "2.3.1", + "@docusaurus/logger": "2.3.1", + "@docusaurus/mdx-loader": "2.3.1", + "@docusaurus/module-type-aliases": "2.3.1", + "@docusaurus/types": "2.3.1", + "@docusaurus/utils": "2.3.1", + "@docusaurus/utils-validation": "2.3.1", "@types/react-router-config": "^5.0.6", "combine-promises": "^1.1.0", "fs-extra": "^10.1.0", @@ -2532,16 +2562,15 @@ } }, "node_modules/@docusaurus/plugin-content-pages": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.2.0.tgz", - "integrity": "sha512-+OTK3FQHk5WMvdelz8v19PbEbx+CNT6VSpx7nVOvMNs5yJCKvmqBJBQ2ZSxROxhVDYn+CZOlmyrC56NSXzHf6g==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "2.2.0", - "@docusaurus/mdx-loader": "2.2.0", - "@docusaurus/types": "2.2.0", - "@docusaurus/utils": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.3.1.tgz", + "integrity": "sha512-E80UL6hvKm5VVw8Ka8YaVDtO6kWWDVUK4fffGvkpQ/AJQDOg99LwOXKujPoICC22nUFTsZ2Hp70XvpezCsFQaA==", + "dependencies": { + "@docusaurus/core": "2.3.1", + "@docusaurus/mdx-loader": "2.3.1", + "@docusaurus/types": "2.3.1", + "@docusaurus/utils": "2.3.1", + "@docusaurus/utils-validation": "2.3.1", "fs-extra": "^10.1.0", "tslib": "^2.4.0", "webpack": "^5.73.0" @@ -2555,14 +2584,13 @@ } }, "node_modules/@docusaurus/plugin-debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.2.0.tgz", - "integrity": "sha512-p9vOep8+7OVl6r/NREEYxf4HMAjV8JMYJ7Bos5fCFO0Wyi9AZEo0sCTliRd7R8+dlJXZEgcngSdxAUo/Q+CJow==", - "license": "MIT", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.3.1.tgz", + "integrity": "sha512-Ujpml1Ppg4geB/2hyu2diWnO49az9U2bxM9Shen7b6qVcyFisNJTkVG2ocvLC7wM1efTJcUhBO6zAku2vKJGMw==", "dependencies": { - "@docusaurus/core": "2.2.0", - "@docusaurus/types": "2.2.0", - "@docusaurus/utils": "2.2.0", + "@docusaurus/core": "2.3.1", + "@docusaurus/types": "2.3.1", + "@docusaurus/utils": "2.3.1", "fs-extra": "^10.1.0", "react-json-view": "^1.21.3", "tslib": "^2.4.0" @@ -2576,14 +2604,13 @@ } }, "node_modules/@docusaurus/plugin-google-analytics": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.2.0.tgz", - "integrity": "sha512-+eZVVxVeEnV5nVQJdey9ZsfyEVMls6VyWTIj8SmX0k5EbqGvnIfET+J2pYEuKQnDIHxy+syRMoRM6AHXdHYGIg==", - "license": "MIT", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.3.1.tgz", + "integrity": "sha512-OHip0GQxKOFU8n7gkt3TM4HOYTXPCFDjqKbMClDD3KaDnyTuMp/Zvd9HSr770lLEscgPWIvzhJByRAClqsUWiQ==", "dependencies": { - "@docusaurus/core": "2.2.0", - "@docusaurus/types": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", + "@docusaurus/core": "2.3.1", + "@docusaurus/types": "2.3.1", + "@docusaurus/utils-validation": "2.3.1", "tslib": "^2.4.0" }, "engines": { @@ -2595,14 +2622,31 @@ } }, "node_modules/@docusaurus/plugin-google-gtag": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.2.0.tgz", - "integrity": "sha512-6SOgczP/dYdkqUMGTRqgxAS1eTp6MnJDAQMy8VCF1QKbWZmlkx4agHDexihqmYyCujTYHqDAhm1hV26EET54NQ==", - "license": "MIT", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.3.1.tgz", + "integrity": "sha512-uXtDhfu4+Hm+oqWUySr3DNI5cWC/rmP6XJyAk83Heor3dFjZqDwCbkX8yWPywkRiWev3Dk/rVF8lEn0vIGVocA==", + "dependencies": { + "@docusaurus/core": "2.3.1", + "@docusaurus/types": "2.3.1", + "@docusaurus/utils-validation": "2.3.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-tag-manager": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-2.3.1.tgz", + "integrity": "sha512-Ww2BPEYSqg8q8tJdLYPFFM3FMDBCVhEM4UUqKzJaiRMx3NEoly3qqDRAoRDGdIhlC//Rf0iJV9cWAoq2m6k3sw==", "dependencies": { - "@docusaurus/core": "2.2.0", - "@docusaurus/types": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", + "@docusaurus/core": "2.3.1", + "@docusaurus/types": "2.3.1", + "@docusaurus/utils-validation": "2.3.1", "tslib": "^2.4.0" }, "engines": { @@ -2614,17 +2658,16 @@ } }, "node_modules/@docusaurus/plugin-sitemap": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.2.0.tgz", - "integrity": "sha512-0jAmyRDN/aI265CbWZNZuQpFqiZuo+5otk2MylU9iVrz/4J7gSc+ZJ9cy4EHrEsW7PV8s1w18hIEsmcA1YgkKg==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "2.2.0", - "@docusaurus/logger": "2.2.0", - "@docusaurus/types": "2.2.0", - "@docusaurus/utils": "2.2.0", - "@docusaurus/utils-common": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.3.1.tgz", + "integrity": "sha512-8Yxile/v6QGYV9vgFiYL+8d2N4z4Er3pSHsrD08c5XI8bUXxTppMwjarDUTH/TRTfgAWotRbhJ6WZLyajLpozA==", + "dependencies": { + "@docusaurus/core": "2.3.1", + "@docusaurus/logger": "2.3.1", + "@docusaurus/types": "2.3.1", + "@docusaurus/utils": "2.3.1", + "@docusaurus/utils-common": "2.3.1", + "@docusaurus/utils-validation": "2.3.1", "fs-extra": "^10.1.0", "sitemap": "^7.1.1", "tslib": "^2.4.0" @@ -2638,23 +2681,23 @@ } }, "node_modules/@docusaurus/preset-classic": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.2.0.tgz", - "integrity": "sha512-yKIWPGNx7BT8v2wjFIWvYrS+nvN04W+UameSFf8lEiJk6pss0kL6SG2MRvyULiI3BDxH+tj6qe02ncpSPGwumg==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "2.2.0", - "@docusaurus/plugin-content-blog": "2.2.0", - "@docusaurus/plugin-content-docs": "2.2.0", - "@docusaurus/plugin-content-pages": "2.2.0", - "@docusaurus/plugin-debug": "2.2.0", - "@docusaurus/plugin-google-analytics": "2.2.0", - "@docusaurus/plugin-google-gtag": "2.2.0", - "@docusaurus/plugin-sitemap": "2.2.0", - "@docusaurus/theme-classic": "2.2.0", - "@docusaurus/theme-common": "2.2.0", - "@docusaurus/theme-search-algolia": "2.2.0", - "@docusaurus/types": "2.2.0" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.3.1.tgz", + "integrity": "sha512-OQ5W0AHyfdUk0IldwJ3BlnZ1EqoJuu2L2BMhqLbqwNWdkmzmSUvlFLH1Pe7CZSQgB2YUUC/DnmjbPKk/qQD0lQ==", + "dependencies": { + "@docusaurus/core": "2.3.1", + "@docusaurus/plugin-content-blog": "2.3.1", + "@docusaurus/plugin-content-docs": "2.3.1", + "@docusaurus/plugin-content-pages": "2.3.1", + "@docusaurus/plugin-debug": "2.3.1", + "@docusaurus/plugin-google-analytics": "2.3.1", + "@docusaurus/plugin-google-gtag": "2.3.1", + "@docusaurus/plugin-google-tag-manager": "2.3.1", + "@docusaurus/plugin-sitemap": "2.3.1", + "@docusaurus/theme-classic": "2.3.1", + "@docusaurus/theme-common": "2.3.1", + "@docusaurus/theme-search-algolia": "2.3.1", + "@docusaurus/types": "2.3.1" }, "engines": { "node": ">=16.14" @@ -2668,7 +2711,6 @@ "version": "5.5.2", "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", - "license": "MIT", "dependencies": { "@types/react": "*", "prop-types": "^15.6.2" @@ -2678,23 +2720,22 @@ } }, "node_modules/@docusaurus/theme-classic": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.2.0.tgz", - "integrity": "sha512-kjbg/qJPwZ6H1CU/i9d4l/LcFgnuzeiGgMQlt6yPqKo0SOJIBMPuz7Rnu3r/WWbZFPi//o8acclacOzmXdUUEg==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "2.2.0", - "@docusaurus/mdx-loader": "2.2.0", - "@docusaurus/module-type-aliases": "2.2.0", - "@docusaurus/plugin-content-blog": "2.2.0", - "@docusaurus/plugin-content-docs": "2.2.0", - "@docusaurus/plugin-content-pages": "2.2.0", - "@docusaurus/theme-common": "2.2.0", - "@docusaurus/theme-translations": "2.2.0", - "@docusaurus/types": "2.2.0", - "@docusaurus/utils": "2.2.0", - "@docusaurus/utils-common": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.3.1.tgz", + "integrity": "sha512-SelSIDvyttb7ZYHj8vEUhqykhAqfOPKk+uP0z85jH72IMC58e7O8DIlcAeBv+CWsLbNIl9/Hcg71X0jazuxJug==", + "dependencies": { + "@docusaurus/core": "2.3.1", + "@docusaurus/mdx-loader": "2.3.1", + "@docusaurus/module-type-aliases": "2.3.1", + "@docusaurus/plugin-content-blog": "2.3.1", + "@docusaurus/plugin-content-docs": "2.3.1", + "@docusaurus/plugin-content-pages": "2.3.1", + "@docusaurus/theme-common": "2.3.1", + "@docusaurus/theme-translations": "2.3.1", + "@docusaurus/types": "2.3.1", + "@docusaurus/utils": "2.3.1", + "@docusaurus/utils-common": "2.3.1", + "@docusaurus/utils-validation": "2.3.1", "@mdx-js/react": "^1.6.22", "clsx": "^1.2.1", "copy-text-to-clipboard": "^3.0.1", @@ -2718,17 +2759,16 @@ } }, "node_modules/@docusaurus/theme-common": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.2.0.tgz", - "integrity": "sha512-R8BnDjYoN90DCL75gP7qYQfSjyitXuP9TdzgsKDmSFPNyrdE3twtPNa2dIN+h+p/pr+PagfxwWbd6dn722A1Dw==", - "license": "MIT", - "dependencies": { - "@docusaurus/mdx-loader": "2.2.0", - "@docusaurus/module-type-aliases": "2.2.0", - "@docusaurus/plugin-content-blog": "2.2.0", - "@docusaurus/plugin-content-docs": "2.2.0", - "@docusaurus/plugin-content-pages": "2.2.0", - "@docusaurus/utils": "2.2.0", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.3.1.tgz", + "integrity": "sha512-RYmYl2OR2biO+yhmW1aS5FyEvnrItPINa+0U2dMxcHpah8reSCjQ9eJGRmAgkZFchV1+aIQzXOI1K7LCW38O0g==", + "dependencies": { + "@docusaurus/mdx-loader": "2.3.1", + "@docusaurus/module-type-aliases": "2.3.1", + "@docusaurus/plugin-content-blog": "2.3.1", + "@docusaurus/plugin-content-docs": "2.3.1", + "@docusaurus/plugin-content-pages": "2.3.1", + "@docusaurus/utils": "2.3.1", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", @@ -2736,6 +2776,7 @@ "parse-numeric-range": "^1.3.0", "prism-react-renderer": "^1.3.5", "tslib": "^2.4.0", + "use-sync-external-store": "^1.2.0", "utility-types": "^3.10.0" }, "engines": { @@ -2747,23 +2788,22 @@ } }, "node_modules/@docusaurus/theme-search-algolia": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.2.0.tgz", - "integrity": "sha512-2h38B0tqlxgR2FZ9LpAkGrpDWVdXZ7vltfmTdX+4RsDs3A7khiNsmZB+x/x6sA4+G2V2CvrsPMlsYBy5X+cY1w==", - "license": "MIT", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.3.1.tgz", + "integrity": "sha512-JdHaRqRuH1X++g5fEMLnq7OtULSGQdrs9AbhcWRQ428ZB8/HOiaN6mj3hzHvcD3DFgu7koIVtWPQnvnN7iwzHA==", "dependencies": { "@docsearch/react": "^3.1.1", - "@docusaurus/core": "2.2.0", - "@docusaurus/logger": "2.2.0", - "@docusaurus/plugin-content-docs": "2.2.0", - "@docusaurus/theme-common": "2.2.0", - "@docusaurus/theme-translations": "2.2.0", - "@docusaurus/utils": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", + "@docusaurus/core": "2.3.1", + "@docusaurus/logger": "2.3.1", + "@docusaurus/plugin-content-docs": "2.3.1", + "@docusaurus/theme-common": "2.3.1", + "@docusaurus/theme-translations": "2.3.1", + "@docusaurus/utils": "2.3.1", + "@docusaurus/utils-validation": "2.3.1", "algoliasearch": "^4.13.1", "algoliasearch-helper": "^3.10.0", "clsx": "^1.2.1", - "eta": "^1.12.3", + "eta": "^2.0.0", "fs-extra": "^10.1.0", "lodash": "^4.17.21", "tslib": "^2.4.0", @@ -2778,10 +2818,9 @@ } }, "node_modules/@docusaurus/theme-translations": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.2.0.tgz", - "integrity": "sha512-3T140AG11OjJrtKlY4pMZ5BzbGRDjNs2co5hJ6uYJG1bVWlhcaFGqkaZ5lCgKflaNHD7UHBHU9Ec5f69jTdd6w==", - "license": "MIT", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.3.1.tgz", + "integrity": "sha512-BsBZzAewJabVhoGG1Ij2u4pMS3MPW6gZ6sS4pc+Y7czevRpzxoFNJXRtQDVGe7mOpv/MmRmqg4owDK+lcOTCVQ==", "dependencies": { "fs-extra": "^10.1.0", "tslib": "^2.4.0" @@ -2791,10 +2830,9 @@ } }, "node_modules/@docusaurus/types": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.2.0.tgz", - "integrity": "sha512-b6xxyoexfbRNRI8gjblzVOnLr4peCJhGbYGPpJ3LFqpi5nsFfoK4mmDLvWdeah0B7gmJeXabN7nQkFoqeSdmOw==", - "license": "MIT", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.3.1.tgz", + "integrity": "sha512-PREbIRhTaNNY042qmfSE372Jb7djZt+oVTZkoqHJ8eff8vOIc2zqqDqBVc5BhOfpZGPTrE078yy/torUEZy08A==", "dependencies": { "@types/history": "^4.7.11", "@types/react": "*", @@ -2810,23 +2848,14 @@ "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/types/node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, "node_modules/@docusaurus/utils": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.2.0.tgz", - "integrity": "sha512-oNk3cjvx7Tt1Lgh/aeZAmFpGV2pDr5nHKrBVx6hTkzGhrnMuQqLt6UPlQjdYQ3QHXwyF/ZtZMO1D5Pfi0lu7SA==", - "license": "MIT", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.3.1.tgz", + "integrity": "sha512-9WcQROCV0MmrpOQDXDGhtGMd52DHpSFbKLfkyaYumzbTstrbA5pPOtiGtxK1nqUHkiIv8UwexS54p0Vod2I1lg==", "dependencies": { - "@docusaurus/logger": "2.2.0", + "@docusaurus/logger": "2.3.1", "@svgr/webpack": "^6.2.1", + "escape-string-regexp": "^4.0.0", "file-loader": "^6.2.0", "fs-extra": "^10.1.0", "github-slugger": "^1.4.0", @@ -2854,10 +2883,9 @@ } }, "node_modules/@docusaurus/utils-common": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.2.0.tgz", - "integrity": "sha512-qebnerHp+cyovdUseDQyYFvMW1n1nv61zGe5JJfoNQUnjKuApch3IVsz+/lZ9a38pId8kqehC1Ao2bW/s0ntDA==", - "license": "MIT", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.3.1.tgz", + "integrity": "sha512-pVlRpXkdNcxmKNxAaB1ya2hfCEvVsLDp2joeM6K6uv55Oc5nVIqgyYSgSNKZyMdw66NnvMfsu0RBylcwZQKo9A==", "dependencies": { "tslib": "^2.4.0" }, @@ -2874,13 +2902,12 @@ } }, "node_modules/@docusaurus/utils-validation": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.2.0.tgz", - "integrity": "sha512-I1hcsG3yoCkasOL5qQAYAfnmVoLei7apugT6m4crQjmDGxq+UkiRrq55UqmDDyZlac/6ax/JC0p+usZ6W4nVyg==", - "license": "MIT", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.3.1.tgz", + "integrity": "sha512-7n0208IG3k1HVTByMHlZoIDjjOFC8sbViHVXJx0r3Q+3Ezrx+VQ1RZ/zjNn6lT+QBCRCXlnlaoJ8ug4HIVgQ3w==", "dependencies": { - "@docusaurus/logger": "2.2.0", - "@docusaurus/utils": "2.2.0", + "@docusaurus/logger": "2.3.1", + "@docusaurus/utils": "2.3.1", "joi": "^17.6.0", "js-yaml": "^4.1.0", "tslib": "^2.4.0" @@ -2889,11 +2916,144 @@ "node": ">=16.14" } }, + "node_modules/@docusaurus/utils/node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz", + "integrity": "sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@docusaurus/utils/node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz", + "integrity": "sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@docusaurus/utils/node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz", + "integrity": "sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@docusaurus/utils/node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz", + "integrity": "sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@docusaurus/utils/node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz", + "integrity": "sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@docusaurus/utils/node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz", + "integrity": "sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@docusaurus/utils/node_modules/@svgr/babel-preset": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz", + "integrity": "sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==", + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "^6.5.1", + "@svgr/babel-plugin-remove-jsx-attribute": "*", + "@svgr/babel-plugin-remove-jsx-empty-expression": "*", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1", + "@svgr/babel-plugin-svg-dynamic-title": "^6.5.1", + "@svgr/babel-plugin-svg-em-dimensions": "^6.5.1", + "@svgr/babel-plugin-transform-react-native-svg": "^6.5.1", + "@svgr/babel-plugin-transform-svg-component": "^6.5.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@docusaurus/utils/node_modules/@svgr/core": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz", + "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==", + "dependencies": { + "@babel/core": "^7.19.6", + "@svgr/babel-preset": "^6.5.1", + "@svgr/plugin-jsx": "^6.5.1", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, "node_modules/@docusaurus/utils/node_modules/@svgr/hast-util-to-babel-ast": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", - "license": "MIT", "dependencies": { "@babel/types": "^7.20.0", "entities": "^4.4.0" @@ -2910,7 +3070,6 @@ "version": "6.5.1", "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", - "license": "MIT", "dependencies": { "@babel/core": "^7.19.6", "@svgr/babel-preset": "^6.5.1", @@ -2932,7 +3091,6 @@ "version": "6.5.1", "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz", "integrity": "sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==", - "license": "MIT", "dependencies": { "cosmiconfig": "^7.0.1", "deepmerge": "^4.2.2", @@ -2953,7 +3111,6 @@ "version": "6.5.1", "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.1.tgz", "integrity": "sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==", - "license": "MIT", "dependencies": { "@babel/core": "^7.19.6", "@babel/plugin-transform-react-constant-elements": "^7.18.12", @@ -2972,78 +3129,178 @@ "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.0.0" + "node_modules/@docusaurus/utils/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" } }, - "node_modules/@jest/schemas": { - "version": "29.0.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz", - "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==", - "license": "MIT", + "node_modules/@docusaurus/utils/node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "dependencies": { - "@sinclair/typebox": "^0.24.1" + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/@jest/types": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.3.1.tgz", - "integrity": "sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA==", - "license": "MIT", + "node_modules/@docusaurus/utils/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "dependencies": { - "@jest/schemas": "^29.0.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" + "mdn-data": "2.0.14", + "source-map": "^0.6.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8.0.0" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "license": "MIT", + "node_modules/@docusaurus/utils/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" }, - "engines": { - "node": ">=6.0.0" + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" + "node_modules/@docusaurus/utils/node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/@jridgewell/set-array": { + "node_modules/@docusaurus/utils/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/@docusaurus/utils/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/@docusaurus/utils/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "node_modules/@docusaurus/utils/node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@jest/schemas": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", + "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", + "dependencies": { + "@sinclair/typebox": "^0.25.16" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.4.3.tgz", + "integrity": "sha512-bPYfw8V65v17m2Od1cv44FH+SiKW7w2Xu7trhcdTLUmSv85rfKsP+qXSjO4KGJr4dtPSzl/gvslZBXctf1qGEA==", + "dependencies": { + "@jest/schemas": "^29.4.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -3052,23 +3309,33 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" } }, + "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "license": "MIT" + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.17", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" @@ -3077,14 +3344,12 @@ "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", - "license": "MIT" + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, "node_modules/@mdx-js/mdx": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", - "license": "MIT", "dependencies": { "@babel/core": "7.12.9", "@babel/plugin-syntax-jsx": "7.12.1", @@ -3115,7 +3380,6 @@ "version": "7.12.9", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/generator": "^7.12.5", @@ -3142,57 +3406,21 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@mdx-js/mdx/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", - "license": "MIT" - }, - "node_modules/@mdx-js/mdx/node_modules/babel-plugin-apply-mdx-type-prop": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", - "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", - "license": "MIT", + "node_modules/@mdx-js/mdx/node_modules/@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4", - "@mdx-js/util": "1.6.22" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { - "@babel/core": "^7.11.6" - } - }, - "node_modules/@mdx-js/mdx/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "@babel/core": "^7.0.0-0" } }, - "node_modules/@mdx-js/mdx/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "license": "MIT" - }, "node_modules/@mdx-js/mdx/node_modules/semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "license": "ISC", "bin": { "semver": "bin/semver" } @@ -3201,16 +3429,31 @@ "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, + "node_modules/@mdx-js/mdx/node_modules/unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/@mdx-js/react": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", - "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -3223,7 +3466,6 @@ "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", - "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -3233,7 +3475,6 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -3246,7 +3487,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "license": "MIT", "engines": { "node": ">= 8" } @@ -3255,7 +3495,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -3267,41 +3506,81 @@ "node_modules/@polka/url": { "version": "1.0.0-next.21", "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", - "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", - "license": "MIT" + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" + }, + "node_modules/@rollup/plugin-babel": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.0.3.tgz", + "integrity": "sha512-fKImZKppa1A/gX73eg4JGo+8kQr/q1HBQaCGKECZ0v4YBBv3lFqi14+7xyApECzvkLTHCifx+7ntcrvtBIRcpg==", + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@rollup/pluginutils": "^5.0.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + }, + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } }, "node_modules/@sideway/address": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", - "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.0.0" } }, "node_modules/@sideway/formula": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", - "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==", - "license": "BSD-3-Clause" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" }, "node_modules/@sideway/pinpoint": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "license": "BSD-3-Clause" + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" }, "node_modules/@sinclair/typebox": { - "version": "0.24.51", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", - "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", - "license": "MIT" + "version": "0.25.23", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.23.tgz", + "integrity": "sha512-VEB8ygeP42CFLWyAJhN5OklpxUliqdNEUcXb4xZ/CINqtYGTjL5ukluKdKzQ0iWdUxyQ7B0539PAUhHKrCNWSQ==" }, "node_modules/@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "license": "MIT", "engines": { "node": ">=6" } @@ -3310,7 +3589,6 @@ "version": "4.0.7", "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz", "integrity": "sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA==", - "license": "MIT", "dependencies": { "eval": "^0.1.8", "p-map": "^4.0.0", @@ -3321,147 +3599,114 @@ } }, "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz", - "integrity": "sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==", - "license": "MIT", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", "engines": { "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.5.0.tgz", - "integrity": "sha512-8zYdkym7qNyfXpWvu4yq46k41pyNM9SOstoWhKlm+IfdCE1DdnRKeMUPsWIEO/DEkaWxJ8T9esNdG3QwQ93jBA==", - "license": "MIT", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", "engines": { "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.5.0.tgz", - "integrity": "sha512-NFdxMq3xA42Kb1UbzCVxplUc0iqSyM9X8kopImvFnB+uSDdzIHOdbs1op8ofAvVRtbg4oZiyRl3fTYeKcOe9Iw==", - "license": "MIT", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", + "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", "engines": { "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz", - "integrity": "sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==", - "license": "MIT", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", + "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", "engines": { "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz", - "integrity": "sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==", - "license": "MIT", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", + "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", "engines": { "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz", - "integrity": "sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==", - "license": "MIT", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", + "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", "engines": { "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz", - "integrity": "sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==", - "license": "MIT", - "engines": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", + "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", + "engines": { "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz", - "integrity": "sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==", - "license": "MIT", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", + "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/babel-preset": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz", - "integrity": "sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==", - "license": "MIT", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", + "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "^6.5.1", - "@svgr/babel-plugin-remove-jsx-attribute": "*", - "@svgr/babel-plugin-remove-jsx-empty-expression": "*", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1", - "@svgr/babel-plugin-svg-dynamic-title": "^6.5.1", - "@svgr/babel-plugin-svg-em-dimensions": "^6.5.1", - "@svgr/babel-plugin-transform-react-native-svg": "^6.5.1", - "@svgr/babel-plugin-transform-svg-component": "^6.5.1" + "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", + "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", + "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", + "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", + "@svgr/babel-plugin-transform-svg-component": "^5.5.0" }, "engines": { "node": ">=10" @@ -3469,58 +3714,16 @@ "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/core": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz", - "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==", - "license": "MIT", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", + "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", "dependencies": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/plugin-jsx": "^6.5.1", + "@svgr/plugin-jsx": "^5.5.0", "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/core/node_modules/@svgr/hast-util-to-babel-ast": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", - "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.20.0", - "entities": "^4.4.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/core/node_modules/@svgr/plugin-jsx": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", - "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/hast-util-to-babel-ast": "^6.5.1", - "svg-parser": "^2.0.4" + "cosmiconfig": "^7.0.0" }, "engines": { "node": ">=10" @@ -3528,16 +3731,12 @@ "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "^6.0.0" } }, "node_modules/@svgr/hast-util-to-babel-ast": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", - "license": "MIT", "dependencies": { "@babel/types": "^7.12.6" }, @@ -3553,7 +3752,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", - "license": "MIT", "dependencies": { "@babel/core": "^7.12.3", "@svgr/babel-preset": "^5.5.0", @@ -3568,24 +3766,15 @@ "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/@svgr/plugin-jsx/node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", - "license": "MIT", - "engines": { - "node": ">=10" + "node_modules/@svgr/plugin-svgo": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", + "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", + "dependencies": { + "cosmiconfig": "^7.0.0", + "deepmerge": "^4.2.2", + "svgo": "^1.2.2" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-jsx/node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", - "license": "MIT", "engines": { "node": ">=10" }, @@ -3594,24 +3783,20 @@ "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/@svgr/plugin-jsx/node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", - "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", - "license": "MIT", - "engines": { - "node": ">=10" + "node_modules/@svgr/webpack": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", + "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/plugin-transform-react-constant-elements": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@svgr/core": "^5.5.0", + "@svgr/plugin-jsx": "^5.5.0", + "@svgr/plugin-svgo": "^5.5.0", + "loader-utils": "^2.0.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-jsx/node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", - "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", - "license": "MIT", "engines": { "node": ">=10" }, @@ -3620,433 +3805,72 @@ "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/@svgr/plugin-jsx/node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", - "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", - "license": "MIT", - "engines": { - "node": ">=10" + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dependencies": { + "defer-to-connect": "^1.0.1" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-jsx/node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", - "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", - "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "node": ">=6" } }, - "node_modules/@svgr/plugin-jsx/node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", - "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", - "license": "MIT", + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "node": ">=10.13.0" } }, - "node_modules/@svgr/plugin-jsx/node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", - "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" } }, - "node_modules/@svgr/plugin-jsx/node_modules/@svgr/babel-preset": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", - "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", - "license": "MIT", + "node_modules/@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", - "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", - "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", - "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", - "@svgr/babel-plugin-transform-svg-component": "^5.5.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "@types/node": "*" } }, - "node_modules/@svgr/plugin-svgo": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", - "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", - "license": "MIT", + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", "dependencies": { - "cosmiconfig": "^7.0.0", - "deepmerge": "^4.2.2", - "svgo": "^1.2.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "@types/node": "*" } }, - "node_modules/@svgr/plugin-svgo/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "license": "MIT", + "node_modules/@types/connect-history-api-fallback": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "@types/express-serve-static-core": "*", + "@types/node": "*" } }, - "node_modules/@svgr/plugin-svgo/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "license": "MIT", + "node_modules/@types/eslint": { + "version": "8.21.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.21.1.tgz", + "integrity": "sha512-rc9K8ZpVjNcLs8Fp0dkozd5Pt2Apk1glO4Vgz8ix1u6yFByxfqo5Yavpy65o+93TAe24jr7v+eSBtFLvOQtCRQ==", "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT" - }, - "node_modules/@svgr/plugin-svgo/node_modules/css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/dom-serializer/node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/@svgr/plugin-svgo/node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "license": "BSD-2-Clause" - }, - "node_modules/@svgr/plugin-svgo/node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", - "license": "CC0-1.0" - }, - "node_modules/@svgr/plugin-svgo/node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "~1.0.0" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "license": "MIT", - "dependencies": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/@svgr/webpack": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", - "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/plugin-transform-react-constant-elements": "^7.12.1", - "@babel/preset-env": "^7.12.1", - "@babel/preset-react": "^7.12.5", - "@svgr/core": "^5.5.0", - "@svgr/plugin-jsx": "^5.5.0", - "@svgr/plugin-svgo": "^5.5.0", - "loader-utils": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/webpack/node_modules/@svgr/core": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", - "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", - "license": "MIT", - "dependencies": { - "@svgr/plugin-jsx": "^5.5.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "license": "MIT", - "dependencies": { - "defer-to-connect": "^1.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "license": "ISC", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "license": "MIT", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", - "license": "MIT", - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/eslint": { - "version": "8.4.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", - "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" + "@types/estree": "*", + "@types/json-schema": "*" } }, "node_modules/@types/eslint-scope": { "version": "3.7.4", "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "license": "MIT", "dependencies": { "@types/eslint": "*", "@types/estree": "*" @@ -4055,26 +3879,23 @@ "node_modules/@types/estree": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", - "license": "MIT" + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" }, "node_modules/@types/express": { - "version": "4.17.14", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", - "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", - "license": "MIT", + "version": "4.17.17", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", "dependencies": { "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", + "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", "@types/serve-static": "*" } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.31", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", - "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", - "license": "MIT", + "version": "4.17.33", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz", + "integrity": "sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -4085,7 +3906,6 @@ "version": "2.3.4", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", - "license": "MIT", "dependencies": { "@types/unist": "*" } @@ -4093,20 +3913,17 @@ "node_modules/@types/history": { "version": "4.7.11", "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==", - "license": "MIT" + "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" }, "node_modules/@types/html-minifier-terser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "license": "MIT" + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" }, "node_modules/@types/http-proxy": { "version": "1.17.9", "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", - "license": "MIT", "dependencies": { "@types/node": "*" } @@ -4114,14 +3931,12 @@ "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "license": "MIT" + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" } @@ -4130,7 +3945,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" } @@ -4138,14 +3952,12 @@ "node_modules/@types/json-schema": { "version": "7.0.11", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "license": "MIT" + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" }, "node_modules/@types/mdast": { "version": "3.0.10", "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", - "license": "MIT", "dependencies": { "@types/unist": "*" } @@ -4153,62 +3965,52 @@ "node_modules/@types/mime": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", - "license": "MIT" + "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" }, "node_modules/@types/minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "license": "MIT" + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" }, "node_modules/@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", - "license": "MIT" + "version": "18.14.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.0.tgz", + "integrity": "sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==" }, "node_modules/@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "license": "MIT" + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, "node_modules/@types/parse5": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", - "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==", - "license": "MIT" + "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" }, "node_modules/@types/prop-types": { "version": "15.7.5", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "license": "MIT" + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "node_modules/@types/q": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==", - "license": "MIT" + "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==" }, "node_modules/@types/qs": { "version": "6.9.7", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "license": "MIT" + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" }, "node_modules/@types/range-parser": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "license": "MIT" + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, "node_modules/@types/react": { - "version": "18.0.25", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.25.tgz", - "integrity": "sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g==", - "license": "MIT", + "version": "18.0.28", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.28.tgz", + "integrity": "sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -4216,10 +4018,9 @@ } }, "node_modules/@types/react-router": { - "version": "5.1.19", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.19.tgz", - "integrity": "sha512-Fv/5kb2STAEMT3wHzdKQK2z8xKq38EDIGVrutYLmQVVLe+4orDFquU52hQrULnEHinMKv9FSA6lf9+uNT1ITtA==", - "license": "MIT", + "version": "5.1.20", + "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", + "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", "dependencies": { "@types/history": "^4.7.11", "@types/react": "*" @@ -4229,7 +4030,6 @@ "version": "5.0.6", "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.6.tgz", "integrity": "sha512-db1mx37a1EJDf1XeX8jJN7R3PZABmJQXR8r28yUjVMFSjkmnQo6X6pOEEmNl+Tp2gYQOGPdYbFIipBtdElZ3Yg==", - "license": "MIT", "dependencies": { "@types/history": "^4.7.11", "@types/react": "*", @@ -4240,7 +4040,6 @@ "version": "5.3.3", "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "license": "MIT", "dependencies": { "@types/history": "^4.7.11", "@types/react": "*", @@ -4250,14 +4049,12 @@ "node_modules/@types/retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "license": "MIT" + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" }, "node_modules/@types/sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.4.tgz", "integrity": "sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==", - "license": "MIT", "dependencies": { "@types/node": "*" } @@ -4265,14 +4062,12 @@ "node_modules/@types/scheduler": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "license": "MIT" + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, "node_modules/@types/serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "license": "MIT", "dependencies": { "@types/express": "*" } @@ -4281,7 +4076,6 @@ "version": "1.15.0", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", - "license": "MIT", "dependencies": { "@types/mime": "*", "@types/node": "*" @@ -4291,7 +4085,6 @@ "version": "0.3.33", "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "license": "MIT", "dependencies": { "@types/node": "*" } @@ -4299,23 +4092,20 @@ "node_modules/@types/unist": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", - "license": "MIT" + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" }, "node_modules/@types/ws": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", - "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", - "license": "MIT", + "version": "8.5.4", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", + "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "license": "MIT", + "version": "17.0.22", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz", + "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==", "dependencies": { "@types/yargs-parser": "*" } @@ -4323,14 +4113,12 @@ "node_modules/@types/yargs-parser": { "version": "21.0.0", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "license": "MIT" + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" }, "node_modules/@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "license": "MIT", "dependencies": { "@webassemblyjs/helper-numbers": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1" @@ -4339,26 +4127,22 @@ "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "license": "MIT" + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "license": "MIT" + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "license": "MIT" + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "license": "MIT", "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.11.1", "@webassemblyjs/helper-api-error": "1.11.1", @@ -4368,14 +4152,12 @@ "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "license": "MIT" + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -4387,7 +4169,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "license": "MIT", "dependencies": { "@xtuc/ieee754": "^1.2.0" } @@ -4396,7 +4177,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "license": "Apache-2.0", "dependencies": { "@xtuc/long": "4.2.2" } @@ -4404,14 +4184,12 @@ "node_modules/@webassemblyjs/utf8": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "license": "MIT" + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -4427,7 +4205,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1", @@ -4440,7 +4217,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -4452,7 +4228,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-api-error": "1.11.1", @@ -4466,7 +4241,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.11.1", "@xtuc/long": "4.2.2" @@ -4475,20 +4249,17 @@ "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "license": "BSD-3-Clause" + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "license": "Apache-2.0" + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "license": "MIT", "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -4497,11 +4268,29 @@ "node": ">= 0.6" } }, + "node_modules/accepts/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "license": "MIT", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", "bin": { "acorn": "bin/acorn" }, @@ -4513,7 +4302,6 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "license": "MIT", "peerDependencies": { "acorn": "^8" } @@ -4522,16 +4310,14 @@ "version": "8.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/address": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.1.tgz", - "integrity": "sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==", - "license": "MIT", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", "engines": { "node": ">= 10.0.0" } @@ -4540,7 +4326,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "license": "MIT", "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -4553,7 +4338,6 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -4565,42 +4349,75 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/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==" + }, "node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "license": "MIT", "peerDependencies": { "ajv": "^6.9.1" } }, "node_modules/algoliasearch": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.14.2.tgz", - "integrity": "sha512-ngbEQonGEmf8dyEh5f+uOIihv4176dgbuOZspiuhmTTBRBuzWu3KCGHre6uHj5YyuC7pNvQGzB6ZNJyZi0z+Sg==", - "license": "MIT", - "dependencies": { - "@algolia/cache-browser-local-storage": "4.14.2", - "@algolia/cache-common": "4.14.2", - "@algolia/cache-in-memory": "4.14.2", - "@algolia/client-account": "4.14.2", - "@algolia/client-analytics": "4.14.2", - "@algolia/client-common": "4.14.2", - "@algolia/client-personalization": "4.14.2", - "@algolia/client-search": "4.14.2", - "@algolia/logger-common": "4.14.2", - "@algolia/logger-console": "4.14.2", - "@algolia/requester-browser-xhr": "4.14.2", - "@algolia/requester-common": "4.14.2", - "@algolia/requester-node-http": "4.14.2", - "@algolia/transporter": "4.14.2" + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.14.3.tgz", + "integrity": "sha512-GZTEuxzfWbP/vr7ZJfGzIl8fOsoxN916Z6FY2Egc9q2TmZ6hvq5KfAxY89pPW01oW/2HDEKA8d30f9iAH9eXYg==", + "dependencies": { + "@algolia/cache-browser-local-storage": "4.14.3", + "@algolia/cache-common": "4.14.3", + "@algolia/cache-in-memory": "4.14.3", + "@algolia/client-account": "4.14.3", + "@algolia/client-analytics": "4.14.3", + "@algolia/client-common": "4.14.3", + "@algolia/client-personalization": "4.14.3", + "@algolia/client-search": "4.14.3", + "@algolia/logger-common": "4.14.3", + "@algolia/logger-console": "4.14.3", + "@algolia/requester-browser-xhr": "4.14.3", + "@algolia/requester-common": "4.14.3", + "@algolia/requester-node-http": "4.14.3", + "@algolia/transporter": "4.14.3" } }, "node_modules/algoliasearch-helper": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.11.1.tgz", - "integrity": "sha512-mvsPN3eK4E0bZG0/WlWJjeqe/bUD2KOEVOl0GyL/TGXn6wcpZU8NOuztGHCUKXkyg5gq6YzUakVTmnmSSO5Yiw==", - "license": "MIT", + "version": "3.11.3", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.11.3.tgz", + "integrity": "sha512-TbaEvLwiuGygHQIB8y+OsJKQQ40+JKUua5B91X66tMUHyyhbNHvqyr0lqd3wCoyKx7WybyQrC0WJvzoIeh24Aw==", "dependencies": { "@algolia/events": "^4.0.1" }, @@ -4612,11 +4429,28 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "license": "ISC", "dependencies": { "string-width": "^4.1.0" } }, + "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==" + }, + "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==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/ansi-html-community": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", @@ -4624,7 +4458,6 @@ "engines": [ "node >= 0.8.0" ], - "license": "Apache-2.0", "bin": { "ansi-html": "bin/ansi-html" } @@ -4633,7 +4466,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", "engines": { "node": ">=8" } @@ -4642,7 +4474,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -4657,7 +4488,6 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -4669,35 +4499,30 @@ "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==", - "license": "MIT" + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "license": "Python-2.0" + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/array-differ": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "license": "MIT" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "license": "MIT", "engines": { "node": ">=8" } @@ -4706,7 +4531,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -4725,7 +4549,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "license": "MIT", "engines": { "node": ">=8" } @@ -4733,14 +4556,12 @@ "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "license": "MIT" + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, "node_modules/at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "license": "ISC", "engines": { "node": ">= 4.0.0" } @@ -4759,7 +4580,6 @@ "url": "https://tidelift.com/funding/github/npm/autoprefixer" } ], - "license": "MIT", "dependencies": { "browserslist": "^4.21.4", "caniuse-lite": "^1.0.30001426", @@ -4778,11 +4598,21 @@ "postcss": "^8.1.0" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/axios": { "version": "0.25.0", "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", - "license": "MIT", "dependencies": { "follow-redirects": "^1.14.7" } @@ -4791,7 +4621,6 @@ "version": "8.3.0", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "license": "MIT", "dependencies": { "find-cache-dir": "^3.3.1", "loader-utils": "^2.0.0", @@ -4806,29 +4635,31 @@ "webpack": ">=2" } }, - "node_modules/babel-loader/node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "license": "MIT", + "node_modules/babel-plugin-apply-mdx-type-prop": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", + "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" + "@babel/helper-plugin-utils": "7.10.4", + "@mdx-js/util": "1.6.22" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@babel/core": "^7.11.6" } }, + "node_modules/babel-plugin-apply-mdx-type-prop/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, "node_modules/babel-plugin-dynamic-import-node": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "license": "MIT", "dependencies": { "object.assign": "^4.1.0" } @@ -4837,7 +4668,6 @@ "version": "1.6.22", "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "7.10.4" }, @@ -4849,14 +4679,12 @@ "node_modules/babel-plugin-extract-import-names/node_modules/@babel/helper-plugin-utils": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", - "license": "MIT" + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" }, "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "license": "MIT", "dependencies": { "@babel/compat-data": "^7.17.7", "@babel/helper-define-polyfill-provider": "^0.3.3", @@ -4866,11 +4694,18 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/babel-plugin-polyfill-corejs3": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.3.3", "core-js-compat": "^3.25.1" @@ -4883,7 +4718,6 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.3.3" }, @@ -4895,7 +4729,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -4904,26 +4737,22 @@ "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==", - "license": "MIT" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base16": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", - "integrity": "sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==", - "license": "MIT" + "integrity": "sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==" }, "node_modules/batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "license": "MIT" + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "license": "MIT", "engines": { "node": "*" } @@ -4932,7 +4761,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "license": "MIT", "engines": { "node": ">=8" } @@ -4941,7 +4769,6 @@ "version": "1.20.1", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "license": "MIT", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.4", @@ -4965,16 +4792,38 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", "engines": { "node": ">= 0.8" } }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, "node_modules/bonjour-service": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.14.tgz", - "integrity": "sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ==", - "license": "MIT", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.0.tgz", + "integrity": "sha512-LVRinRB3k1/K0XzZ2p58COnWvkQknIY6sf0zF2rpErvcJXpMBttEPQSxK+HEXSS9VmpZlDoDnQWv8ftJT20B0Q==", "dependencies": { "array-flatten": "^2.1.2", "dns-equal": "^1.0.0", @@ -4982,23 +4831,15 @@ "multicast-dns": "^7.2.5" } }, - "node_modules/bonjour-service/node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "license": "MIT" - }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "license": "ISC" + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, "node_modules/boxen": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", - "license": "MIT", "dependencies": { "ansi-align": "^3.0.1", "camelcase": "^6.2.0", @@ -5016,61 +4857,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/boxen/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/boxen/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==", - "license": "MIT" - }, - "node_modules/boxen/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==", - "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/boxen/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5080,7 +4870,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "license": "MIT", "dependencies": { "fill-range": "^7.0.1" }, @@ -5089,9 +4878,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", "funding": [ { "type": "opencollective", @@ -5102,12 +4891,11 @@ "url": "https://tidelift.com/funding/github/npm/browserslist" } ], - "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" }, "bin": { "browserslist": "cli.js" @@ -5119,14 +4907,12 @@ "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "license": "MIT" + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -5135,7 +4921,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "license": "MIT", "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -5153,7 +4938,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "license": "MIT", "engines": { "node": ">=8" } @@ -5162,7 +4946,6 @@ "version": "4.5.1", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "license": "MIT", "engines": { "node": ">=8" } @@ -5171,7 +4954,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "license": "MIT", "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -5184,7 +4966,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "license": "MIT", "engines": { "node": ">=6" } @@ -5193,7 +4974,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "license": "MIT", "dependencies": { "pascal-case": "^3.1.2", "tslib": "^2.0.3" @@ -5203,7 +4983,6 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "license": "MIT", "engines": { "node": ">=10" }, @@ -5215,7 +4994,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "license": "MIT", "engines": { "node": ">= 6" } @@ -5224,7 +5002,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "license": "MIT", "dependencies": { "browserslist": "^4.0.0", "caniuse-lite": "^1.0.0", @@ -5233,9 +5010,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001434", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz", - "integrity": "sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA==", + "version": "1.0.30001457", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001457.tgz", + "integrity": "sha512-SDIV6bgE1aVbK6XyxdURbUE89zY7+k1BBBaOwYwkNCglXlel/E7mELiHC64HQ+W0xSKlqWhV9Wh7iHxUjMs4fA==", "funding": [ { "type": "opencollective", @@ -5245,14 +5022,12 @@ "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" } - ], - "license": "CC-BY-4.0" + ] }, "node_modules/ccount": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -5262,7 +5037,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5278,7 +5052,6 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -5288,7 +5061,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -5298,7 +5070,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -5308,7 +5079,6 @@ "version": "1.0.0-rc.12", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "license": "MIT", "dependencies": { "cheerio-select": "^2.1.0", "dom-serializer": "^2.0.0", @@ -5329,7 +5099,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-select": "^5.1.0", @@ -5342,22 +5111,6 @@ "url": "https://github.com/sponsors/fb55" } }, - "node_modules/cheerio-select/node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -5368,7 +5121,6 @@ "url": "https://paulmillr.com/funding/" } ], - "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -5389,22 +5141,28 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "license": "MIT", "engines": { "node": ">=6.0" } }, "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "license": "MIT" + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } }, "node_modules/clean-css": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", - "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", - "license": "MIT", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", + "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", "dependencies": { "source-map": "~0.6.0" }, @@ -5416,7 +5174,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "license": "MIT", "engines": { "node": ">=6" } @@ -5425,7 +5182,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", - "license": "MIT", "engines": { "node": ">=10" }, @@ -5437,7 +5193,6 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", - "license": "MIT", "dependencies": { "string-width": "^4.2.0" }, @@ -5448,11 +5203,28 @@ "@colors/colors": "1.5.0" } }, + "node_modules/cli-table3/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==" + }, + "node_modules/cli-table3/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==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", @@ -5466,7 +5238,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "license": "MIT", "dependencies": { "mimic-response": "^1.0.0" }, @@ -5478,7 +5249,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", - "license": "MIT", "engines": { "node": ">=6" } @@ -5487,7 +5257,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "license": "MIT", "dependencies": { "@types/q": "^1.5.1", "chalk": "^2.4.1", @@ -5501,7 +5270,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -5513,7 +5281,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -5527,7 +5294,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "license": "MIT", "dependencies": { "color-name": "1.1.3" } @@ -5535,14 +5301,12 @@ "node_modules/coa/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/coa/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -5551,7 +5315,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "license": "MIT", "engines": { "node": ">=4" } @@ -5560,7 +5323,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -5572,7 +5334,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -5582,7 +5343,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -5593,26 +5353,22 @@ "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==", - "license": "MIT" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/colord": { "version": "2.9.3", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "license": "MIT" + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" }, "node_modules/colorette": { "version": "2.0.19", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "license": "MIT" + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" }, "node_modules/combine-promises": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.1.0.tgz", "integrity": "sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==", - "license": "MIT", "engines": { "node": ">=10" } @@ -5621,32 +5377,28 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "license": "MIT", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", "engines": { - "node": ">= 10" + "node": ">= 6" } }, "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "license": "MIT" + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" }, "node_modules/compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "license": "MIT", "dependencies": { "mime-db": ">= 1.43.0 < 2" }, @@ -5654,11 +5406,18 @@ "node": ">= 0.6" } }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "node_modules/compressible/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "license": "MIT", "dependencies": { "accepts": "~1.3.5", "bytes": "3.0.0", @@ -5672,23 +5431,33 @@ "node": ">= 0.8.0" } }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, "node_modules/compression/node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "license": "MIT" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/configstore": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "license": "BSD-2-Clause", "dependencies": { "dot-prop": "^5.2.0", "graceful-fs": "^4.1.2", @@ -5705,7 +5474,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "license": "MIT", "engines": { "node": ">=0.8" } @@ -5713,23 +5481,20 @@ "node_modules/consola": { "version": "2.15.3", "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", - "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", - "license": "MIT" + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" }, "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==", - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "license": "MIT", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "engines": { "node": ">= 0.6" } @@ -5737,14 +5502,12 @@ "node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "license": "MIT" + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "node_modules/cookie": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -5752,14 +5515,12 @@ "node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "license": "MIT" + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "node_modules/copy-text-to-clipboard": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz", "integrity": "sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q==", - "license": "MIT", "engines": { "node": ">=12" }, @@ -5771,7 +5532,6 @@ "version": "11.0.0", "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", - "license": "MIT", "dependencies": { "fast-glob": "^3.2.11", "glob-parent": "^6.0.1", @@ -5791,11 +5551,36 @@ "webpack": "^5.1.0" } }, + "node_modules/copy-webpack-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/copy-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, "node_modules/copy-webpack-plugin/node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -5804,10 +5589,9 @@ } }, "node_modules/copy-webpack-plugin/node_modules/globby": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz", - "integrity": "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==", - "license": "MIT", + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", + "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", "dependencies": { "dir-glob": "^3.0.1", "fast-glob": "^3.2.11", @@ -5822,11 +5606,33 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/copy-webpack-plugin/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==" + }, + "node_modules/copy-webpack-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/copy-webpack-plugin/node_modules/slash": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "license": "MIT", "engines": { "node": ">=12" }, @@ -5835,23 +5641,21 @@ } }, "node_modules/core-js": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.26.1.tgz", - "integrity": "sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA==", + "version": "3.28.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.28.0.tgz", + "integrity": "sha512-GiZn9D4Z/rSYvTeg1ljAIsEqFm0LaN9gVtwDCrKL80zHtS31p9BAjmTxVqTQDMpwlMolJZOFntUG2uwyj7DAqw==", "hasInstallScript": true, - "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" } }, "node_modules/core-js-compat": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz", - "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==", - "license": "MIT", + "version": "3.28.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.28.0.tgz", + "integrity": "sha512-myzPgE7QodMg4nnd3K1TDoES/nADRStM8Gpz0D6nhkwbmwEnE0ZGJgoWsvQ722FR8D7xS0n0LV556RcEicjTyg==", "dependencies": { - "browserslist": "^4.21.4" + "browserslist": "^4.21.5" }, "funding": { "type": "opencollective", @@ -5859,11 +5663,10 @@ } }, "node_modules/core-js-pure": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.26.1.tgz", - "integrity": "sha512-VVXcDpp/xJ21KdULRq/lXdLzQAtX7+37LzpyfFM973il0tWSsDEoyzG38G14AjTpK9VTfiNM9jnFauq/CpaWGQ==", + "version": "3.28.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.28.0.tgz", + "integrity": "sha512-DSOVleA9/v3LNj/vFxAPfUHttKTzrB2RXhAPvR5TPXn4vrra3Z2ssytvRyt8eruJwAfwAiFADEbrjcRdcvPLQQ==", "hasInstallScript": true, - "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" @@ -5872,14 +5675,20 @@ "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "license": "MIT" + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cose-base": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", + "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", + "dependencies": { + "layout-base": "^1.0.0" + } }, "node_modules/cosmiconfig": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "license": "MIT", "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -5891,11 +5700,15 @@ "node": ">=10" } }, + "node_modules/countup.js": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/countup.js/-/countup.js-2.4.2.tgz", + "integrity": "sha512-EExCcu5rd7ffBj65B3CVNuS1HddN1Y4WuTfJEuocJXwZlNnlXZQ4sD9M/Cq32ZS0zR38F9vGMCw/iFcVImrNbw==" + }, "node_modules/cross-fetch": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "license": "MIT", "dependencies": { "node-fetch": "2.6.7" } @@ -5904,7 +5717,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -5918,7 +5730,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "license": "MIT", "engines": { "node": ">=8" } @@ -5927,7 +5738,6 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", - "license": "ISC", "engines": { "node": "^10 || ^12 || >=14" }, @@ -5936,13 +5746,12 @@ } }, "node_modules/css-loader": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.2.tgz", - "integrity": "sha512-oqGbbVcBJkm8QwmnNzrFrWTnudnRZC+1eXikLJl0n4ljcfotgRifpg2a1lKy8jTrc4/d9A/ap1GFq1jDKG7J+Q==", - "license": "MIT", + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.3.tgz", + "integrity": "sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==", "dependencies": { "icss-utils": "^5.1.0", - "postcss": "^8.4.18", + "postcss": "^8.4.19", "postcss-modules-extract-imports": "^3.0.0", "postcss-modules-local-by-default": "^4.0.0", "postcss-modules-scope": "^3.0.0", @@ -5961,26 +5770,10 @@ "webpack": "^5.0.0" } }, - "node_modules/css-loader/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/css-minimizer-webpack-plugin": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.2.tgz", "integrity": "sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA==", - "license": "MIT", "dependencies": { "cssnano": "^5.1.8", "jest-worker": "^29.1.2", @@ -6020,46 +5813,64 @@ } } }, - "node_modules/css-minimizer-webpack-plugin/node_modules/jest-worker": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.3.1.tgz", - "integrity": "sha512-lY4AnnmsEWeiXirAIA0c9SDPbuCBq8IYuDVL8PMm0MZ2PEs2yPvRA/J64QBXuZp7CYKrDM/rmNrc9/i3KJQncw==", - "license": "MIT", + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dependencies": { - "@types/node": "*", - "jest-util": "^29.3.1", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/css-minimizer-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "license": "MIT", + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dependencies": { - "has-flag": "^4.0.0" + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/css-minimizer-webpack-plugin/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==" + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">= 12.13.0" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "license": "BSD-2-Clause", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "dependencies": { "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", "nth-check": "^2.0.1" }, "funding": { @@ -6069,68 +5880,14 @@ "node_modules/css-select-base-adapter": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", - "license": "MIT" - }, - "node_modules/css-select/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/css-select/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/css-select/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/css-select/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" }, "node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "license": "MIT", + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", "dependencies": { - "mdn-data": "2.0.14", + "mdn-data": "2.0.4", "source-map": "^0.6.1" }, "engines": { @@ -6141,7 +5898,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "license": "BSD-2-Clause", "engines": { "node": ">= 6" }, @@ -6153,7 +5909,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "license": "MIT", "bin": { "cssesc": "bin/cssesc" }, @@ -6162,12 +5917,11 @@ } }, "node_modules/cssnano": { - "version": "5.1.14", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.14.tgz", - "integrity": "sha512-Oou7ihiTocbKqi0J1bB+TRJIQX5RMR3JghA8hcWSw9mjBLQ5Y3RWqEDoYG3sRNlAbCIXpqMoZGbq5KDR3vdzgw==", - "license": "MIT", + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", "dependencies": { - "cssnano-preset-default": "^5.2.13", + "cssnano-preset-default": "^5.2.14", "lilconfig": "^2.0.3", "yaml": "^1.10.2" }, @@ -6183,13 +5937,12 @@ } }, "node_modules/cssnano-preset-advanced": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.9.tgz", - "integrity": "sha512-njnh4pp1xCsibJcEHnWZb4EEzni0ePMqPuPNyuWT4Z+YeXmsgqNuTPIljXFEXhxGsWs9183JkXgHxc1TcsahIg==", - "license": "MIT", + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.10.tgz", + "integrity": "sha512-fnYJyCS9jgMU+cmHO1rPSPf9axbQyD7iUhLO5Df6O4G+fKIOMps+ZbU0PdGFejFBBZ3Pftf18fn1eG7MAPUSWQ==", "dependencies": { "autoprefixer": "^10.4.12", - "cssnano-preset-default": "^5.2.13", + "cssnano-preset-default": "^5.2.14", "postcss-discard-unused": "^5.1.0", "postcss-merge-idents": "^5.1.1", "postcss-reduce-idents": "^5.2.0", @@ -6203,22 +5956,21 @@ } }, "node_modules/cssnano-preset-default": { - "version": "5.2.13", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.13.tgz", - "integrity": "sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ==", - "license": "MIT", + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", "dependencies": { "css-declaration-sorter": "^6.3.1", "cssnano-utils": "^3.1.0", "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.0", + "postcss-colormin": "^5.3.1", "postcss-convert-values": "^5.1.3", "postcss-discard-comments": "^5.1.2", "postcss-discard-duplicates": "^5.1.0", "postcss-discard-empty": "^5.1.1", "postcss-discard-overridden": "^5.1.0", "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.3", + "postcss-merge-rules": "^5.1.4", "postcss-minify-font-values": "^5.1.0", "postcss-minify-gradients": "^5.1.1", "postcss-minify-params": "^5.1.4", @@ -6233,7 +5985,7 @@ "postcss-normalize-url": "^5.1.0", "postcss-normalize-whitespace": "^5.1.1", "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.1", + "postcss-reduce-initial": "^5.1.2", "postcss-reduce-transforms": "^5.1.0", "postcss-svgo": "^5.1.0", "postcss-unique-selectors": "^5.1.1" @@ -6249,7 +6001,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "license": "MIT", "engines": { "node": "^10 || ^12 || >=14.0" }, @@ -6261,7 +6012,6 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "license": "MIT", "dependencies": { "css-tree": "^1.1.2" }, @@ -6269,17 +6019,79 @@ "node": ">=8.0.0" } }, + "node_modules/csso/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, "node_modules/csstype": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", - "license": "MIT" + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, + "node_modules/cytoscape": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.23.0.tgz", + "integrity": "sha512-gRZqJj/1kiAVPkrVFvz/GccxsXhF3Qwpptl32gKKypO4IlqnKBjTOu+HbXtEggSGzC5KCaHp3/F7GgENrtsFkA==", + "dependencies": { + "heap": "^0.2.6", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/cytoscape-cose-bilkent": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", + "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", + "dependencies": { + "cose-base": "^1.0.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" + } + }, + "node_modules/cytoscape-fcose": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", + "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", + "dependencies": { + "cose-base": "^2.2.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" + } + }, + "node_modules/cytoscape-fcose/node_modules/cose-base": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz", + "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", + "dependencies": { + "layout-base": "^2.0.0" + } + }, + "node_modules/cytoscape-fcose/node_modules/layout-base": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz", + "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==" }, "node_modules/d3": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/d3/-/d3-7.6.1.tgz", - "integrity": "sha512-txMTdIHFbcpLx+8a0IFhZsbp+PfBBPt8yfbmukZTQFroKuFqIwqswF0qE5JXWefylaAVpSXFoKm3yP+jpNLFLw==", - "license": "ISC", + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.2.tgz", + "integrity": "sha512-WXty7qOGSHb7HR7CfOzwN1Gw04MUOzN8qh9ZUsvwycIMb4DYMpY9xczZ6jUorGtO6bR9BPMPaueIKwiDxu9uiQ==", "dependencies": { "d3-array": "3", "d3-axis": "3", @@ -6317,16 +6129,20 @@ } }, "node_modules/d3-array": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", - "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==", - "license": "BSD-3-Clause" + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.2.tgz", + "integrity": "sha512-yEEyEAbDrF8C6Ob2myOBLjwBLck1Z89jMGFee0oPsn95GqjerpaOA4ch+vc2l0FNFFwMD5N7OCSEN5eAlsUbgQ==", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } }, "node_modules/d3-axis": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", - "license": "ISC", "engines": { "node": ">=12" } @@ -6335,7 +6151,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", - "license": "ISC", "dependencies": { "d3-dispatch": "1 - 3", "d3-drag": "2 - 3", @@ -6347,133 +6162,29 @@ "node": ">=12" } }, - "node_modules/d3-brush/node_modules/d3-color": { + "node_modules/d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "dependencies": { + "d3-path": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", - "license": "ISC", "engines": { "node": ">=12" } }, - "node_modules/d3-brush/node_modules/d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-brush/node_modules/d3-drag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", - "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", - "license": "ISC", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-selection": "3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-brush/node_modules/d3-ease": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-brush/node_modules/d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "license": "ISC", - "dependencies": { - "d3-color": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-brush/node_modules/d3-selection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", - "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-brush/node_modules/d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-brush/node_modules/d3-transition": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", - "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", - "license": "ISC", - "dependencies": { - "d3-color": "1 - 3", - "d3-dispatch": "1 - 3", - "d3-ease": "1 - 3", - "d3-interpolate": "1 - 3", - "d3-timer": "1 - 3" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "d3-selection": "2 - 3" - } - }, - "node_modules/d3-chord": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", - "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", - "license": "ISC", - "dependencies": { - "d3-path": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-chord/node_modules/d3-path": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.0.1.tgz", - "integrity": "sha512-gq6gZom9AFZby0YLduxT1qmrp4xpBA1YZr19OI717WIdKE2OM5ETq5qrHLb301IgxhLwcuxvGZVLeeWc/k1I6w==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-collection": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", - "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==", - "license": "BSD-3-Clause" - }, - "node_modules/d3-color": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", - "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==", - "license": "BSD-3-Clause" - }, "node_modules/d3-contour": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.0.tgz", - "integrity": "sha512-7aQo0QHUTu/Ko3cP9YK9yUTxtoDEiDGwnBHyLxG5M4vqlBkO/uixMRele3nfsfj6UXOcuReVpVXzAboGraYIJw==", - "license": "ISC", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", "dependencies": { "d3-array": "^3.2.0" }, @@ -6481,23 +6192,10 @@ "node": ">=12" } }, - "node_modules/d3-contour/node_modules/d3-array": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.0.tgz", - "integrity": "sha512-3yXFQo0oG3QCxbF06rMPFyGRMGJNS7NvsV1+2joOjbBE+9xvWQ8+GcMJAjRCzw06zQ3/arXeJgbPYcjUCuC+3g==", - "license": "ISC", - "dependencies": { - "internmap": "1 - 2" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/d3-delaunay": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.2.tgz", "integrity": "sha512-IMLNldruDQScrcfT+MWnazhHbDJhcRJyOEBAJfwQnHle1RPh6WDuLvxNArUju2VSMSUuKlY5BGHRJ2cYyoFLQQ==", - "license": "ISC", "dependencies": { "delaunator": "5" }, @@ -6506,72 +6204,29 @@ } }, "node_modules/d3-dispatch": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", - "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==", - "license": "BSD-3-Clause" - }, - "node_modules/d3-drag": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.5.tgz", - "integrity": "sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==", - "license": "BSD-3-Clause", - "dependencies": { - "d3-dispatch": "1", - "d3-selection": "1" - } - }, - "node_modules/d3-dsv": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.2.0.tgz", - "integrity": "sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g==", - "license": "BSD-3-Clause", - "dependencies": { - "commander": "2", - "iconv-lite": "0.4", - "rw": "1" - }, - "bin": { - "csv2json": "bin/dsv2json", - "csv2tsv": "bin/dsv2dsv", - "dsv2dsv": "bin/dsv2dsv", - "dsv2json": "bin/dsv2json", - "json2csv": "bin/json2dsv", - "json2dsv": "bin/json2dsv", - "json2tsv": "bin/json2dsv", - "tsv2csv": "bin/dsv2dsv", - "tsv2json": "bin/dsv2json" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "engines": { + "node": ">=12" } }, - "node_modules/d3-dsv/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "license": "MIT" - }, - "node_modules/d3-ease": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.7.tgz", - "integrity": "sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==", - "license": "BSD-3-Clause" - }, - "node_modules/d3-fetch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", - "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", - "license": "ISC", + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", "dependencies": { - "d3-dsv": "1 - 3" + "d3-dispatch": "1 - 3", + "d3-selection": "3" }, "engines": { "node": ">=12" } }, - "node_modules/d3-fetch/node_modules/d3-dsv": { + "node_modules/d3-dsv": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", - "license": "ISC", "dependencies": { "commander": "7", "iconv-lite": "0.6", @@ -6592,23 +6247,37 @@ "node": ">=12" } }, - "node_modules/d3-fetch/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "license": "MIT", + "node_modules/d3-dsv/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "d3-dsv": "1 - 3" }, "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, "node_modules/d3-force": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", - "license": "ISC", "dependencies": { "d3-dispatch": "1 - 3", "d3-quadtree": "1 - 3", @@ -6618,44 +6287,18 @@ "node": ">=12" } }, - "node_modules/d3-force/node_modules/d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-force/node_modules/d3-quadtree": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", - "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-force/node_modules/d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", - "license": "ISC", + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", "engines": { "node": ">=12" } }, - "node_modules/d3-format": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", - "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==", - "license": "BSD-3-Clause" - }, "node_modules/d3-geo": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.0.1.tgz", - "integrity": "sha512-Wt23xBych5tSy9IYAM1FR2rWIBFWa52B/oF/GYe5zbdHrg08FU8+BuI6X4PvTwPDdqdAdq04fuWJpELtsaEjeA==", - "license": "ISC", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==", "dependencies": { "d3-array": "2.5.0 - 3" }, @@ -6663,62 +6306,53 @@ "node": ">=12" } }, - "node_modules/d3-geo/node_modules/d3-array": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.0.tgz", - "integrity": "sha512-3yXFQo0oG3QCxbF06rMPFyGRMGJNS7NvsV1+2joOjbBE+9xvWQ8+GcMJAjRCzw06zQ3/arXeJgbPYcjUCuC+3g==", - "license": "ISC", - "dependencies": { - "internmap": "1 - 2" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/d3-hierarchy": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", - "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/d3-interpolate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", - "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", - "license": "BSD-3-Clause", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", "dependencies": { - "d3-color": "1" + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" } }, "node_modules/d3-path": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", - "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==", - "license": "BSD-3-Clause" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "engines": { + "node": ">=12" + } }, "node_modules/d3-polygon": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", - "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/d3-quadtree": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.7.tgz", - "integrity": "sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==", - "license": "BSD-3-Clause" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "engines": { + "node": ">=12" + } }, "node_modules/d3-random": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", - "license": "ISC", "engines": { "node": ">=12" } @@ -6727,7 +6361,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", - "license": "ISC", "dependencies": { "d3-array": "2.10.0 - 3", "d3-format": "1 - 3", @@ -6743,7 +6376,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", - "license": "ISC", "dependencies": { "d3-color": "1 - 3", "d3-interpolate": "1 - 3" @@ -6752,74 +6384,29 @@ "node": ">=12" } }, - "node_modules/d3-scale-chromatic/node_modules/d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-scale-chromatic/node_modules/d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "license": "ISC", - "dependencies": { - "d3-color": "1 - 3" - }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", "engines": { "node": ">=12" } }, - "node_modules/d3-scale/node_modules/d3-array": { + "node_modules/d3-shape": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.0.tgz", - "integrity": "sha512-3yXFQo0oG3QCxbF06rMPFyGRMGJNS7NvsV1+2joOjbBE+9xvWQ8+GcMJAjRCzw06zQ3/arXeJgbPYcjUCuC+3g==", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", "dependencies": { - "internmap": "1 - 2" + "d3-path": "^3.1.0" }, "engines": { "node": ">=12" } }, - "node_modules/d3-scale/node_modules/d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-scale/node_modules/d3-format": { + "node_modules/d3-time": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-scale/node_modules/d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "license": "ISC", - "dependencies": { - "d3-color": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-scale/node_modules/d3-time": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.0.0.tgz", - "integrity": "sha512-zmV3lRnlaLI08y9IMRXSDshQb5Nj77smnfpnd2LrBa/2K281Jijactokeak14QacHs/kKq0AQ121nidNYlarbQ==", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", "dependencies": { "d3-array": "2 - 3" }, @@ -6827,11 +6414,10 @@ "node": ">=12" } }, - "node_modules/d3-scale/node_modules/d3-time-format": { + "node_modules/d3-time-format": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", - "license": "ISC", "dependencies": { "d3-time": "1 - 3" }, @@ -6839,79 +6425,36 @@ "node": ">=12" } }, - "node_modules/d3-selection": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz", - "integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==", - "license": "BSD-3-Clause" - }, - "node_modules/d3-shape": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.1.0.tgz", - "integrity": "sha512-tGDh1Muf8kWjEDT/LswZJ8WF85yDZLvVJpYU9Nq+8+yW1Z5enxrmXOhTArlkaElU+CTn0OTVNli+/i+HP45QEQ==", - "license": "ISC", - "dependencies": { - "d3-path": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-shape/node_modules/d3-path": { + "node_modules/d3-timer": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.0.1.tgz", - "integrity": "sha512-gq6gZom9AFZby0YLduxT1qmrp4xpBA1YZr19OI717WIdKE2OM5ETq5qrHLb301IgxhLwcuxvGZVLeeWc/k1I6w==", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", "engines": { "node": ">=12" } }, - "node_modules/d3-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", - "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==", - "license": "BSD-3-Clause" - }, - "node_modules/d3-time-format": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz", - "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==", - "license": "BSD-3-Clause", - "dependencies": { - "d3-time": "1" - } - }, - "node_modules/d3-timer": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", - "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==", - "license": "BSD-3-Clause" - }, "node_modules/d3-transition": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.3.2.tgz", - "integrity": "sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==", - "license": "BSD-3-Clause", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", "dependencies": { - "d3-color": "1", - "d3-dispatch": "1", - "d3-ease": "1", - "d3-interpolate": "1", - "d3-selection": "^1.1.0", - "d3-timer": "1" + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" } }, - "node_modules/d3-voronoi": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.4.tgz", - "integrity": "sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==", - "license": "BSD-3-Clause" - }, "node_modules/d3-zoom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", - "license": "ISC", "dependencies": { "d3-dispatch": "1 - 3", "d3-drag": "2 - 3", @@ -6923,14733 +6466,1444 @@ "node": ">=12" } }, - "node_modules/d3-zoom/node_modules/d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-zoom/node_modules/d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", - "license": "ISC", - "engines": { - "node": ">=12" + "node_modules/dagre-d3-es": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.8.tgz", + "integrity": "sha512-eykdoYQ4FwCJinEYS0gPL2f2w+BPbSLvnQSJ3Ye1vAoPjdkq6xIMKBv+UkICd3qZE26wBKIn3p+6n0QC7R1LyA==", + "dependencies": { + "d3": "^7.8.2", + "lodash-es": "^4.17.21" } }, - "node_modules/d3-zoom/node_modules/d3-drag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", - "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", - "license": "ISC", + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { - "d3-dispatch": "1 - 3", - "d3-selection": "3" + "ms": "2.1.2" }, "engines": { - "node": ">=12" - } - }, - "node_modules/d3-zoom/node_modules/d3-ease": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=12" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/d3-zoom/node_modules/d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "license": "ISC", + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", "dependencies": { - "d3-color": "1 - 3" + "mimic-response": "^1.0.0" }, "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/d3-zoom/node_modules/d3-selection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", - "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", - "license": "ISC", + "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==", "engines": { - "node": ">=12" + "node": ">=4.0.0" } }, - "node_modules/d3-zoom/node_modules/d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", - "license": "ISC", + "node_modules/deepmerge": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", + "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==", "engines": { - "node": ">=12" + "node": ">=0.10.0" } }, - "node_modules/d3-zoom/node_modules/d3-transition": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", - "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", - "license": "ISC", + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "dependencies": { - "d3-color": "1 - 3", - "d3-dispatch": "1 - 3", - "d3-ease": "1 - 3", - "d3-interpolate": "1 - 3", - "d3-timer": "1 - 3" + "execa": "^5.0.0" }, "engines": { - "node": ">=12" - }, - "peerDependencies": { - "d3-selection": "2 - 3" + "node": ">= 10" } }, - "node_modules/d3/node_modules/d3-array": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.0.tgz", - "integrity": "sha512-3yXFQo0oG3QCxbF06rMPFyGRMGJNS7NvsV1+2joOjbBE+9xvWQ8+GcMJAjRCzw06zQ3/arXeJgbPYcjUCuC+3g==", - "license": "ISC", + "node_modules/default-gateway/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dependencies": { - "internmap": "1 - 2" + "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": ">=12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/d3/node_modules/d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", - "license": "ISC", + "node_modules/default-gateway/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==", "engines": { - "node": ">=12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/d3/node_modules/d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", - "license": "ISC", + "node_modules/default-gateway/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==", "engines": { - "node": ">=12" + "node": ">=10.17.0" } }, - "node_modules/d3/node_modules/d3-drag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", - "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", - "license": "ISC", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-selection": "3" - }, + "node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/d3/node_modules/d3-dsv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", - "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", - "license": "ISC", + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "dependencies": { - "commander": "7", - "iconv-lite": "0.6", - "rw": "1" - }, - "bin": { - "csv2json": "bin/dsv2json.js", - "csv2tsv": "bin/dsv2dsv.js", - "dsv2dsv": "bin/dsv2dsv.js", - "dsv2json": "bin/dsv2json.js", - "json2csv": "bin/json2dsv.js", - "json2dsv": "bin/json2dsv.js", - "json2tsv": "bin/json2dsv.js", - "tsv2csv": "bin/dsv2dsv.js", - "tsv2json": "bin/dsv2json.js" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/d3/node_modules/d3-ease": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", - "license": "BSD-3-Clause", + "node_modules/del": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, "engines": { - "node": ">=12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/d3/node_modules/d3-format": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", - "license": "ISC", - "engines": { - "node": ">=12" + "node_modules/delaunator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", + "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", + "dependencies": { + "robust-predicates": "^3.0.0" } }, - "node_modules/d3/node_modules/d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "license": "ISC", - "dependencies": { - "d3-color": "1 - 3" - }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "engines": { - "node": ">=12" + "node": ">= 0.8" } }, - "node_modules/d3/node_modules/d3-path": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.0.1.tgz", - "integrity": "sha512-gq6gZom9AFZby0YLduxT1qmrp4xpBA1YZr19OI717WIdKE2OM5ETq5qrHLb301IgxhLwcuxvGZVLeeWc/k1I6w==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3/node_modules/d3-quadtree": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", - "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", - "license": "ISC", + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "engines": { - "node": ">=12" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/d3/node_modules/d3-selection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", - "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", - "license": "ISC", - "engines": { - "node": ">=12" + "node_modules/detab": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", + "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", + "dependencies": { + "repeat-string": "^1.5.4" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/d3/node_modules/d3-time": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.0.0.tgz", - "integrity": "sha512-zmV3lRnlaLI08y9IMRXSDshQb5Nj77smnfpnd2LrBa/2K281Jijactokeak14QacHs/kKq0AQ121nidNYlarbQ==", - "license": "ISC", + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" + }, + "node_modules/detect-port": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", + "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", "dependencies": { - "d3-array": "2 - 3" + "address": "^1.0.1", + "debug": "4" }, - "engines": { - "node": ">=12" + "bin": { + "detect": "bin/detect-port.js", + "detect-port": "bin/detect-port.js" } }, - "node_modules/d3/node_modules/d3-time-format": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", - "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", - "license": "ISC", + "node_modules/detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", "dependencies": { - "d3-time": "1 - 3" + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "bin": { + "detect": "bin/detect-port", + "detect-port": "bin/detect-port" }, "engines": { - "node": ">=12" + "node": ">= 4.2.1" } }, - "node_modules/d3/node_modules/d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", - "license": "ISC", - "engines": { - "node": ">=12" + "node_modules/detect-port-alt/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/d3/node_modules/d3-transition": { + "node_modules/detect-port-alt/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/dir-glob": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", - "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", - "license": "ISC", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dependencies": { - "d3-color": "1 - 3", - "d3-dispatch": "1 - 3", - "d3-ease": "1 - 3", - "d3-interpolate": "1 - 3", - "d3-timer": "1 - 3" + "path-type": "^4.0.0" }, "engines": { - "node": ">=12" - }, - "peerDependencies": { - "d3-selection": "2 - 3" + "node": ">=8" } }, - "node_modules/d3/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "license": "MIT", + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" + }, + "node_modules/dns-packet": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", + "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "@leichtgewicht/ip-codec": "^2.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/dagre": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/dagre/-/dagre-0.8.5.tgz", - "integrity": "sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==", - "license": "MIT", - "dependencies": { - "graphlib": "^2.1.8", - "lodash": "^4.17.15" - } - }, - "node_modules/dagre-d3": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/dagre-d3/-/dagre-d3-0.6.4.tgz", - "integrity": "sha512-e/6jXeCP7/ptlAM48clmX4xTZc5Ek6T6kagS7Oz2HrYSdqcLZFLqpAfh7ldbZRFfxCZVyh61NEPR08UQRVxJzQ==", - "license": "MIT", - "dependencies": { - "d3": "^5.14", - "dagre": "^0.8.5", - "graphlib": "^2.1.8", - "lodash": "^4.17.15" - } - }, - "node_modules/dagre-d3/node_modules/d3": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/d3/-/d3-5.16.0.tgz", - "integrity": "sha512-4PL5hHaHwX4m7Zr1UapXW23apo6pexCgdetdJ5kTmADpG/7T9Gkxw0M0tf/pjoB63ezCCm0u5UaFYy2aMt0Mcw==", - "license": "BSD-3-Clause", - "dependencies": { - "d3-array": "1", - "d3-axis": "1", - "d3-brush": "1", - "d3-chord": "1", - "d3-collection": "1", - "d3-color": "1", - "d3-contour": "1", - "d3-dispatch": "1", - "d3-drag": "1", - "d3-dsv": "1", - "d3-ease": "1", - "d3-fetch": "1", - "d3-force": "1", - "d3-format": "1", - "d3-geo": "1", - "d3-hierarchy": "1", - "d3-interpolate": "1", - "d3-path": "1", - "d3-polygon": "1", - "d3-quadtree": "1", - "d3-random": "1", - "d3-scale": "2", - "d3-scale-chromatic": "1", - "d3-selection": "1", - "d3-shape": "1", - "d3-time": "1", - "d3-time-format": "2", - "d3-timer": "1", - "d3-transition": "1", - "d3-voronoi": "1", - "d3-zoom": "1" - } - }, - "node_modules/dagre-d3/node_modules/d3-axis": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.12.tgz", - "integrity": "sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ==", - "license": "BSD-3-Clause" - }, - "node_modules/dagre-d3/node_modules/d3-brush": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.1.6.tgz", - "integrity": "sha512-7RW+w7HfMCPyZLifTz/UnJmI5kdkXtpCbombUSs8xniAyo0vIbrDzDwUJB6eJOgl9u5DQOt2TQlYumxzD1SvYA==", - "license": "BSD-3-Clause", + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", "dependencies": { - "d3-dispatch": "1", - "d3-drag": "1", - "d3-interpolate": "1", - "d3-selection": "1", - "d3-transition": "1" + "utila": "~0.4" } }, - "node_modules/dagre-d3/node_modules/d3-chord": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.6.tgz", - "integrity": "sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA==", - "license": "BSD-3-Clause", + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dependencies": { - "d3-array": "1", - "d3-path": "1" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/dagre-d3/node_modules/d3-contour": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-1.3.2.tgz", - "integrity": "sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==", - "license": "BSD-3-Clause", + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dependencies": { - "d3-array": "^1.1.1" + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/dagre-d3/node_modules/d3-fetch": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-1.2.0.tgz", - "integrity": "sha512-yC78NBVcd2zFAyR/HnUiBS7Lf6inSCoWcSxFfw8FYL7ydiqe80SazNwoffcqOfs95XaLo7yebsmQqDKSsXUtvA==", - "license": "BSD-3-Clause", + "node_modules/dompurify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.3.tgz", + "integrity": "sha512-q6QaLcakcRjebxjg8/+NP+h0rPfatOgOzc46Fst9VAA3jF2ApfKBNKMzdP4DYTqtUMXSCd5pRS/8Po/OmoCHZQ==" + }, + "node_modules/domutils": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", + "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", "dependencies": { - "d3-dsv": "1" + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.1" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/dagre-d3/node_modules/d3-force": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.2.1.tgz", - "integrity": "sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==", - "license": "BSD-3-Clause", + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", "dependencies": { - "d3-collection": "1", - "d3-dispatch": "1", - "d3-quadtree": "1", - "d3-timer": "1" + "no-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "node_modules/dagre-d3/node_modules/d3-geo": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.12.1.tgz", - "integrity": "sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==", - "license": "BSD-3-Clause", + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dependencies": { - "d3-array": "1" + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/dagre-d3/node_modules/d3-hierarchy": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz", - "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==", - "license": "BSD-3-Clause" + "node_modules/dot-prop/node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "engines": { + "node": ">=8" + } }, - "node_modules/dagre-d3/node_modules/d3-polygon": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.6.tgz", - "integrity": "sha512-k+RF7WvI08PC8reEoXa/w2nSg5AUMTi+peBD9cmFc+0ixHfbs4QmxxkarVal1IkVkgxVuk9JSHhJURHiyHKAuQ==", - "license": "BSD-3-Clause" + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" }, - "node_modules/dagre-d3/node_modules/d3-random": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.2.tgz", - "integrity": "sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ==", - "license": "BSD-3-Clause" + "node_modules/duplexer3": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" }, - "node_modules/dagre-d3/node_modules/d3-scale": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.2.2.tgz", - "integrity": "sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==", - "license": "BSD-3-Clause", - "dependencies": { - "d3-array": "^1.2.0", - "d3-collection": "1", - "d3-format": "1", - "d3-interpolate": "1", - "d3-time": "1", - "d3-time-format": "2" - } + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, - "node_modules/dagre-d3/node_modules/d3-scale-chromatic": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz", - "integrity": "sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==", - "license": "BSD-3-Clause", - "dependencies": { - "d3-color": "1", - "d3-interpolate": "1" + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.305", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.305.tgz", + "integrity": "sha512-WETy6tG0CT5gm1O+xCbyapWNsCcmIvrn4NHViIGYo2AT8FV2qUCXdaB+WqYxSv/vS5mFqhBYnfZAAkVArjBmUg==" + }, + "node_modules/elkjs": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.8.2.tgz", + "integrity": "sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==" + }, + "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==" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "engines": { + "node": ">= 4" } }, - "node_modules/dagre-d3/node_modules/d3-shape": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", - "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", - "license": "BSD-3-Clause", - "dependencies": { - "d3-path": "1" + "node_modules/emoticon": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz", + "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/dagre-d3/node_modules/d3-zoom": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.8.3.tgz", - "integrity": "sha512-VoLXTK4wvy1a0JpH2Il+F2CiOhVu7VRXWF5M/LroMIh3/zBAC3WAt7QoIvPibOavVo20hN6/37vwAsdBejLyKQ==", - "license": "BSD-3-Clause", - "dependencies": { - "d3-dispatch": "1", - "d3-drag": "1", - "d3-interpolate": "1", - "d3-selection": "1", - "d3-transition": "1" + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" } }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dependencies": { - "ms": "2.0.0" + "once": "^1.4.0" } }, - "node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "license": "MIT", + "node_modules/enhanced-resolve": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", + "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", "dependencies": { - "mimic-response": "^1.0.0" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" }, "engines": { - "node": ">=4" + "node": ">=10.13.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==", - "license": "MIT", + "node_modules/entities": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", + "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", "engines": { - "node": ">=4.0.0" + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" } }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "license": "BSD-2-Clause", + "node_modules/es-abstract": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", + "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", "dependencies": { - "execa": "^5.0.0" + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.4", + "is-array-buffer": "^3.0.1", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" }, "engines": { - "node": ">= 10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/default-gateway/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "license": "MIT", + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" + }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", "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" + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": ">= 0.4" } }, - "node_modules/default-gateway/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==", - "license": "MIT", + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/default-gateway/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==", - "license": "Apache-2.0", + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "engines": { - "node": ">=10.17.0" + "node": ">=6" } }, - "node_modules/defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "license": "MIT" - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "license": "MIT", + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", "engines": { "node": ">=8" } }, - "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "license": "MIT", - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "license": "MIT", + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" }, "engines": { - "node": ">=10" + "node": ">=8.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=4" } }, - "node_modules/delaunator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", - "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", - "license": "ISC", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dependencies": { - "robust-predicates": "^3.0.0" + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" } }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "engines": { - "node": ">= 0.8" + "node": ">=4.0" } }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "license": "MIT", + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=4.0" } }, - "node_modules/detab": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", - "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", - "license": "MIT", - "dependencies": { - "repeat-string": "^1.5.4" + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eta": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eta/-/eta-2.0.0.tgz", + "integrity": "sha512-NqE7S2VmVwgMS8yBxsH4VgNQjNjLq1gfGU0u9I6Cjh468nPRMoDfGdK9n1p/3Dvsw3ebklDkZsFAnKJ9sefjBA==", + "engines": { + "node": ">=6.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/eta-dev/eta?sponsor=1" } }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "license": "MIT" + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } }, - "node_modules/detect-port": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", - "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", - "license": "MIT", + "node_modules/eval": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", + "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", "dependencies": { - "address": "^1.0.1", - "debug": "4" + "@types/node": "*", + "require-like": ">= 0.1.1" }, - "bin": { - "detect": "bin/detect-port.js", - "detect-port": "bin/detect-port.js" + "engines": { + "node": ">= 0.8" } }, - "node_modules/detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "license": "MIT", - "dependencies": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" - }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "engines": { - "node": ">= 4.2.1" + "node": ">=0.8.x" } }, - "node_modules/detect-port/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "license": "MIT", + "node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", "dependencies": { - "ms": "2.1.2" + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" }, "engines": { - "node": ">=6.0" + "node": ">=10" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/detect-port/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "license": "MIT" - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "license": "MIT", + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "dependencies": { - "path-type": "^4.0.0" + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "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" }, "engines": { - "node": ">=8" + "node": ">= 0.10.0" } }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "license": "MIT" + "node_modules/express/node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, - "node_modules/dns-packet": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", - "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", - "license": "MIT", + "node_modules/express/node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" + "safe-buffer": "5.2.1" }, "engines": { - "node": ">=6" + "node": ">= 0.6" } }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "license": "MIT", + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "utila": "~0.4" + "ms": "2.0.0" } }, - "node_modules/dom-serializer": { + "node_modules/express/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/express/node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/express/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" + "is-extendable": "^0.1.0" }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" + "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==" }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "license": "BSD-2-Clause", + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "dependencies": { - "domelementtype": "^2.3.0" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" }, "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" + "node": ">=8.6.0" } }, - "node_modules/dompurify": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.0.tgz", - "integrity": "sha512-Be9tbQMZds4a3C6xTmz68NlMfeONA//4dOavl/1rNw50E+/QO0KVpbcU0PcaW0nsQxurXls9ZocqFxk8R2mWEA==", - "license": "(MPL-2.0 OR Apache-2.0)" + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, - "node_modules/domutils": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", - "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", - "license": "BSD-2-Clause", + "node_modules/fast-url-parser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", + "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.1" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" + "punycode": "^1.3.2" } }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "license": "MIT", + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "reusify": "^1.0.4" } }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "license": "MIT", + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dependencies": { - "is-obj": "^2.0.0" + "websocket-driver": ">=0.5.1" }, "engines": { - "node": ">=8" + "node": ">=0.8.0" } }, - "node_modules/dot-prop/node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "license": "MIT", - "engines": { - "node": ">=8" + "node_modules/fbemitter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", + "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", + "dependencies": { + "fbjs": "^3.0.0" } }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "license": "MIT" - }, - "node_modules/duplexer3": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", - "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", - "license": "BSD-3-Clause" - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "license": "MIT" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", - "license": "ISC" - }, - "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==", - "license": "MIT" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/emoticon": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz", - "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/fbjs": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.4.tgz", + "integrity": "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==", + "dependencies": { + "cross-fetch": "^3.1.5", + "fbjs-css-vars": "^1.0.0", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.30" } }, - "node_modules/encodeurl": { + "node_modules/fbjs-css-vars": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" }, - "node_modules/enhanced-resolve": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.11.0.tgz", - "integrity": "sha512-0Gcraf7gAJSQoPg+bTSXNhuzAYtXqLc4C011vb8S3B8XUSEkGYNBk20c68X9291VF4vvsCD8SPkr6Mza+DwU+g==", - "license": "MIT", + "node_modules/feed": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", + "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", "dependencies": { - "graceful-fs": "^4.2.9", - "tapable": "^2.2.0" + "xml-js": "^1.6.11" }, "engines": { - "node": ">=10.13.0" + "node": ">=0.4.0" } }, - "node_modules/entities": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", - "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", - "license": "BSD-2-Clause", + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, "engines": { - "node": ">=0.12" + "node": ">= 10.13.0" }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/es-abstract": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", - "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", - "license": "MIT", + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">= 0.4" + "node": ">= 10.13.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "license": "MIT" - }, - "node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "license": "MIT" + "node_modules/filesize": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", + "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", + "engines": { + "node": ">= 0.4.0" + } }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "license": "MIT", + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "to-regex-range": "^5.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "license": "MIT", + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "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" + }, "engines": { - "node": ">=6" + "node": ">= 0.8" } }, - "node_modules/escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "license": "MIT", - "engines": { - "node": ">=8" + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "license": "MIT", + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "license": "BSD-2-Clause", + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "license": "BSD-2-Clause", + "node_modules/flux": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.3.tgz", + "integrity": "sha512-yKAbrp7JhZhj6uiT1FTuVMlIAT1J4jqEyBpFApi1kxpGZCvacMVc/t1pMQyotqHhAgvoE3bNvAykhCo2CLjnYw==", "dependencies": { - "estraverse": "^5.2.0" + "fbemitter": "^3.0.0", + "fbjs": "^3.0.1" }, - "engines": { - "node": ">=4.0" + "peerDependencies": { + "react": "^15.0.2 || ^16.0.0 || ^17.0.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "license": "BSD-2-Clause", + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], "engines": { "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eta": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/eta/-/eta-1.12.3.tgz", - "integrity": "sha512-qHixwbDLtekO/d51Yr4glcaUJCIjGVJyTzuqV4GPlgZo1YpgOKG+avQynErZIYrfM6JIJdtiG2Kox8tbb+DoGg==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" }, - "funding": { - "url": "https://github.com/eta-dev/eta?sponsor=1" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "node_modules/eval": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", - "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dependencies": { - "@types/node": "*", - "require-like": ">= 0.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "license": "MIT" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "license": "MIT", - "engines": { - "node": ">=0.8.x" + "is-callable": "^1.1.3" } }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "license": "MIT", + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", + "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">=10", + "yarn": ">=1.0.0" }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "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" + "peerDependencies": { + "eslint": ">= 6", + "typescript": ">= 2.7", + "vue-template-compiler": "*", + "webpack": ">= 4" }, - "engines": { - "node": ">= 0.10.0" + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } } }, - "node_modules/express/node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "license": "MIT", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", "dependencies": { - "safe-buffer": "5.2.1" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" }, "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "license": "MIT" - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "license": "MIT" - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "license": "MIT", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dependencies": { - "is-extendable": "^0.1.0" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/fast-clone": { - "version": "1.5.13", - "resolved": "https://registry.npmjs.org/fast-clone/-/fast-clone-1.5.13.tgz", - "integrity": "sha512-0ez7coyFBQFjZtId+RJqJ+EQs61w9xARfqjqK0AD9vIUkSxWD4HvPt80+5evebZ1tTnv1GYKrPTipx7kOW5ipA==", - "license": "MIT" - }, - "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==", - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "license": "MIT", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" }, "engines": { - "node": ">=8.6.0" + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "license": "MIT" - }, - "node_modules/fast-url-parser": { + "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", - "license": "MIT", - "dependencies": { - "punycode": "^1.3.2" - } - }, - "node_modules/fast-url-parser/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "license": "Apache-2.0", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fbemitter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", - "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", - "license": "BSD-3-Clause", - "dependencies": { - "fbjs": "^3.0.0" - } - }, - "node_modules/fbjs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.4.tgz", - "integrity": "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==", - "license": "MIT", - "dependencies": { - "cross-fetch": "^3.1.5", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.30" - } - }, - "node_modules/fbjs-css-vars": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==", - "license": "MIT" - }, - "node_modules/feed": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", - "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", - "license": "MIT", - "dependencies": { - "xml-js": "^1.6.11" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/filesize": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", - "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", - "license": "BSD-3-Clause", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "license": "MIT", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flux": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.3.tgz", - "integrity": "sha512-yKAbrp7JhZhj6uiT1FTuVMlIAT1J4jqEyBpFApi1kxpGZCvacMVc/t1pMQyotqHhAgvoE3bNvAykhCo2CLjnYw==", - "license": "BSD-3-Clause", - "dependencies": { - "fbemitter": "^3.0.0", - "fbjs": "^3.0.1" - }, - "peerDependencies": { - "react": "^15.0.2 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", - "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "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 - } - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "license": "MIT", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "license": "MIT", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", - "license": "Unlicense" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "license": "MIT" - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "license": "ISC" - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/github-slugger": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", - "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==", - "license": "ISC" - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "license": "BSD-2-Clause" - }, - "node_modules/global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "license": "MIT", - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/global-dirs/node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "license": "MIT", - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "license": "MIT", - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/got/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "license": "ISC" - }, - "node_modules/graphlib": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", - "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.15" - } - }, - "node_modules/gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "license": "MIT", - "dependencies": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/gray-matter/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/gray-matter/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "license": "MIT", - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "license": "MIT" - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/hast-to-hyperscript": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", - "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.3", - "comma-separated-tokens": "^1.0.0", - "property-information": "^5.3.0", - "space-separated-tokens": "^1.0.0", - "style-to-object": "^0.3.0", - "unist-util-is": "^4.0.0", - "web-namespaces": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", - "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", - "license": "MIT", - "dependencies": { - "@types/parse5": "^5.0.0", - "hastscript": "^6.0.0", - "property-information": "^5.0.0", - "vfile": "^4.0.0", - "vfile-location": "^3.2.0", - "web-namespaces": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-parse-selector": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", - "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", - "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", - "license": "MIT", - "dependencies": { - "@types/hast": "^2.0.0", - "hast-util-from-parse5": "^6.0.0", - "hast-util-to-parse5": "^6.0.0", - "html-void-elements": "^1.0.0", - "parse5": "^6.0.0", - "unist-util-position": "^3.0.0", - "vfile": "^4.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "license": "MIT" - }, - "node_modules/hast-util-to-parse5": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", - "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", - "license": "MIT", - "dependencies": { - "hast-to-hyperscript": "^9.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hastscript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", - "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", - "license": "MIT", - "dependencies": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "license": "BSD-3-Clause", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-entities": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", - "license": "MIT" - }, - "node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "license": "MIT", - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/html-minifier-terser/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/html-tags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", - "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/html-void-elements": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", - "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/html-webpack-plugin": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", - "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", - "license": "MIT", - "dependencies": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "webpack": "^5.20.0" - } - }, - "node_modules/htmlparser2": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", - "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "entities": "^4.3.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "license": "BSD-2-Clause" - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "license": "MIT" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "license": "MIT" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "license": "MIT", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "license": "MIT", - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/image-size": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", - "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", - "license": "MIT", - "dependencies": { - "queue": "6.0.2" - }, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/immer": { - "version": "9.0.16", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.16.tgz", - "integrity": "sha512-qenGE7CstVm1NrHQbMh8YaSzTZTFNP3zPqr3YU0S0UY441j4bJTg4A2Hh5KAhwgaiU6ZZ1Ar6y/2f4TblnMReQ==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/infima": { - "version": "0.2.0-alpha.42", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.42.tgz", - "integrity": "sha512-ift8OXNbQQwtbIt6z16KnSWP7uJ/SysSMFI4F87MNRTicypfl4Pv3E2OGVv6N3nSZFJvA8imYulCBS64iyHYww==", - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "license": "ISC" - }, - "node_modules/inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==", - "license": "MIT" - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/internmap": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", - "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "license": "MIT", - "dependencies": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "license": "MIT" - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "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", - "engines": { - "node": ">=4" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "license": "MIT", - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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==", - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "license": "MIT", - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "license": "MIT" - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-whitespace-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", - "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-word-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", - "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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==", - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", - "license": "MIT" - }, - "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-util": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.3.1.tgz", - "integrity": "sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ==", - "license": "MIT", - "dependencies": { - "@jest/types": "^29.3.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-util/node_modules/ci-info": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.6.2.tgz", - "integrity": "sha512-lVZdhvbEudris15CLytp2u6Y0p5EKfztae9Fqa189MfNmln9F33XuH69v5fvNfiRN5/0eAUz2yJL3mo+nhaRKg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/joi": { - "version": "17.7.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.7.0.tgz", - "integrity": "sha512-1/ugc8djfn93rTE3WRKdCzGGt/EtiYKxITMO4Wiv6q5JL1gl9ePt4kBsl1S499nbosspfctIQTpYIhSmHA3WAg==", - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.0", - "@sideway/pinpoint": "^2.0.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.0" - } - }, - "node_modules/khroma": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz", - "integrity": "sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==" - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/klona": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "license": "MIT", - "dependencies": { - "package-json": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/lilconfig": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", - "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "license": "MIT" - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "license": "MIT", - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" - }, - "node_modules/lodash.curry": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", - "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==", - "license": "MIT" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "license": "MIT" - }, - "node_modules/lodash.flow": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", - "integrity": "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==", - "license": "MIT" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "license": "MIT" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "license": "MIT" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/markdown-escapes": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", - "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", - "license": "MIT", - "dependencies": { - "unist-util-remove": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-definitions": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", - "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", - "license": "MIT", - "dependencies": { - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", - "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "mdast-util-definitions": "^4.0.0", - "mdurl": "^1.0.0", - "unist-builder": "^2.0.0", - "unist-util-generated": "^1.0.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "license": "CC0-1.0" - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", - "license": "MIT" - }, - "node_modules/mdx-mermaid": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mdx-mermaid/-/mdx-mermaid-1.3.2.tgz", - "integrity": "sha512-8kw0tg3isKKBFzFwoe2DhIaEgKYtVeJXQtxZCCrdTPO0CTpXHnTHT0atDqsp7YkXi5iUCp/zAZPZu1cmr68T3w==", - "license": "MIT", - "peerDependencies": { - "mermaid": ">=8.11.0", - "react": "^16.8.4 || ^17.0.0 || ^18.0.0", - "unist-util-visit": "^2.0.0" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.4.12", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.12.tgz", - "integrity": "sha512-BcjuQn6vfqP+k100e0E9m61Hyqa//Brp+I3f0OBmN0ATHlFA8vx3Lt8z57R3u2bPqe3WGDBC+nF72fTH7isyEw==", - "license": "Unlicense", - "dependencies": { - "fs-monkey": "^1.0.3" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "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==", - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/mermaid": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-9.2.2.tgz", - "integrity": "sha512-6s7eKMqFJGS+0MYjmx8f6ZigqKBJVoSx5ql2gw6a4Aa+WJ49QiEJg7gPwywaBg3DZMs79UP7trESp4+jmaQccw==", - "license": "MIT", - "dependencies": { - "@braintree/sanitize-url": "^6.0.0", - "d3": "^7.0.0", - "dagre": "^0.8.5", - "dagre-d3": "^0.6.4", - "dompurify": "2.4.0", - "fast-clone": "^1.5.13", - "graphlib": "^2.1.8", - "khroma": "^2.0.0", - "lodash": "^4.17.21", - "moment-mini": "^2.24.0", - "non-layered-tidy-tree-layout": "^2.0.2", - "stylis": "^4.1.2", - "uuid": "^9.0.0" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "license": "MIT", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "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==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.0.tgz", - "integrity": "sha512-auqtVo8KhTScMsba7MbijqZTfibbXiBNlPAQbsVt7enQfcDYLdgG57eGxMqwVU3mfeWANY4F1wUg+rMF+ycZgw==", - "license": "MIT", - "dependencies": { - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "license": "ISC" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/moment-mini": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment-mini/-/moment-mini-2.29.4.tgz", - "integrity": "sha512-uhXpYwHFeiTbY9KSgPPRoo1nt8OxNVdMVoTBYHfSEKeRkIkwGpO+gERmhuhBtzfaeOyTkykSrm2+noJBgqt3Hg==", - "license": "MIT" - }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/mrmime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "license": "MIT", - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/multimatch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz", - "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==", - "license": "MIT", - "dependencies": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "license": "MIT" - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "license": "MIT", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-emoji": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.21" - } - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "license": "(BSD-3-Clause OR GPL-2.0)", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", - "license": "MIT" - }, - "node_modules/non-layered-tidy-tree-layout": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", - "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==", - "license": "MIT" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nprogress": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==", - "license": "MIT" - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", - "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", - "license": "MIT", - "dependencies": { - "array.prototype.reduce": "^1.0.5", - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "license": "MIT" - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "license": "MIT", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "license": "(WTFPL OR MIT)", - "bin": { - "opener": "bin/opener-bin.js" - } - }, - "node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "license": "MIT", - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "license": "MIT", - "dependencies": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "license": "MIT", - "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-numeric-range": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", - "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==", - "license": "ISC" - }, - "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "license": "MIT", - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "license": "MIT", - "dependencies": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "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==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "license": "MIT" - }, - "node_modules/path-to-regexp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", - "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==", - "license": "MIT" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "license": "MIT", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "license": "MIT", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "license": "MIT", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "license": "MIT", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss": { - "version": "8.4.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", - "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/postcss-colormin": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", - "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-convert-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", - "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "license": "MIT", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "license": "MIT", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "license": "MIT", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "license": "MIT", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-unused": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz", - "integrity": "sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-loader": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.1.tgz", - "integrity": "sha512-VRviFEyYlLjctSM93gAZtcJJ/iSkPZ79zWbN/1fSH+NisBByEiVLqpdVDrPLVSi8DX0oJo12kL/GppTBdKVXiQ==", - "license": "MIT", - "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.7" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-loader/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/postcss-merge-idents": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz", - "integrity": "sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==", - "license": "MIT", - "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-longhand": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", - "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-rules": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.3.tgz", - "integrity": "sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", - "license": "MIT", - "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-params": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", - "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "license": "MIT", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "license": "ISC", - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "license": "ISC", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "license": "MIT", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", - "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", - "license": "MIT", - "dependencies": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", - "license": "MIT", - "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-idents": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz", - "integrity": "sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.1.tgz", - "integrity": "sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", - "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-sort-media-queries": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.3.0.tgz", - "integrity": "sha512-jAl8gJM2DvuIJiI9sL1CuiHtKM4s5aEIomkU8G3LFvbP+p8i7Sz8VV63uieTgoewGqKbi+hxBTiOKJlB35upCg==", - "license": "MIT", - "dependencies": { - "sort-css-media-queries": "2.1.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "postcss": "^8.4.16" - } - }, - "node_modules/postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "license": "MIT" - }, - "node_modules/postcss-zindex": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.1.0.tgz", - "integrity": "sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==", - "license": "MIT", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/prettier": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.0.tgz", - "integrity": "sha512-9Lmg8hTFZKG0Asr/kW9Bp8tJjRVluO8EJQVfY2T7FMw9T5jy4I/Uvx0Rca/XWf50QQ1/SS48+6IJWnrb+2yemA==", - "license": "MIT", - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "node_modules/pretty-quick": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-3.1.3.tgz", - "integrity": "sha512-kOCi2FJabvuh1as9enxYmrnBC6tVMoVOenMaBqRfsvBHB0cbpYHjdQEpSglpASDFEXVwplpcGR4CLEaisYAFcA==", - "license": "MIT", - "dependencies": { - "chalk": "^3.0.0", - "execa": "^4.0.0", - "find-up": "^4.1.0", - "ignore": "^5.1.4", - "mri": "^1.1.5", - "multimatch": "^4.0.0" - }, - "bin": { - "pretty-quick": "bin/pretty-quick.js" - }, - "engines": { - "node": ">=10.13" - }, - "peerDependencies": { - "prettier": ">=2.0.0" - } - }, - "node_modules/pretty-quick/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pretty-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", - "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/prism-react-renderer": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz", - "integrity": "sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg==", - "license": "MIT", - "peerDependencies": { - "react": ">=0.14.9" - } - }, - "node_modules/prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "license": "MIT" - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "license": "MIT", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "license": "MIT", - "dependencies": { - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "license": "MIT", - "dependencies": { - "escape-goat": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pure-color": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", - "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==", - "license": "MIT" - }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "license": "MIT", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "license": "MIT", - "dependencies": { - "inherits": "~2.0.3" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "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/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "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/rc/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==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-base16-styling": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", - "integrity": "sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==", - "license": "MIT", - "dependencies": { - "base16": "^1.0.0", - "lodash.curry": "^4.0.1", - "lodash.flow": "^3.3.0", - "pure-color": "^1.2.0" - } - }, - "node_modules/react-dev-utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", - "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.11", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/react-dev-utils/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", - "license": "MIT", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/react-dev-utils/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - }, - "peerDependencies": { - "react": "17.0.2" - } - }, - "node_modules/react-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==", - "license": "MIT" - }, - "node_modules/react-fast-compare": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", - "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==", - "license": "MIT" - }, - "node_modules/react-helmet-async": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", - "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", - "license": "Apache-2.0", - "dependencies": { - "@babel/runtime": "^7.12.5", - "invariant": "^2.2.4", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.2.0", - "shallowequal": "^1.1.0" - }, - "peerDependencies": { - "react": "^16.6.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" - }, - "node_modules/react-json-view": { - "version": "1.21.3", - "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", - "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", - "license": "MIT", - "dependencies": { - "flux": "^4.0.1", - "react-base16-styling": "^0.6.0", - "react-lifecycles-compat": "^3.0.4", - "react-textarea-autosize": "^8.3.2" - }, - "peerDependencies": { - "react": "^17.0.0 || ^16.3.0 || ^15.5.4", - "react-dom": "^17.0.0 || ^16.3.0 || ^15.5.4" - } - }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", - "license": "MIT" - }, - "node_modules/react-loadable": { - "name": "@docusaurus/react-loadable", - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", - "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", - "license": "MIT", - "dependencies": { - "@types/react": "*", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": "*" - } - }, - "node_modules/react-loadable-ssr-addon-v5-slorber": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", - "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.3" - }, - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "react-loadable": "*", - "webpack": ">=4.41.1 || 5.x" - } - }, - "node_modules/react-router": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", - "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router-config": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", - "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.1.2" - }, - "peerDependencies": { - "react": ">=15", - "react-router": ">=5" - } - }, - "node_modules/react-router-dom": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", - "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.4", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router/node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "license": "MIT", - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/react-textarea-autosize": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.4.0.tgz", - "integrity": "sha512-YrTFaEHLgJsi8sJVYHBzYn+mkP3prGkmP2DKb/tm0t7CLJY5t1Rxix8070LAKb0wby7bl/lf2EeHkuMihMZMwQ==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.2", - "use-composed-ref": "^1.3.0", - "use-latest": "^1.2.1" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/reading-time": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", - "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==", - "license": "MIT" - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "license": "MIT", - "dependencies": { - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "license": "MIT" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "license": "MIT" - }, - "node_modules/regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpu-core": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", - "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==", - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsgen": "^0.7.1", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/registry-auth-token": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", - "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", - "license": "MIT", - "dependencies": { - "rc": "1.2.8" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "license": "MIT", - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/regjsgen": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", - "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==", - "license": "MIT" - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "license": "BSD-2-Clause", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/remark-emoji": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz", - "integrity": "sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==", - "license": "MIT", - "dependencies": { - "emoticon": "^3.2.0", - "node-emoji": "^1.10.0", - "unist-util-visit": "^2.0.3" - } - }, - "node_modules/remark-footnotes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", - "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", - "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", - "license": "MIT", - "dependencies": { - "@babel/core": "7.12.9", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.12.1", - "@babel/plugin-syntax-jsx": "7.12.1", - "@mdx-js/util": "1.6.22", - "is-alphabetical": "1.0.4", - "remark-parse": "8.0.3", - "unified": "9.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx/node_modules/@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/remark-mdx/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", - "license": "MIT" - }, - "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread/node_modules/@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/remark-mdx/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/remark-mdx/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "license": "MIT" - }, - "node_modules/remark-mdx/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/remark-mdx/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/remark-parse": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", - "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", - "license": "MIT", - "dependencies": { - "ccount": "^1.0.0", - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^2.0.0", - "vfile-location": "^3.0.0", - "xtend": "^4.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", - "license": "MIT", - "dependencies": { - "mdast-squeeze-paragraphs": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "license": "MIT", - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "node_modules/renderkid/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "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==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-like": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", - "engines": { - "node": "*" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==", - "license": "MIT" - }, - "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", - "license": "MIT", - "dependencies": { - "lowercase-keys": "^1.0.0" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/robust-predicates": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.1.tgz", - "integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==", - "license": "Unlicense" - }, - "node_modules/rtl-detect": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz", - "integrity": "sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==", - "license": "BSD-3-Clause" - }, - "node_modules/rtlcss": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.5.0.tgz", - "integrity": "sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==", - "license": "MIT", - "dependencies": { - "find-up": "^5.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.3.11", - "strip-json-comments": "^3.1.1" - }, - "bin": { - "rtlcss": "bin/rtlcss.js" - } - }, - "node_modules/rtlcss/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rtlcss/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rtlcss/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rtlcss/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "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", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rw": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", - "license": "BSD-3-Clause" - }, - "node_modules/rxjs": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", - "integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.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==", - "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/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "license": "ISC" - }, - "node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/schema-utils/node_modules/ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/schema-utils/node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/schema-utils/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/schema-utils/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==", - "license": "MIT" - }, - "node_modules/section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "license": "MIT" - }, - "node_modules/selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "license": "MIT", - "dependencies": { - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "license": "MIT", - "dependencies": { - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-handler": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz", - "integrity": "sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==", - "license": "MIT", - "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" - } - }, - "node_modules/serve-handler/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==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-handler/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==", - "license": "MIT", - "dependencies": { - "mime-db": "~1.33.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-handler/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==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "license": "MIT", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "license": "ISC" - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "license": "ISC" - }, - "node_modules/serve-index/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "license": "MIT", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "license": "MIT" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", - "license": "MIT" - }, - "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==", - "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==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", - "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "license": "BSD-3-Clause", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "license": "ISC" - }, - "node_modules/sirv": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", - "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", - "license": "MIT", - "dependencies": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^1.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "license": "MIT" - }, - "node_modules/sitemap": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz", - "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==", - "license": "MIT", - "dependencies": { - "@types/node": "^17.0.5", - "@types/sax": "^1.2.1", - "arg": "^5.0.0", - "sax": "^1.2.4" - }, - "bin": { - "sitemap": "dist/cli.js" - }, - "engines": { - "node": ">=12.0.0", - "npm": ">=5.6.0" - } - }, - "node_modules/sitemap/node_modules/@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", - "license": "MIT" - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "license": "MIT", - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/sockjs/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/sort-css-media-queries": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz", - "integrity": "sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==", - "license": "MIT", - "engines": { - "node": ">= 6.3.0" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/spdy-transport/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/spdy-transport/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "license": "MIT" - }, - "node_modules/spdy/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/spdy/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "license": "MIT" - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "license": "BSD-3-Clause" - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "license": "MIT" - }, - "node_modules/state-toggle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", - "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/std-env": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.1.tgz", - "integrity": "sha512-3H20QlwQsSm2OvAxWIYhs+j01MzzqwMwGiiO1NQaJYZgJZFPuAbf95/DiKRBSTYIJ2FeGUc+B/6mPGcWP9dO3Q==", - "license": "MIT" - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "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==", - "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/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "license": "BSD-2-Clause", - "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "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==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-to-object": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", - "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", - "license": "MIT", - "dependencies": { - "inline-style-parser": "0.1.1" - } - }, - "node_modules/stylehacks": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", - "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/stylis": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", - "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==", - "license": "MIT" - }, - "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==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", - "license": "MIT" - }, - "node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "license": "MIT", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", - "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", - "license": "BSD-2-Clause", - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", - "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.14", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "terser": "^5.14.1" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "license": "MIT" - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "license": "MIT" - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "license": "MIT" - }, - "node_modules/tiny-invariant": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", - "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==", - "license": "MIT" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", - "license": "MIT" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/totalist": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", - "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" - }, - "node_modules/trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==" - }, - "node_modules/trim-trailing-lines": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", - "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "license": "0BSD" - }, - "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==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "license": "MIT", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", - "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/ua-parser-js": { - "version": "0.7.32", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.32.tgz", - "integrity": "sha512-f9BESNVhzlhEFf2CHMSj40NWOjYPl1YKYbrvIr/hFTDEmLq7SRbWvm7FcdcpCYT95zrOhC7gZSxjdnnTpBcwVw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unherit": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", - "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.0", - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "license": "MIT", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "license": "MIT", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "license": "MIT", - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/unist-builder": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", - "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-generated": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", - "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", - "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", - "license": "MIT", - "dependencies": { - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove-position": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", - "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", - "license": "MIT", - "dependencies": { - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==", - "license": "MIT" - }, - "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist-lint": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "license": "BSD-2-Clause", - "dependencies": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "license": "MIT", - "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/update-notifier/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "license": "MIT", - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-notifier/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "file-loader": "*", - "webpack": "^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "file-loader": { - "optional": true - } - } - }, - "node_modules/url-loader/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", - "license": "MIT", - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/use-composed-ref": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", - "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", - "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/use-isomorphic-layout-effect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", - "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", - "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-latest": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", - "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", - "license": "MIT", - "dependencies": { - "use-isomorphic-layout-effect": "^1.1.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, - "node_modules/util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "license": "MIT", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", - "license": "MIT" - }, - "node_modules/utility-types": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", - "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==", - "license": "MIT" - }, - "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==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-location": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", - "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/wait-on": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", - "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", - "license": "MIT", - "dependencies": { - "axios": "^0.25.0", - "joi": "^17.6.0", - "lodash": "^4.17.21", - "minimist": "^1.2.5", - "rxjs": "^7.5.4" - }, - "bin": { - "wait-on": "bin/wait-on" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "license": "MIT", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "license": "MIT", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/web-namespaces": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", - "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause" - }, - "node_modules/webpack": { - "version": "5.75.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", - "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", - "license": "MIT", - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-bundle-analyzer": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.7.0.tgz", - "integrity": "sha512-j9b8ynpJS4K+zfO5GGwsAcQX4ZHpWV+yRiHDiL+bE0XHJ8NiPYLTNVQdlFYWxtpg9lfAQNlwJg16J9AJtFSXRg==", - "license": "MIT", - "dependencies": { - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "chalk": "^4.1.0", - "commander": "^7.2.0", - "gzip-size": "^6.0.0", - "lodash": "^4.17.20", - "opener": "^1.5.2", - "sirv": "^1.0.7", - "ws": "^7.3.1" - }, - "bin": { - "webpack-bundle-analyzer": "lib/bin/analyzer.js" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "license": "MIT", - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-server": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", - "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", - "license": "MIT", - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "license": "MIT", - "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 - } - } - }, - "node_modules/webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "license": "MIT", - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "license": "MIT", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "license": "MIT" - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpackbar": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", - "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "consola": "^2.15.3", - "pretty-time": "^1.1.0", - "std-env": "^3.0.1" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "webpack": "3 || 4 || 5" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "license": "Apache-2.0", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "license": "Apache-2.0", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "license": "MIT", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "license": "MIT", - "dependencies": { - "string-width": "^5.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/widest-line/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/widest-line/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==", - "license": "MIT" - }, - "node_modules/widest-line/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==", - "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/widest-line/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "license": "MIT" - }, - "node_modules/wrap-ansi": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.0.1.tgz", - "integrity": "sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==", - "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" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/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==", - "license": "MIT" - }, - "node_modules/wrap-ansi/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==", - "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/wrap-ansi/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "license": "MIT", - "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 - } - } - }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/xml-js": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", - "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", - "license": "MIT", - "dependencies": { - "sax": "^1.2.4" - }, - "bin": { - "xml-js": "bin/cli.js" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "license": "MIT", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - }, - "dependencies": { - "@algolia/autocomplete-core": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.7.2.tgz", - "integrity": "sha512-eclwUDC6qfApNnEfu1uWcL/rudQsn59tjEoUYZYE2JSXZrHLRjBUGMxiCoknobU2Pva8ejb0eRxpIYDtVVqdsw==", - "requires": { - "@algolia/autocomplete-shared": "1.7.2" - } - }, - "@algolia/autocomplete-preset-algolia": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.2.tgz", - "integrity": "sha512-+RYEG6B0QiGGfRb2G3MtPfyrl0dALF3cQNTWBzBX6p5o01vCCGTTinAm2UKG3tfc2CnOMAtnPLkzNZyJUpnVJw==", - "requires": { - "@algolia/autocomplete-shared": "1.7.2" - } - }, - "@algolia/autocomplete-shared": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.2.tgz", - "integrity": "sha512-QCckjiC7xXHIUaIL3ektBtjJ0w7tTA3iqKcAE/Hjn1lZ5omp7i3Y4e09rAr9ZybqirL7AbxCLLq0Ra5DDPKeug==" - }, - "@algolia/cache-browser-local-storage": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.14.2.tgz", - "integrity": "sha512-FRweBkK/ywO+GKYfAWbrepewQsPTIEirhi1BdykX9mxvBPtGNKccYAxvGdDCumU1jL4r3cayio4psfzKMejBlA==", - "requires": { - "@algolia/cache-common": "4.14.2" - } - }, - "@algolia/cache-common": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.14.2.tgz", - "integrity": "sha512-SbvAlG9VqNanCErr44q6lEKD2qoK4XtFNx9Qn8FK26ePCI8I9yU7pYB+eM/cZdS9SzQCRJBbHUumVr4bsQ4uxg==" - }, - "@algolia/cache-in-memory": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.14.2.tgz", - "integrity": "sha512-HrOukWoop9XB/VFojPv1R5SVXowgI56T9pmezd/djh2JnVN/vXswhXV51RKy4nCpqxyHt/aGFSq2qkDvj6KiuQ==", - "requires": { - "@algolia/cache-common": "4.14.2" - } - }, - "@algolia/client-account": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.14.2.tgz", - "integrity": "sha512-WHtriQqGyibbb/Rx71YY43T0cXqyelEU0lB2QMBRXvD2X0iyeGl4qMxocgEIcbHyK7uqE7hKgjT8aBrHqhgc1w==", - "requires": { - "@algolia/client-common": "4.14.2", - "@algolia/client-search": "4.14.2", - "@algolia/transporter": "4.14.2" - } - }, - "@algolia/client-analytics": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.14.2.tgz", - "integrity": "sha512-yBvBv2mw+HX5a+aeR0dkvUbFZsiC4FKSnfqk9rrfX+QrlNOKEhCG0tJzjiOggRW4EcNqRmaTULIYvIzQVL2KYQ==", - "requires": { - "@algolia/client-common": "4.14.2", - "@algolia/client-search": "4.14.2", - "@algolia/requester-common": "4.14.2", - "@algolia/transporter": "4.14.2" - } - }, - "@algolia/client-common": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.14.2.tgz", - "integrity": "sha512-43o4fslNLcktgtDMVaT5XwlzsDPzlqvqesRi4MjQz2x4/Sxm7zYg5LRYFol1BIhG6EwxKvSUq8HcC/KxJu3J0Q==", - "requires": { - "@algolia/requester-common": "4.14.2", - "@algolia/transporter": "4.14.2" - } - }, - "@algolia/client-personalization": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.14.2.tgz", - "integrity": "sha512-ACCoLi0cL8CBZ1W/2juehSltrw2iqsQBnfiu/Rbl9W2yE6o2ZUb97+sqN/jBqYNQBS+o0ekTMKNkQjHHAcEXNw==", - "requires": { - "@algolia/client-common": "4.14.2", - "@algolia/requester-common": "4.14.2", - "@algolia/transporter": "4.14.2" - } - }, - "@algolia/client-search": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.14.2.tgz", - "integrity": "sha512-L5zScdOmcZ6NGiVbLKTvP02UbxZ0njd5Vq9nJAmPFtjffUSOGEp11BmD2oMJ5QvARgx2XbX4KzTTNS5ECYIMWw==", - "requires": { - "@algolia/client-common": "4.14.2", - "@algolia/requester-common": "4.14.2", - "@algolia/transporter": "4.14.2" - } - }, - "@algolia/events": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", - "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" - }, - "@algolia/logger-common": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.14.2.tgz", - "integrity": "sha512-/JGlYvdV++IcMHBnVFsqEisTiOeEr6cUJtpjz8zc0A9c31JrtLm318Njc72p14Pnkw3A/5lHHh+QxpJ6WFTmsA==" - }, - "@algolia/logger-console": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.14.2.tgz", - "integrity": "sha512-8S2PlpdshbkwlLCSAB5f8c91xyc84VM9Ar9EdfE9UmX+NrKNYnWR1maXXVDQQoto07G1Ol/tYFnFVhUZq0xV/g==", - "requires": { - "@algolia/logger-common": "4.14.2" - } - }, - "@algolia/requester-browser-xhr": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.14.2.tgz", - "integrity": "sha512-CEh//xYz/WfxHFh7pcMjQNWgpl4wFB85lUMRyVwaDPibNzQRVcV33YS+63fShFWc2+42YEipFGH2iPzlpszmDw==", - "requires": { - "@algolia/requester-common": "4.14.2" - } - }, - "@algolia/requester-common": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.14.2.tgz", - "integrity": "sha512-73YQsBOKa5fvVV3My7iZHu1sUqmjjfs9TteFWwPwDmnad7T0VTCopttcsM3OjLxZFtBnX61Xxl2T2gmG2O4ehg==" - }, - "@algolia/requester-node-http": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.14.2.tgz", - "integrity": "sha512-oDbb02kd1o5GTEld4pETlPZLY0e+gOSWjWMJHWTgDXbv9rm/o2cF7japO6Vj1ENnrqWvLBmW1OzV9g6FUFhFXg==", - "requires": { - "@algolia/requester-common": "4.14.2" - } - }, - "@algolia/transporter": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.14.2.tgz", - "integrity": "sha512-t89dfQb2T9MFQHidjHcfhh6iGMNwvuKUvojAj+JsrHAGbuSy7yE4BylhLX6R0Q1xYRoC4Vvv+O5qIw/LdnQfsQ==", - "requires": { - "@algolia/cache-common": "4.14.2", - "@algolia/logger-common": "4.14.2", - "@algolia/requester-common": "4.14.2" - } - }, - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - } - } - }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/compat-data": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", - "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==" - }, - "@babel/core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz", - "integrity": "sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==", - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.5", - "@babel/parser": "^7.20.5", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "@babel/generator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz", - "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==", - "requires": { - "@babel/types": "^7.20.5", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", - "requires": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", - "requires": { - "@babel/compat-data": "^7.20.0", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "semver": "^6.3.0" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.2.tgz", - "integrity": "sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.19.1", - "@babel/helper-split-export-declaration": "^7.18.6" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", - "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.1.0" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "requires": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", - "requires": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", - "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", - "requires": { - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-replace-supers": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", - "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.19.1", - "@babel/types": "^7.19.0" - } - }, - "@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "requires": { - "@babel/types": "^7.20.2" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", - "requires": { - "@babel/types": "^7.20.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" - }, - "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" - }, - "@babel/helper-wrap-function": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", - "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", - "requires": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" - } - }, - "@babel/helpers": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz", - "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==", - "requires": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" - } - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz", - "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==" - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", - "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-proposal-optional-chaining": "^7.18.9" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz", - "integrity": "sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", - "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", - "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz", - "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==", - "requires": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.1" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", - "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", - "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", - "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", - "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", - "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", - "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.2.tgz", - "integrity": "sha512-y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz", - "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.19.1", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", - "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz", - "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "requires": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz", - "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==", - "requires": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", - "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", - "requires": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-simple-access": "^7.19.4" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz", - "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==", - "requires": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-validator-identifier": "^7.19.1" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", - "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.19.0", - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.3.tgz", - "integrity": "sha512-oZg/Fpx0YDrj13KsLyO8I/CX3Zdw7z0O9qOd95SqcoIzuqy/WTGWvePeHAnZCN54SfdyjHcb1S30gc8zlzlHcA==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-constant-elements": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.20.2.tgz", - "integrity": "sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", - "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", - "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.19.0" - }, - "dependencies": { - "@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - } - } - }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", - "requires": { - "@babel/plugin-transform-react-jsx": "^7.18.6" - } - }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", - "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", - "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "regenerator-transform": "^0.15.0" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", - "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "semver": "^6.3.0" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", - "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.2.tgz", - "integrity": "sha512-jvS+ngBfrnTUBfOQq8NfGnSbF9BrqlR6hjJ2yVxMkmO5nL/cdifNbI30EfjRlN4g5wYWNnMPyj5Sa6R1pbLeag==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.20.2", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-typescript": "^7.20.0" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/preset-env": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", - "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", - "requires": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.20.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.20.2", - "@babel/plugin-transform-classes": "^7.20.2", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.20.2", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.19.6", - "@babel/plugin-transform-modules-commonjs": "^7.19.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.6", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.20.1", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.19.0", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" - } - }, - "@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/preset-react": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", - "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-react-display-name": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.18.6", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-pure-annotations": "^7.18.6" - } - }, - "@babel/preset-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", - "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-typescript": "^7.18.6" - } - }, - "@babel/runtime": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", - "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", - "requires": { - "regenerator-runtime": "^0.13.10" - } - }, - "@babel/runtime-corejs3": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.1.tgz", - "integrity": "sha512-CGulbEDcg/ND1Im7fUNRZdGXmX2MTWVVZacQi/6DiKE5HNwZ3aVTm5PV4lO8HHz0B2h8WQyvKKjbX5XgTtydsg==", - "requires": { - "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.10" - } - }, - "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" - } - }, - "@babel/traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz", - "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==", - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.5", - "@babel/types": "^7.20.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "@babel/types": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz", - "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", - "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - } - }, - "@braintree/sanitize-url": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz", - "integrity": "sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==" - }, - "@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "optional": true - }, - "@docsearch/css": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.3.0.tgz", - "integrity": "sha512-rODCdDtGyudLj+Va8b6w6Y85KE85bXRsps/R4Yjwt5vueXKXZQKYw0aA9knxLBT6a/bI/GMrAcmCR75KYOM6hg==" - }, - "@docsearch/react": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.3.0.tgz", - "integrity": "sha512-fhS5adZkae2SSdMYEMVg6pxI5a/cE+tW16ki1V0/ur4Fdok3hBRkmN/H8VvlXnxzggkQIIRIVvYPn00JPjen3A==", - "requires": { - "@algolia/autocomplete-core": "1.7.2", - "@algolia/autocomplete-preset-algolia": "1.7.2", - "@docsearch/css": "3.3.0", - "algoliasearch": "^4.0.0" - } - }, - "@docusaurus/core": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.2.0.tgz", - "integrity": "sha512-Vd6XOluKQqzG12fEs9prJgDtyn6DPok9vmUWDR2E6/nV5Fl9SVkhEQOBxwObjk3kQh7OY7vguFaLh0jqdApWsA==", - "requires": { - "@babel/core": "^7.18.6", - "@babel/generator": "^7.18.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.18.6", - "@babel/preset-env": "^7.18.6", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.18.6", - "@babel/runtime": "^7.18.6", - "@babel/runtime-corejs3": "^7.18.6", - "@babel/traverse": "^7.18.8", - "@docusaurus/cssnano-preset": "2.2.0", - "@docusaurus/logger": "2.2.0", - "@docusaurus/mdx-loader": "2.2.0", - "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/utils": "2.2.0", - "@docusaurus/utils-common": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", - "@slorber/static-site-generator-webpack-plugin": "^4.0.7", - "@svgr/webpack": "^6.2.1", - "autoprefixer": "^10.4.7", - "babel-loader": "^8.2.5", - "babel-plugin-dynamic-import-node": "^2.3.3", - "boxen": "^6.2.1", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "clean-css": "^5.3.0", - "cli-table3": "^0.6.2", - "combine-promises": "^1.1.0", - "commander": "^5.1.0", - "copy-webpack-plugin": "^11.0.0", - "core-js": "^3.23.3", - "css-loader": "^6.7.1", - "css-minimizer-webpack-plugin": "^4.0.0", - "cssnano": "^5.1.12", - "del": "^6.1.1", - "detect-port": "^1.3.0", - "escape-html": "^1.0.3", - "eta": "^1.12.3", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "html-minifier-terser": "^6.1.0", - "html-tags": "^3.2.0", - "html-webpack-plugin": "^5.5.0", - "import-fresh": "^3.3.0", - "leven": "^3.1.0", - "lodash": "^4.17.21", - "mini-css-extract-plugin": "^2.6.1", - "postcss": "^8.4.14", - "postcss-loader": "^7.0.0", - "prompts": "^2.4.2", - "react-dev-utils": "^12.0.1", - "react-helmet-async": "^1.3.0", - "react-loadable": "npm:@docusaurus/react-loadable@5.5.2", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.3.3", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.3.3", - "rtl-detect": "^1.0.4", - "semver": "^7.3.7", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.5", - "terser-webpack-plugin": "^5.3.3", - "tslib": "^2.4.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^6.0.1", - "webpack": "^5.73.0", - "webpack-bundle-analyzer": "^4.5.0", - "webpack-dev-server": "^4.9.3", - "webpack-merge": "^5.8.0", - "webpackbar": "^5.0.2" - }, - "dependencies": { - "@svgr/hast-util-to-babel-ast": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", - "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", - "requires": { - "@babel/types": "^7.20.0", - "entities": "^4.4.0" - } - }, - "@svgr/plugin-jsx": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", - "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", - "requires": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/hast-util-to-babel-ast": "^6.5.1", - "svg-parser": "^2.0.4" - } - }, - "@svgr/plugin-svgo": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz", - "integrity": "sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==", - "requires": { - "cosmiconfig": "^7.0.1", - "deepmerge": "^4.2.2", - "svgo": "^2.8.0" - } - }, - "@svgr/webpack": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.1.tgz", - "integrity": "sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==", - "requires": { - "@babel/core": "^7.19.6", - "@babel/plugin-transform-react-constant-elements": "^7.18.12", - "@babel/preset-env": "^7.19.4", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.18.6", - "@svgr/core": "^6.5.1", - "@svgr/plugin-jsx": "^6.5.1", - "@svgr/plugin-svgo": "^6.5.1" - } - }, - "commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@docusaurus/cssnano-preset": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.2.0.tgz", - "integrity": "sha512-mAAwCo4n66TMWBH1kXnHVZsakW9VAXJzTO4yZukuL3ro4F+JtkMwKfh42EG75K/J/YIFQG5I/Bzy0UH/hFxaTg==", - "requires": { - "cssnano-preset-advanced": "^5.3.8", - "postcss": "^8.4.14", - "postcss-sort-media-queries": "^4.2.1", - "tslib": "^2.4.0" - } - }, - "@docusaurus/logger": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.2.0.tgz", - "integrity": "sha512-DF3j1cA5y2nNsu/vk8AG7xwpZu6f5MKkPPMaaIbgXLnWGfm6+wkOeW7kNrxnM95YOhKUkJUophX69nGUnLsm0A==", - "requires": { - "chalk": "^4.1.2", - "tslib": "^2.4.0" - } - }, - "@docusaurus/mdx-loader": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.2.0.tgz", - "integrity": "sha512-X2bzo3T0jW0VhUU+XdQofcEeozXOTmKQMvc8tUnWRdTnCvj4XEcBVdC3g+/jftceluiwSTNRAX4VBOJdNt18jA==", - "requires": { - "@babel/parser": "^7.18.8", - "@babel/traverse": "^7.18.8", - "@docusaurus/logger": "2.2.0", - "@docusaurus/utils": "2.2.0", - "@mdx-js/mdx": "^1.6.22", - "escape-html": "^1.0.3", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "image-size": "^1.0.1", - "mdast-util-to-string": "^2.0.0", - "remark-emoji": "^2.2.0", - "stringify-object": "^3.3.0", - "tslib": "^2.4.0", - "unified": "^9.2.2", - "unist-util-visit": "^2.0.3", - "url-loader": "^4.1.1", - "webpack": "^5.73.0" - }, - "dependencies": { - "unified": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", - "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - } - } - } - }, - "@docusaurus/module-type-aliases": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.2.0.tgz", - "integrity": "sha512-wDGW4IHKoOr9YuJgy7uYuKWrDrSpsUSDHLZnWQYM9fN7D5EpSmYHjFruUpKWVyxLpD/Wh0rW8hYZwdjJIQUQCQ==", - "requires": { - "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/types": "2.2.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "@types/react-router-dom": "*", - "react-helmet-async": "*", - "react-loadable": "npm:@docusaurus/react-loadable@5.5.2" - } - }, - "@docusaurus/plugin-content-blog": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.2.0.tgz", - "integrity": "sha512-0mWBinEh0a5J2+8ZJXJXbrCk1tSTNf7Nm4tYAl5h2/xx+PvH/Bnu0V+7mMljYm/1QlDYALNIIaT/JcoZQFUN3w==", - "requires": { - "@docusaurus/core": "2.2.0", - "@docusaurus/logger": "2.2.0", - "@docusaurus/mdx-loader": "2.2.0", - "@docusaurus/types": "2.2.0", - "@docusaurus/utils": "2.2.0", - "@docusaurus/utils-common": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", - "cheerio": "^1.0.0-rc.12", - "feed": "^4.2.2", - "fs-extra": "^10.1.0", - "lodash": "^4.17.21", - "reading-time": "^1.5.0", - "tslib": "^2.4.0", - "unist-util-visit": "^2.0.3", - "utility-types": "^3.10.0", - "webpack": "^5.73.0" - } - }, - "@docusaurus/plugin-content-docs": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.2.0.tgz", - "integrity": "sha512-BOazBR0XjzsHE+2K1wpNxz5QZmrJgmm3+0Re0EVPYFGW8qndCWGNtXW/0lGKhecVPML8yyFeAmnUCIs7xM2wPw==", - "requires": { - "@docusaurus/core": "2.2.0", - "@docusaurus/logger": "2.2.0", - "@docusaurus/mdx-loader": "2.2.0", - "@docusaurus/module-type-aliases": "2.2.0", - "@docusaurus/types": "2.2.0", - "@docusaurus/utils": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", - "@types/react-router-config": "^5.0.6", - "combine-promises": "^1.1.0", - "fs-extra": "^10.1.0", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "tslib": "^2.4.0", - "utility-types": "^3.10.0", - "webpack": "^5.73.0" - } - }, - "@docusaurus/plugin-content-pages": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.2.0.tgz", - "integrity": "sha512-+OTK3FQHk5WMvdelz8v19PbEbx+CNT6VSpx7nVOvMNs5yJCKvmqBJBQ2ZSxROxhVDYn+CZOlmyrC56NSXzHf6g==", - "requires": { - "@docusaurus/core": "2.2.0", - "@docusaurus/mdx-loader": "2.2.0", - "@docusaurus/types": "2.2.0", - "@docusaurus/utils": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", - "fs-extra": "^10.1.0", - "tslib": "^2.4.0", - "webpack": "^5.73.0" - } - }, - "@docusaurus/plugin-debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.2.0.tgz", - "integrity": "sha512-p9vOep8+7OVl6r/NREEYxf4HMAjV8JMYJ7Bos5fCFO0Wyi9AZEo0sCTliRd7R8+dlJXZEgcngSdxAUo/Q+CJow==", - "requires": { - "@docusaurus/core": "2.2.0", - "@docusaurus/types": "2.2.0", - "@docusaurus/utils": "2.2.0", - "fs-extra": "^10.1.0", - "react-json-view": "^1.21.3", - "tslib": "^2.4.0" - } - }, - "@docusaurus/plugin-google-analytics": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.2.0.tgz", - "integrity": "sha512-+eZVVxVeEnV5nVQJdey9ZsfyEVMls6VyWTIj8SmX0k5EbqGvnIfET+J2pYEuKQnDIHxy+syRMoRM6AHXdHYGIg==", - "requires": { - "@docusaurus/core": "2.2.0", - "@docusaurus/types": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", - "tslib": "^2.4.0" - } - }, - "@docusaurus/plugin-google-gtag": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.2.0.tgz", - "integrity": "sha512-6SOgczP/dYdkqUMGTRqgxAS1eTp6MnJDAQMy8VCF1QKbWZmlkx4agHDexihqmYyCujTYHqDAhm1hV26EET54NQ==", - "requires": { - "@docusaurus/core": "2.2.0", - "@docusaurus/types": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", - "tslib": "^2.4.0" - } - }, - "@docusaurus/plugin-sitemap": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.2.0.tgz", - "integrity": "sha512-0jAmyRDN/aI265CbWZNZuQpFqiZuo+5otk2MylU9iVrz/4J7gSc+ZJ9cy4EHrEsW7PV8s1w18hIEsmcA1YgkKg==", - "requires": { - "@docusaurus/core": "2.2.0", - "@docusaurus/logger": "2.2.0", - "@docusaurus/types": "2.2.0", - "@docusaurus/utils": "2.2.0", - "@docusaurus/utils-common": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", - "fs-extra": "^10.1.0", - "sitemap": "^7.1.1", - "tslib": "^2.4.0" - } - }, - "@docusaurus/preset-classic": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.2.0.tgz", - "integrity": "sha512-yKIWPGNx7BT8v2wjFIWvYrS+nvN04W+UameSFf8lEiJk6pss0kL6SG2MRvyULiI3BDxH+tj6qe02ncpSPGwumg==", - "requires": { - "@docusaurus/core": "2.2.0", - "@docusaurus/plugin-content-blog": "2.2.0", - "@docusaurus/plugin-content-docs": "2.2.0", - "@docusaurus/plugin-content-pages": "2.2.0", - "@docusaurus/plugin-debug": "2.2.0", - "@docusaurus/plugin-google-analytics": "2.2.0", - "@docusaurus/plugin-google-gtag": "2.2.0", - "@docusaurus/plugin-sitemap": "2.2.0", - "@docusaurus/theme-classic": "2.2.0", - "@docusaurus/theme-common": "2.2.0", - "@docusaurus/theme-search-algolia": "2.2.0", - "@docusaurus/types": "2.2.0" - } - }, - "@docusaurus/react-loadable": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", - "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", - "requires": { - "@types/react": "*", - "prop-types": "^15.6.2" - } - }, - "@docusaurus/theme-classic": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.2.0.tgz", - "integrity": "sha512-kjbg/qJPwZ6H1CU/i9d4l/LcFgnuzeiGgMQlt6yPqKo0SOJIBMPuz7Rnu3r/WWbZFPi//o8acclacOzmXdUUEg==", - "requires": { - "@docusaurus/core": "2.2.0", - "@docusaurus/mdx-loader": "2.2.0", - "@docusaurus/module-type-aliases": "2.2.0", - "@docusaurus/plugin-content-blog": "2.2.0", - "@docusaurus/plugin-content-docs": "2.2.0", - "@docusaurus/plugin-content-pages": "2.2.0", - "@docusaurus/theme-common": "2.2.0", - "@docusaurus/theme-translations": "2.2.0", - "@docusaurus/types": "2.2.0", - "@docusaurus/utils": "2.2.0", - "@docusaurus/utils-common": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", - "@mdx-js/react": "^1.6.22", - "clsx": "^1.2.1", - "copy-text-to-clipboard": "^3.0.1", - "infima": "0.2.0-alpha.42", - "lodash": "^4.17.21", - "nprogress": "^0.2.0", - "postcss": "^8.4.14", - "prism-react-renderer": "^1.3.5", - "prismjs": "^1.28.0", - "react-router-dom": "^5.3.3", - "rtlcss": "^3.5.0", - "tslib": "^2.4.0", - "utility-types": "^3.10.0" - } - }, - "@docusaurus/theme-common": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.2.0.tgz", - "integrity": "sha512-R8BnDjYoN90DCL75gP7qYQfSjyitXuP9TdzgsKDmSFPNyrdE3twtPNa2dIN+h+p/pr+PagfxwWbd6dn722A1Dw==", - "requires": { - "@docusaurus/mdx-loader": "2.2.0", - "@docusaurus/module-type-aliases": "2.2.0", - "@docusaurus/plugin-content-blog": "2.2.0", - "@docusaurus/plugin-content-docs": "2.2.0", - "@docusaurus/plugin-content-pages": "2.2.0", - "@docusaurus/utils": "2.2.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "clsx": "^1.2.1", - "parse-numeric-range": "^1.3.0", - "prism-react-renderer": "^1.3.5", - "tslib": "^2.4.0", - "utility-types": "^3.10.0" - } - }, - "@docusaurus/theme-search-algolia": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.2.0.tgz", - "integrity": "sha512-2h38B0tqlxgR2FZ9LpAkGrpDWVdXZ7vltfmTdX+4RsDs3A7khiNsmZB+x/x6sA4+G2V2CvrsPMlsYBy5X+cY1w==", - "requires": { - "@docsearch/react": "^3.1.1", - "@docusaurus/core": "2.2.0", - "@docusaurus/logger": "2.2.0", - "@docusaurus/plugin-content-docs": "2.2.0", - "@docusaurus/theme-common": "2.2.0", - "@docusaurus/theme-translations": "2.2.0", - "@docusaurus/utils": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", - "algoliasearch": "^4.13.1", - "algoliasearch-helper": "^3.10.0", - "clsx": "^1.2.1", - "eta": "^1.12.3", - "fs-extra": "^10.1.0", - "lodash": "^4.17.21", - "tslib": "^2.4.0", - "utility-types": "^3.10.0" - } - }, - "@docusaurus/theme-translations": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.2.0.tgz", - "integrity": "sha512-3T140AG11OjJrtKlY4pMZ5BzbGRDjNs2co5hJ6uYJG1bVWlhcaFGqkaZ5lCgKflaNHD7UHBHU9Ec5f69jTdd6w==", - "requires": { - "fs-extra": "^10.1.0", - "tslib": "^2.4.0" - } - }, - "@docusaurus/types": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.2.0.tgz", - "integrity": "sha512-b6xxyoexfbRNRI8gjblzVOnLr4peCJhGbYGPpJ3LFqpi5nsFfoK4mmDLvWdeah0B7gmJeXabN7nQkFoqeSdmOw==", - "requires": { - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.6.0", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.73.0", - "webpack-merge": "^5.8.0" - }, - "dependencies": { - "commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" - } - } - }, - "@docusaurus/utils": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.2.0.tgz", - "integrity": "sha512-oNk3cjvx7Tt1Lgh/aeZAmFpGV2pDr5nHKrBVx6hTkzGhrnMuQqLt6UPlQjdYQ3QHXwyF/ZtZMO1D5Pfi0lu7SA==", - "requires": { - "@docusaurus/logger": "2.2.0", - "@svgr/webpack": "^6.2.1", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "github-slugger": "^1.4.0", - "globby": "^11.1.0", - "gray-matter": "^4.0.3", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "micromatch": "^4.0.5", - "resolve-pathname": "^3.0.0", - "shelljs": "^0.8.5", - "tslib": "^2.4.0", - "url-loader": "^4.1.1", - "webpack": "^5.73.0" - }, - "dependencies": { - "@svgr/hast-util-to-babel-ast": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", - "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", - "requires": { - "@babel/types": "^7.20.0", - "entities": "^4.4.0" - } - }, - "@svgr/plugin-jsx": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", - "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", - "requires": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/hast-util-to-babel-ast": "^6.5.1", - "svg-parser": "^2.0.4" - } - }, - "@svgr/plugin-svgo": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz", - "integrity": "sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==", - "requires": { - "cosmiconfig": "^7.0.1", - "deepmerge": "^4.2.2", - "svgo": "^2.8.0" - } - }, - "@svgr/webpack": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.1.tgz", - "integrity": "sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==", - "requires": { - "@babel/core": "^7.19.6", - "@babel/plugin-transform-react-constant-elements": "^7.18.12", - "@babel/preset-env": "^7.19.4", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.18.6", - "@svgr/core": "^6.5.1", - "@svgr/plugin-jsx": "^6.5.1", - "@svgr/plugin-svgo": "^6.5.1" - } - } - } - }, - "@docusaurus/utils-common": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.2.0.tgz", - "integrity": "sha512-qebnerHp+cyovdUseDQyYFvMW1n1nv61zGe5JJfoNQUnjKuApch3IVsz+/lZ9a38pId8kqehC1Ao2bW/s0ntDA==", - "requires": { - "tslib": "^2.4.0" - } - }, - "@docusaurus/utils-validation": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.2.0.tgz", - "integrity": "sha512-I1hcsG3yoCkasOL5qQAYAfnmVoLei7apugT6m4crQjmDGxq+UkiRrq55UqmDDyZlac/6ax/JC0p+usZ6W4nVyg==", - "requires": { - "@docusaurus/logger": "2.2.0", - "@docusaurus/utils": "2.2.0", - "joi": "^17.6.0", - "js-yaml": "^4.1.0", - "tslib": "^2.4.0" - } - }, - "@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" - }, - "@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@jest/schemas": { - "version": "29.0.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz", - "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==", - "requires": { - "@sinclair/typebox": "^0.24.1" - } - }, - "@jest/types": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.3.1.tgz", - "integrity": "sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA==", - "requires": { - "@jest/schemas": "^29.0.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" - }, - "@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" - }, - "@mdx-js/mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", - "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", - "requires": { - "@babel/core": "7.12.9", - "@babel/plugin-syntax-jsx": "7.12.1", - "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@mdx-js/util": "1.6.22", - "babel-plugin-apply-mdx-type-prop": "1.6.22", - "babel-plugin-extract-import-names": "1.6.22", - "camelcase-css": "2.0.1", - "detab": "2.0.4", - "hast-util-raw": "6.0.1", - "lodash.uniq": "4.5.0", - "mdast-util-to-hast": "10.0.1", - "remark-footnotes": "2.0.0", - "remark-mdx": "1.6.22", - "remark-parse": "8.0.3", - "remark-squeeze-paragraphs": "4.0.0", - "style-to-object": "0.3.0", - "unified": "9.2.0", - "unist-builder": "2.0.3", - "unist-util-visit": "2.0.3" - }, - "dependencies": { - "@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "babel-plugin-apply-mdx-type-prop": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", - "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@mdx-js/util": "1.6.22" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" - } - } - }, - "@mdx-js/react": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", - "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", - "requires": {} - }, - "@mdx-js/util": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", - "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==" - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@polka/url": { - "version": "1.0.0-next.21", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", - "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" - }, - "@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@sideway/formula": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", - "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" - }, - "@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" - }, - "@sinclair/typebox": { - "version": "0.24.51", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", - "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" - }, - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" - }, - "@slorber/static-site-generator-webpack-plugin": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz", - "integrity": "sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA==", - "requires": { - "eval": "^0.1.8", - "p-map": "^4.0.0", - "webpack-sources": "^3.2.2" - } - }, - "@svgr/babel-plugin-add-jsx-attribute": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz", - "integrity": "sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==", - "requires": {} - }, - "@svgr/babel-plugin-remove-jsx-attribute": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.5.0.tgz", - "integrity": "sha512-8zYdkym7qNyfXpWvu4yq46k41pyNM9SOstoWhKlm+IfdCE1DdnRKeMUPsWIEO/DEkaWxJ8T9esNdG3QwQ93jBA==", - "requires": {} - }, - "@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.5.0.tgz", - "integrity": "sha512-NFdxMq3xA42Kb1UbzCVxplUc0iqSyM9X8kopImvFnB+uSDdzIHOdbs1op8ofAvVRtbg4oZiyRl3fTYeKcOe9Iw==", - "requires": {} - }, - "@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz", - "integrity": "sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==", - "requires": {} - }, - "@svgr/babel-plugin-svg-dynamic-title": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz", - "integrity": "sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==", - "requires": {} - }, - "@svgr/babel-plugin-svg-em-dimensions": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz", - "integrity": "sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==", - "requires": {} - }, - "@svgr/babel-plugin-transform-react-native-svg": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz", - "integrity": "sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==", - "requires": {} - }, - "@svgr/babel-plugin-transform-svg-component": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz", - "integrity": "sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==", - "requires": {} - }, - "@svgr/babel-preset": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz", - "integrity": "sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==", - "requires": { - "@svgr/babel-plugin-add-jsx-attribute": "^6.5.1", - "@svgr/babel-plugin-remove-jsx-attribute": "*", - "@svgr/babel-plugin-remove-jsx-empty-expression": "*", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1", - "@svgr/babel-plugin-svg-dynamic-title": "^6.5.1", - "@svgr/babel-plugin-svg-em-dimensions": "^6.5.1", - "@svgr/babel-plugin-transform-react-native-svg": "^6.5.1", - "@svgr/babel-plugin-transform-svg-component": "^6.5.1" - } - }, - "@svgr/core": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz", - "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==", - "requires": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/plugin-jsx": "^6.5.1", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.1" - }, - "dependencies": { - "@svgr/hast-util-to-babel-ast": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", - "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", - "requires": { - "@babel/types": "^7.20.0", - "entities": "^4.4.0" - } - }, - "@svgr/plugin-jsx": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", - "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", - "requires": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/hast-util-to-babel-ast": "^6.5.1", - "svg-parser": "^2.0.4" - } - } - } - }, - "@svgr/hast-util-to-babel-ast": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", - "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", - "requires": { - "@babel/types": "^7.12.6" - } - }, - "@svgr/plugin-jsx": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", - "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", - "requires": { - "@babel/core": "^7.12.3", - "@svgr/babel-preset": "^5.5.0", - "@svgr/hast-util-to-babel-ast": "^5.5.0", - "svg-parser": "^2.0.2" - }, - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==" - }, - "@svgr/babel-plugin-remove-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==" - }, - "@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", - "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==" - }, - "@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", - "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==" - }, - "@svgr/babel-plugin-svg-dynamic-title": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", - "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==" - }, - "@svgr/babel-plugin-svg-em-dimensions": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", - "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==" - }, - "@svgr/babel-plugin-transform-react-native-svg": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", - "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==" - }, - "@svgr/babel-plugin-transform-svg-component": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", - "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==" - }, - "@svgr/babel-preset": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", - "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", - "requires": { - "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", - "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", - "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", - "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", - "@svgr/babel-plugin-transform-svg-component": "^5.5.0" - } - } - } - }, - "@svgr/plugin-svgo": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", - "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", - "requires": { - "cosmiconfig": "^7.0.0", - "deepmerge": "^4.2.2", - "svgo": "^1.2.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "requires": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - } - }, - "css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==" - }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" - } - } - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "requires": { - "boolbase": "~1.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "requires": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - } - } - } - }, - "@svgr/webpack": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", - "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", - "requires": { - "@babel/core": "^7.12.3", - "@babel/plugin-transform-react-constant-elements": "^7.12.1", - "@babel/preset-env": "^7.12.1", - "@babel/preset-react": "^7.12.5", - "@svgr/core": "^5.5.0", - "@svgr/plugin-jsx": "^5.5.0", - "@svgr/plugin-svgo": "^5.5.0", - "loader-utils": "^2.0.0" - }, - "dependencies": { - "@svgr/core": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", - "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", - "requires": { - "@svgr/plugin-jsx": "^5.5.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.0" - } - } - } - }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "requires": { - "defer-to-connect": "^1.0.1" - } - }, - "@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==" - }, - "@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "requires": { - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", - "requires": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "@types/eslint": { - "version": "8.4.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", - "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" - }, - "@types/express": { - "version": "4.17.14", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", - "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.31", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", - "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "@types/hast": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", - "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", - "requires": { - "@types/unist": "*" - } - }, - "@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" - }, - "@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" - }, - "@types/http-proxy": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", - "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" - }, - "@types/mdast": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", - "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", - "requires": { - "@types/unist": "*" - } - }, - "@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" - }, - "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" - }, - "@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==" - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "@types/parse5": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", - "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" - }, - "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "@types/q": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==" - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" - }, - "@types/react": { - "version": "18.0.25", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.25.tgz", - "integrity": "sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g==", - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-router": { - "version": "5.1.19", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.19.tgz", - "integrity": "sha512-Fv/5kb2STAEMT3wHzdKQK2z8xKq38EDIGVrutYLmQVVLe+4orDFquU52hQrULnEHinMKv9FSA6lf9+uNT1ITtA==", - "requires": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "@types/react-router-config": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.6.tgz", - "integrity": "sha512-db1mx37a1EJDf1XeX8jJN7R3PZABmJQXR8r28yUjVMFSjkmnQo6X6pOEEmNl+Tp2gYQOGPdYbFIipBtdElZ3Yg==", - "requires": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "@types/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "requires": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" - }, - "@types/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==", - "requires": { - "@types/node": "*" - } - }, - "@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" - }, - "@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "requires": { - "@types/express": "*" - } - }, - "@types/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", - "requires": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "requires": { - "@types/node": "*" - } - }, - "@types/unist": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" - }, - "@types/ws": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", - "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", - "requires": { - "@types/node": "*" - } - }, - "@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" - }, - "@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" - }, - "acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "requires": {} - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" - }, - "address": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.1.tgz", - "integrity": "sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==" - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "requires": {} - }, - "algoliasearch": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.14.2.tgz", - "integrity": "sha512-ngbEQonGEmf8dyEh5f+uOIihv4176dgbuOZspiuhmTTBRBuzWu3KCGHre6uHj5YyuC7pNvQGzB6ZNJyZi0z+Sg==", - "requires": { - "@algolia/cache-browser-local-storage": "4.14.2", - "@algolia/cache-common": "4.14.2", - "@algolia/cache-in-memory": "4.14.2", - "@algolia/client-account": "4.14.2", - "@algolia/client-analytics": "4.14.2", - "@algolia/client-common": "4.14.2", - "@algolia/client-personalization": "4.14.2", - "@algolia/client-search": "4.14.2", - "@algolia/logger-common": "4.14.2", - "@algolia/logger-console": "4.14.2", - "@algolia/requester-browser-xhr": "4.14.2", - "@algolia/requester-common": "4.14.2", - "@algolia/requester-node-http": "4.14.2", - "@algolia/transporter": "4.14.2" - } - }, - "algoliasearch-helper": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.11.1.tgz", - "integrity": "sha512-mvsPN3eK4E0bZG0/WlWJjeqe/bUD2KOEVOl0GyL/TGXn6wcpZU8NOuztGHCUKXkyg5gq6YzUakVTmnmSSO5Yiw==", - "requires": { - "@algolia/events": "^4.0.1" - } - }, - "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==", - "requires": { - "string-width": "^4.1.0" - } - }, - "ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==" - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==" - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" - }, - "array.prototype.reduce": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", - "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - } - }, - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" - }, - "autoprefixer": { - "version": "10.4.13", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", - "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", - "requires": { - "browserslist": "^4.21.4", - "caniuse-lite": "^1.0.30001426", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "axios": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", - "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", - "requires": { - "follow-redirects": "^1.14.7" - } - }, - "babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "requires": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "dependencies": { - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-plugin-extract-import-names": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", - "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - } - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "requires": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - } - }, - "bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==" - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "base16": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", - "integrity": "sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==" - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - }, - "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "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" - }, - "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - } - } - }, - "bonjour-service": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.14.tgz", - "integrity": "sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ==", - "requires": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - }, - "dependencies": { - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" - } - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "boxen": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", - "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", - "requires": { - "ansi-align": "^3.0.1", - "camelcase": "^6.2.0", - "chalk": "^4.1.2", - "cli-boxes": "^3.0.0", - "string-width": "^5.0.1", - "type-fest": "^2.5.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", - "requires": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" - }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" - }, - "normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" - } - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" - }, - "camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001434", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz", - "integrity": "sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA==" - }, - "ccount": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", - "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==" - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" - }, - "character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" - }, - "character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" - }, - "cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "requires": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - } - }, - "cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "requires": { - "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" - }, - "dependencies": { - "css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - } - } - } - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "clean-css": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", - "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", - "requires": { - "source-map": "~0.6.0" - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" - }, - "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==" - }, - "cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", - "requires": { - "@colors/colors": "1.5.0", - "string-width": "^4.2.0" - } - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "requires": { - "mimic-response": "^1.0.0" - } - }, - "clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" - }, - "coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "requires": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "collapse-white-space": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", - "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==" - }, - "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==", - "requires": { - "color-name": "~1.1.4" - } - }, - "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==" - }, - "colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" - }, - "colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" - }, - "combine-promises": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.1.0.tgz", - "integrity": "sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==" - }, - "comma-separated-tokens": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==" - }, - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "requires": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - } - }, - "connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==" - }, - "consola": { - "version": "2.15.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", - "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" - }, - "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==" - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" - }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "copy-text-to-clipboard": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz", - "integrity": "sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q==" - }, - "copy-webpack-plugin": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", - "requires": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "dependencies": { - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "requires": { - "is-glob": "^4.0.3" - } - }, - "globby": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz", - "integrity": "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==", - "requires": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - } - }, - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" - } - } - }, - "core-js": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.26.1.tgz", - "integrity": "sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA==" - }, - "core-js-compat": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz", - "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==", - "requires": { - "browserslist": "^4.21.4" - } - }, - "core-js-pure": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.26.1.tgz", - "integrity": "sha512-VVXcDpp/xJ21KdULRq/lXdLzQAtX7+37LzpyfFM973il0tWSsDEoyzG38G14AjTpK9VTfiNM9jnFauq/CpaWGQ==" - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "requires": { - "node-fetch": "2.6.7" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" - }, - "css-declaration-sorter": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", - "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", - "requires": {} - }, - "css-loader": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.2.tgz", - "integrity": "sha512-oqGbbVcBJkm8QwmnNzrFrWTnudnRZC+1eXikLJl0n4ljcfotgRifpg2a1lKy8jTrc4/d9A/ap1GFq1jDKG7J+Q==", - "requires": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.18", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" - }, - "dependencies": { - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "css-minimizer-webpack-plugin": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.2.tgz", - "integrity": "sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA==", - "requires": { - "cssnano": "^5.1.8", - "jest-worker": "^29.1.2", - "postcss": "^8.4.17", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "jest-worker": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.3.1.tgz", - "integrity": "sha512-lY4AnnmsEWeiXirAIA0c9SDPbuCBq8IYuDVL8PMm0MZ2PEs2yPvRA/J64QBXuZp7CYKrDM/rmNrc9/i3KJQncw==", - "requires": { - "@types/node": "*", - "jest-util": "^29.3.1", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - } - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "dependencies": { - "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" - } - } - }, - "css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" - }, - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" - }, - "cssnano": { - "version": "5.1.14", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.14.tgz", - "integrity": "sha512-Oou7ihiTocbKqi0J1bB+TRJIQX5RMR3JghA8hcWSw9mjBLQ5Y3RWqEDoYG3sRNlAbCIXpqMoZGbq5KDR3vdzgw==", - "requires": { - "cssnano-preset-default": "^5.2.13", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - } - }, - "cssnano-preset-advanced": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.9.tgz", - "integrity": "sha512-njnh4pp1xCsibJcEHnWZb4EEzni0ePMqPuPNyuWT4Z+YeXmsgqNuTPIljXFEXhxGsWs9183JkXgHxc1TcsahIg==", - "requires": { - "autoprefixer": "^10.4.12", - "cssnano-preset-default": "^5.2.13", - "postcss-discard-unused": "^5.1.0", - "postcss-merge-idents": "^5.1.1", - "postcss-reduce-idents": "^5.2.0", - "postcss-zindex": "^5.1.0" - } - }, - "cssnano-preset-default": { - "version": "5.2.13", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.13.tgz", - "integrity": "sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ==", - "requires": { - "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.0", - "postcss-convert-values": "^5.1.3", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.3", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.1", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - } - }, - "cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "requires": {} - }, - "csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "requires": { - "css-tree": "^1.1.2" - } - }, - "csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" - }, - "d3": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/d3/-/d3-7.6.1.tgz", - "integrity": "sha512-txMTdIHFbcpLx+8a0IFhZsbp+PfBBPt8yfbmukZTQFroKuFqIwqswF0qE5JXWefylaAVpSXFoKm3yP+jpNLFLw==", - "requires": { - "d3-array": "3", - "d3-axis": "3", - "d3-brush": "3", - "d3-chord": "3", - "d3-color": "3", - "d3-contour": "4", - "d3-delaunay": "6", - "d3-dispatch": "3", - "d3-drag": "3", - "d3-dsv": "3", - "d3-ease": "3", - "d3-fetch": "3", - "d3-force": "3", - "d3-format": "3", - "d3-geo": "3", - "d3-hierarchy": "3", - "d3-interpolate": "3", - "d3-path": "3", - "d3-polygon": "3", - "d3-quadtree": "3", - "d3-random": "3", - "d3-scale": "4", - "d3-scale-chromatic": "3", - "d3-selection": "3", - "d3-shape": "3", - "d3-time": "3", - "d3-time-format": "4", - "d3-timer": "3", - "d3-transition": "3", - "d3-zoom": "3" - }, - "dependencies": { - "d3-array": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.0.tgz", - "integrity": "sha512-3yXFQo0oG3QCxbF06rMPFyGRMGJNS7NvsV1+2joOjbBE+9xvWQ8+GcMJAjRCzw06zQ3/arXeJgbPYcjUCuC+3g==", - "requires": { - "internmap": "1 - 2" - } - }, - "d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==" - }, - "d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==" - }, - "d3-drag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", - "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", - "requires": { - "d3-dispatch": "1 - 3", - "d3-selection": "3" - } - }, - "d3-dsv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", - "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", - "requires": { - "commander": "7", - "iconv-lite": "0.6", - "rw": "1" - } - }, - "d3-ease": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==" - }, - "d3-format": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==" - }, - "d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "requires": { - "d3-color": "1 - 3" - } - }, - "d3-path": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.0.1.tgz", - "integrity": "sha512-gq6gZom9AFZby0YLduxT1qmrp4xpBA1YZr19OI717WIdKE2OM5ETq5qrHLb301IgxhLwcuxvGZVLeeWc/k1I6w==" - }, - "d3-quadtree": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", - "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==" - }, - "d3-selection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", - "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==" - }, - "d3-time": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.0.0.tgz", - "integrity": "sha512-zmV3lRnlaLI08y9IMRXSDshQb5Nj77smnfpnd2LrBa/2K281Jijactokeak14QacHs/kKq0AQ121nidNYlarbQ==", - "requires": { - "d3-array": "2 - 3" - } - }, - "d3-time-format": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", - "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", - "requires": { - "d3-time": "1 - 3" - } - }, - "d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==" - }, - "d3-transition": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", - "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", - "requires": { - "d3-color": "1 - 3", - "d3-dispatch": "1 - 3", - "d3-ease": "1 - 3", - "d3-interpolate": "1 - 3", - "d3-timer": "1 - 3" - } - }, - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "d3-array": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", - "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==" - }, - "d3-axis": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", - "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==" - }, - "d3-brush": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", - "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", - "requires": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "3", - "d3-transition": "3" - }, - "dependencies": { - "d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==" - }, - "d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==" - }, - "d3-drag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", - "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", - "requires": { - "d3-dispatch": "1 - 3", - "d3-selection": "3" - } - }, - "d3-ease": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==" - }, - "d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "requires": { - "d3-color": "1 - 3" - } - }, - "d3-selection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", - "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==" - }, - "d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==" - }, - "d3-transition": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", - "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", - "requires": { - "d3-color": "1 - 3", - "d3-dispatch": "1 - 3", - "d3-ease": "1 - 3", - "d3-interpolate": "1 - 3", - "d3-timer": "1 - 3" - } - } - } - }, - "d3-chord": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", - "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", - "requires": { - "d3-path": "1 - 3" - }, - "dependencies": { - "d3-path": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.0.1.tgz", - "integrity": "sha512-gq6gZom9AFZby0YLduxT1qmrp4xpBA1YZr19OI717WIdKE2OM5ETq5qrHLb301IgxhLwcuxvGZVLeeWc/k1I6w==" - } - } - }, - "d3-collection": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", - "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==" - }, - "d3-color": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", - "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==" - }, - "d3-contour": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.0.tgz", - "integrity": "sha512-7aQo0QHUTu/Ko3cP9YK9yUTxtoDEiDGwnBHyLxG5M4vqlBkO/uixMRele3nfsfj6UXOcuReVpVXzAboGraYIJw==", - "requires": { - "d3-array": "^3.2.0" - }, - "dependencies": { - "d3-array": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.0.tgz", - "integrity": "sha512-3yXFQo0oG3QCxbF06rMPFyGRMGJNS7NvsV1+2joOjbBE+9xvWQ8+GcMJAjRCzw06zQ3/arXeJgbPYcjUCuC+3g==", - "requires": { - "internmap": "1 - 2" - } - } - } - }, - "d3-delaunay": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.2.tgz", - "integrity": "sha512-IMLNldruDQScrcfT+MWnazhHbDJhcRJyOEBAJfwQnHle1RPh6WDuLvxNArUju2VSMSUuKlY5BGHRJ2cYyoFLQQ==", - "requires": { - "delaunator": "5" - } - }, - "d3-dispatch": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", - "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==" - }, - "d3-drag": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.5.tgz", - "integrity": "sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==", - "requires": { - "d3-dispatch": "1", - "d3-selection": "1" - } - }, - "d3-dsv": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.2.0.tgz", - "integrity": "sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g==", - "requires": { - "commander": "2", - "iconv-lite": "0.4", - "rw": "1" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - } - } - }, - "d3-ease": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.7.tgz", - "integrity": "sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==" - }, - "d3-fetch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", - "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", - "requires": { - "d3-dsv": "1 - 3" - }, - "dependencies": { - "d3-dsv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", - "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", - "requires": { - "commander": "7", - "iconv-lite": "0.6", - "rw": "1" - } - }, - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "d3-force": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", - "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", - "requires": { - "d3-dispatch": "1 - 3", - "d3-quadtree": "1 - 3", - "d3-timer": "1 - 3" - }, - "dependencies": { - "d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==" - }, - "d3-quadtree": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", - "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==" - }, - "d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==" - } - } - }, - "d3-format": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", - "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==" - }, - "d3-geo": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.0.1.tgz", - "integrity": "sha512-Wt23xBych5tSy9IYAM1FR2rWIBFWa52B/oF/GYe5zbdHrg08FU8+BuI6X4PvTwPDdqdAdq04fuWJpELtsaEjeA==", - "requires": { - "d3-array": "2.5.0 - 3" - }, - "dependencies": { - "d3-array": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.0.tgz", - "integrity": "sha512-3yXFQo0oG3QCxbF06rMPFyGRMGJNS7NvsV1+2joOjbBE+9xvWQ8+GcMJAjRCzw06zQ3/arXeJgbPYcjUCuC+3g==", - "requires": { - "internmap": "1 - 2" - } - } - } - }, - "d3-hierarchy": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", - "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==" - }, - "d3-interpolate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", - "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", - "requires": { - "d3-color": "1" - } - }, - "d3-path": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", - "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" - }, - "d3-polygon": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", - "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==" - }, - "d3-quadtree": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.7.tgz", - "integrity": "sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==" - }, - "d3-random": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", - "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==" - }, - "d3-scale": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", - "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", - "requires": { - "d3-array": "2.10.0 - 3", - "d3-format": "1 - 3", - "d3-interpolate": "1.2.0 - 3", - "d3-time": "2.1.1 - 3", - "d3-time-format": "2 - 4" - }, - "dependencies": { - "d3-array": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.0.tgz", - "integrity": "sha512-3yXFQo0oG3QCxbF06rMPFyGRMGJNS7NvsV1+2joOjbBE+9xvWQ8+GcMJAjRCzw06zQ3/arXeJgbPYcjUCuC+3g==", - "requires": { - "internmap": "1 - 2" - } - }, - "d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==" - }, - "d3-format": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==" - }, - "d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "requires": { - "d3-color": "1 - 3" - } - }, - "d3-time": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.0.0.tgz", - "integrity": "sha512-zmV3lRnlaLI08y9IMRXSDshQb5Nj77smnfpnd2LrBa/2K281Jijactokeak14QacHs/kKq0AQ121nidNYlarbQ==", - "requires": { - "d3-array": "2 - 3" - } - }, - "d3-time-format": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", - "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", - "requires": { - "d3-time": "1 - 3" - } - } - } - }, - "d3-scale-chromatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", - "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", - "requires": { - "d3-color": "1 - 3", - "d3-interpolate": "1 - 3" - }, - "dependencies": { - "d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==" - }, - "d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "requires": { - "d3-color": "1 - 3" - } - } - } - }, - "d3-selection": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz", - "integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==" - }, - "d3-shape": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.1.0.tgz", - "integrity": "sha512-tGDh1Muf8kWjEDT/LswZJ8WF85yDZLvVJpYU9Nq+8+yW1Z5enxrmXOhTArlkaElU+CTn0OTVNli+/i+HP45QEQ==", - "requires": { - "d3-path": "1 - 3" - }, - "dependencies": { - "d3-path": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.0.1.tgz", - "integrity": "sha512-gq6gZom9AFZby0YLduxT1qmrp4xpBA1YZr19OI717WIdKE2OM5ETq5qrHLb301IgxhLwcuxvGZVLeeWc/k1I6w==" - } - } - }, - "d3-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", - "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==" - }, - "d3-time-format": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz", - "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==", - "requires": { - "d3-time": "1" - } - }, - "d3-timer": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", - "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==" - }, - "d3-transition": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.3.2.tgz", - "integrity": "sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==", - "requires": { - "d3-color": "1", - "d3-dispatch": "1", - "d3-ease": "1", - "d3-interpolate": "1", - "d3-selection": "^1.1.0", - "d3-timer": "1" - } - }, - "d3-voronoi": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.4.tgz", - "integrity": "sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==" - }, - "d3-zoom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", - "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", - "requires": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "2 - 3", - "d3-transition": "2 - 3" - }, - "dependencies": { - "d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==" - }, - "d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==" - }, - "d3-drag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", - "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", - "requires": { - "d3-dispatch": "1 - 3", - "d3-selection": "3" - } - }, - "d3-ease": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==" - }, - "d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "requires": { - "d3-color": "1 - 3" - } - }, - "d3-selection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", - "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==" - }, - "d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==" - }, - "d3-transition": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", - "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", - "requires": { - "d3-color": "1 - 3", - "d3-dispatch": "1 - 3", - "d3-ease": "1 - 3", - "d3-interpolate": "1 - 3", - "d3-timer": "1 - 3" - } - } - } - }, - "dagre": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/dagre/-/dagre-0.8.5.tgz", - "integrity": "sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==", - "requires": { - "graphlib": "^2.1.8", - "lodash": "^4.17.15" - } - }, - "dagre-d3": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/dagre-d3/-/dagre-d3-0.6.4.tgz", - "integrity": "sha512-e/6jXeCP7/ptlAM48clmX4xTZc5Ek6T6kagS7Oz2HrYSdqcLZFLqpAfh7ldbZRFfxCZVyh61NEPR08UQRVxJzQ==", - "requires": { - "d3": "^5.14", - "dagre": "^0.8.5", - "graphlib": "^2.1.8", - "lodash": "^4.17.15" - }, - "dependencies": { - "d3": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/d3/-/d3-5.16.0.tgz", - "integrity": "sha512-4PL5hHaHwX4m7Zr1UapXW23apo6pexCgdetdJ5kTmADpG/7T9Gkxw0M0tf/pjoB63ezCCm0u5UaFYy2aMt0Mcw==", - "requires": { - "d3-array": "1", - "d3-axis": "1", - "d3-brush": "1", - "d3-chord": "1", - "d3-collection": "1", - "d3-color": "1", - "d3-contour": "1", - "d3-dispatch": "1", - "d3-drag": "1", - "d3-dsv": "1", - "d3-ease": "1", - "d3-fetch": "1", - "d3-force": "1", - "d3-format": "1", - "d3-geo": "1", - "d3-hierarchy": "1", - "d3-interpolate": "1", - "d3-path": "1", - "d3-polygon": "1", - "d3-quadtree": "1", - "d3-random": "1", - "d3-scale": "2", - "d3-scale-chromatic": "1", - "d3-selection": "1", - "d3-shape": "1", - "d3-time": "1", - "d3-time-format": "2", - "d3-timer": "1", - "d3-transition": "1", - "d3-voronoi": "1", - "d3-zoom": "1" - } - }, - "d3-axis": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.12.tgz", - "integrity": "sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ==" - }, - "d3-brush": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.1.6.tgz", - "integrity": "sha512-7RW+w7HfMCPyZLifTz/UnJmI5kdkXtpCbombUSs8xniAyo0vIbrDzDwUJB6eJOgl9u5DQOt2TQlYumxzD1SvYA==", - "requires": { - "d3-dispatch": "1", - "d3-drag": "1", - "d3-interpolate": "1", - "d3-selection": "1", - "d3-transition": "1" - } - }, - "d3-chord": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.6.tgz", - "integrity": "sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA==", - "requires": { - "d3-array": "1", - "d3-path": "1" - } - }, - "d3-contour": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-1.3.2.tgz", - "integrity": "sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==", - "requires": { - "d3-array": "^1.1.1" - } - }, - "d3-fetch": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-1.2.0.tgz", - "integrity": "sha512-yC78NBVcd2zFAyR/HnUiBS7Lf6inSCoWcSxFfw8FYL7ydiqe80SazNwoffcqOfs95XaLo7yebsmQqDKSsXUtvA==", - "requires": { - "d3-dsv": "1" - } - }, - "d3-force": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.2.1.tgz", - "integrity": "sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==", - "requires": { - "d3-collection": "1", - "d3-dispatch": "1", - "d3-quadtree": "1", - "d3-timer": "1" - } - }, - "d3-geo": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.12.1.tgz", - "integrity": "sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==", - "requires": { - "d3-array": "1" - } - }, - "d3-hierarchy": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz", - "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==" - }, - "d3-polygon": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.6.tgz", - "integrity": "sha512-k+RF7WvI08PC8reEoXa/w2nSg5AUMTi+peBD9cmFc+0ixHfbs4QmxxkarVal1IkVkgxVuk9JSHhJURHiyHKAuQ==" - }, - "d3-random": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.2.tgz", - "integrity": "sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ==" - }, - "d3-scale": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.2.2.tgz", - "integrity": "sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==", - "requires": { - "d3-array": "^1.2.0", - "d3-collection": "1", - "d3-format": "1", - "d3-interpolate": "1", - "d3-time": "1", - "d3-time-format": "2" - } - }, - "d3-scale-chromatic": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz", - "integrity": "sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==", - "requires": { - "d3-color": "1", - "d3-interpolate": "1" - } - }, - "d3-shape": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", - "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", - "requires": { - "d3-path": "1" - } - }, - "d3-zoom": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.8.3.tgz", - "integrity": "sha512-VoLXTK4wvy1a0JpH2Il+F2CiOhVu7VRXWF5M/LroMIh3/zBAC3WAt7QoIvPibOavVo20hN6/37vwAsdBejLyKQ==", - "requires": { - "d3-dispatch": "1", - "d3-drag": "1", - "d3-interpolate": "1", - "d3-selection": "1", - "d3-transition": "1" - } - } - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "requires": { - "mimic-response": "^1.0.0" - } - }, - "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==" - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" - }, - "default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "requires": { - "execa": "^5.0.0" - }, - "dependencies": { - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "requires": { - "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" - } - }, - "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==" - }, - "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==" - } - } - }, - "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" - }, - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "requires": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - } - }, - "delaunator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", - "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", - "requires": { - "robust-predicates": "^3.0.0" - } - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" - }, - "detab": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", - "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", - "requires": { - "repeat-string": "^1.5.4" - } - }, - "detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" - }, - "detect-port": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", - "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", - "requires": { - "address": "^1.0.1", - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "requires": { - "address": "^1.0.1", - "debug": "^2.6.0" - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "requires": { - "path-type": "^4.0.0" - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" - }, - "dns-packet": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", - "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", - "requires": { - "@leichtgewicht/ip-codec": "^2.0.1" - } - }, - "dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "requires": { - "utila": "~0.4" - } - }, - "dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - } - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" - }, - "domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "requires": { - "domelementtype": "^2.3.0" - } - }, - "dompurify": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.0.tgz", - "integrity": "sha512-Be9tbQMZds4a3C6xTmz68NlMfeONA//4dOavl/1rNw50E+/QO0KVpbcU0PcaW0nsQxurXls9ZocqFxk8R2mWEA==" - }, - "domutils": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", - "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", - "requires": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.1" - } - }, - "dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "requires": { - "is-obj": "^2.0.0" - }, - "dependencies": { - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" - } - } - }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "duplexer3": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", - "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" - }, - "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==" - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" - }, - "emoticon": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz", - "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, - "enhanced-resolve": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.11.0.tgz", - "integrity": "sha512-0Gcraf7gAJSQoPg+bTSXNhuzAYtXqLc4C011vb8S3B8XUSEkGYNBk20c68X9291VF4vvsCD8SPkr6Mza+DwU+g==", - "requires": { - "graceful-fs": "^4.2.9", - "tapable": "^2.2.0" - } - }, - "entities": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", - "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==" - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", - "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" - }, - "es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "eta": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/eta/-/eta-1.12.3.tgz", - "integrity": "sha512-qHixwbDLtekO/d51Yr4glcaUJCIjGVJyTzuqV4GPlgZo1YpgOKG+avQynErZIYrfM6JIJdtiG2Kox8tbb+DoGg==" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" - }, - "eval": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", - "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", - "requires": { - "@types/node": "*", - "require-like": ">= 0.1.1" - } - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" - }, - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "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" - }, - "dependencies": { - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "requires": { - "safe-buffer": "5.2.1" - } - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "fast-clone": { - "version": "1.5.13", - "resolved": "https://registry.npmjs.org/fast-clone/-/fast-clone-1.5.13.tgz", - "integrity": "sha512-0ez7coyFBQFjZtId+RJqJ+EQs61w9xARfqjqK0AD9vIUkSxWD4HvPt80+5evebZ1tTnv1GYKrPTipx7kOW5ipA==" - }, - "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==" - }, - "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fast-url-parser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", - "requires": { - "punycode": "^1.3.2" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" - } - } - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "requires": { - "reusify": "^1.0.4" - } - }, - "faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "fbemitter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", - "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", - "requires": { - "fbjs": "^3.0.0" - } - }, - "fbjs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.4.tgz", - "integrity": "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==", - "requires": { - "cross-fetch": "^3.1.5", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.30" - } - }, - "fbjs-css-vars": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" - }, - "feed": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", - "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", - "requires": { - "xml-js": "^1.6.11" - } - }, - "file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "filesize": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", - "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==" - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "requires": { - "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" - } - }, - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flux": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.3.tgz", - "integrity": "sha512-yKAbrp7JhZhj6uiT1FTuVMlIAT1J4jqEyBpFApi1kxpGZCvacMVc/t1pMQyotqHhAgvoE3bNvAykhCo2CLjnYw==", - "requires": { - "fbemitter": "^3.0.0", - "fbjs": "^3.0.1" - } - }, - "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" - }, - "fork-ts-checker-webpack-plugin": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", - "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", - "requires": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "dependencies": { - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - } - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" - } + "node": ">=6" } }, - "forwarded": { + "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } }, - "fraction.js": { + "node_modules/fraction.js": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==" + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } }, - "fresh": { + "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } }, - "fs-extra": { + "node_modules/fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "requires": { + "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" } }, - "fs-monkey": { + "node_modules/fs-monkey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==" }, - "fs.realpath": { + "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, - "fsevents": { + "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } }, - "function-bind": { + "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, - "function.prototype.name": { + "node_modules/function.prototype.name": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.0", "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "functions-have-names": { + "node_modules/functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "gensync": { + "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } }, - "get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "requires": { + "node_modules/get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "get-own-enumerable-property-symbols": { + "node_modules/get-own-enumerable-property-symbols": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" }, - "get-stream": { + "node_modules/get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "requires": { + "dependencies": { "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "get-symbol-description": { + "node_modules/get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "github-slugger": { + "node_modules/github-slugger": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==" }, - "glob": { + "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { + "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "glob-parent": { + "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { + "dependencies": { "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, - "glob-to-regexp": { + "node_modules/glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" }, - "global-dirs": { + "node_modules/global-dirs": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "requires": { + "dependencies": { "ini": "2.0.0" }, - "dependencies": { - "ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" - } + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-dirs/node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "engines": { + "node": ">=10" } }, - "global-modules": { + "node_modules/global-modules": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "requires": { + "dependencies": { "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "global-prefix": { + "node_modules/global-prefix": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "requires": { + "dependencies": { "ini": "^1.3.5", "kind-of": "^6.0.2", "which": "^1.3.1" }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - } + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, - "globals": { + "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "globby": { + "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "requires": { + "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.2.9", "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "got": { + "node_modules/got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "requires": { + "dependencies": { "@sindresorhus/is": "^0.14.0", "@szmarczak/http-timer": "^1.1.2", "cacheable-request": "^6.0.0", @@ -21662,122 +7916,166 @@ "to-readable-stream": "^1.0.0", "url-parse-lax": "^3.0.0" }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/got/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dependencies": { - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } - } + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "graceful-fs": { + "node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, - "graphlib": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", - "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", - "requires": { - "lodash": "^4.17.15" - } - }, - "gray-matter": { + "node_modules/gray-matter": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "requires": { + "dependencies": { "js-yaml": "^3.13.1", "kind-of": "^6.0.2", "section-matter": "^1.0.0", "strip-bom-string": "^1.0.0" }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/gray-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } + "sprintf-js": "~1.0.2" } }, - "gzip-size": { + "node_modules/gray-matter/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/gzip-size": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "requires": { + "dependencies": { "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "handle-thing": { + "node_modules/handle-thing": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" }, - "has": { + "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { + "dependencies": { "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" } }, - "has-bigints": { + "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "has-flag": { + "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==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } }, - "has-property-descriptors": { + "node_modules/has-property-descriptors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "requires": { + "dependencies": { "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "has-symbols": { + "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "has-tostringtag": { + "node_modules/has-tostringtag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "requires": { + "dependencies": { "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "has-yarn": { + "node_modules/has-yarn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "engines": { + "node": ">=8" + } }, - "hast-to-hyperscript": { + "node_modules/hast-to-hyperscript": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", - "requires": { + "dependencies": { "@types/unist": "^2.0.3", "comma-separated-tokens": "^1.0.0", "property-information": "^5.3.0", @@ -21785,31 +8083,43 @@ "style-to-object": "^0.3.0", "unist-util-is": "^4.0.0", "web-namespaces": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "hast-util-from-parse5": { + "node_modules/hast-util-from-parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", - "requires": { + "dependencies": { "@types/parse5": "^5.0.0", "hastscript": "^6.0.0", "property-information": "^5.0.0", "vfile": "^4.0.0", "vfile-location": "^3.2.0", "web-namespaces": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "hast-util-parse-selector": { + "node_modules/hast-util-parse-selector": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", - "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==" + "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "hast-util-raw": { + "node_modules/hast-util-raw": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", - "requires": { + "dependencies": { "@types/hast": "^2.0.0", "hast-util-from-parse5": "^6.0.0", "hast-util-to-parse5": "^6.0.0", @@ -21821,48 +8131,66 @@ "xtend": "^4.0.0", "zwitch": "^1.0.0" }, - "dependencies": { - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "hast-util-to-parse5": { + "node_modules/hast-util-raw/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "node_modules/hast-util-to-parse5": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", - "requires": { + "dependencies": { "hast-to-hyperscript": "^9.0.0", "property-information": "^5.0.0", "web-namespaces": "^1.0.0", "xtend": "^4.0.0", "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "hastscript": { + "node_modules/hastscript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", - "requires": { + "dependencies": { "@types/hast": "^2.0.0", "comma-separated-tokens": "^1.0.0", "hast-util-parse-selector": "^2.0.0", "property-information": "^5.0.0", "space-separated-tokens": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "he": { + "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" + } }, - "history": { + "node_modules/heap": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" + }, + "node_modules/history": { "version": "4.10.1", "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "requires": { + "dependencies": { "@babel/runtime": "^7.1.2", "loose-envify": "^1.2.0", "resolve-pathname": "^3.0.0", @@ -21871,69 +8199,67 @@ "value-equal": "^1.0.1" } }, - "hoist-non-react-statics": { + "node_modules/hoist-non-react-statics": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "requires": { + "dependencies": { "react-is": "^16.7.0" } }, - "hpack.js": { + "node_modules/hpack.js": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "requires": { + "dependencies": { "inherits": "^2.0.1", "obuf": "^1.0.0", "readable-stream": "^2.0.1", "wbuf": "^1.1.0" - }, + } + }, + "node_modules/hpack.js/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" } }, - "html-entities": { + "node_modules/html-entities": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" }, - "html-minifier-terser": { + "node_modules/html-minifier-terser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "requires": { + "dependencies": { "camel-case": "^4.1.2", "clean-css": "^5.2.2", "commander": "^8.3.0", @@ -21942,767 +8268,1178 @@ "relateurl": "^0.2.7", "terser": "^5.10.0" }, - "dependencies": { - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" - } + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "engines": { + "node": ">= 12" } }, - "html-tags": { + "node_modules/html-tags": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", - "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==" + "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "html-void-elements": { + "node_modules/html-void-elements": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", - "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==" + "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "html-webpack-plugin": { + "node_modules/html-webpack-plugin": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", - "requires": { + "dependencies": { "@types/html-minifier-terser": "^6.0.0", "html-minifier-terser": "^6.0.2", "lodash": "^4.17.21", "pretty-error": "^4.0.0", "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "webpack": "^5.20.0" } }, - "htmlparser2": { + "node_modules/htmlparser2": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", - "requires": { + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", "domutils": "^3.0.1", "entities": "^4.3.0" } }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" }, - "http-deceiver": { + "node_modules/http-deceiver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" }, - "http-errors": { + "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { + "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", "statuses": "2.0.1", "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" } }, - "http-parser-js": { + "node_modules/http-parser-js": { "version": "0.5.8", "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" }, - "http-proxy": { + "node_modules/http-proxy": { "version": "1.18.1", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "requires": { + "dependencies": { "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "http-proxy-middleware": { + "node_modules/http-proxy-middleware": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "requires": { + "dependencies": { "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", "is-glob": "^4.0.1", "is-plain-obj": "^3.0.0", "micromatch": "^4.0.2" }, - "dependencies": { - "is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==" + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true } } }, - "human-signals": { + "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/human-signals": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "engines": { + "node": ">=8.12.0" + } }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "icss-utils": { + "node_modules/icss-utils": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "requires": {} + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "engines": { + "node": ">= 4" + } }, - "image-size": { + "node_modules/image-size": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", - "requires": { + "dependencies": { "queue": "6.0.2" + }, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=14.0.0" } }, - "immer": { - "version": "9.0.16", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.16.tgz", - "integrity": "sha512-qenGE7CstVm1NrHQbMh8YaSzTZTFNP3zPqr3YU0S0UY441j4bJTg4A2Hh5KAhwgaiU6ZZ1Ar6y/2f4TblnMReQ==" + "node_modules/immer": { + "version": "9.0.19", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.19.tgz", + "integrity": "sha512-eY+Y0qcsB4TZKwgQzLaE/lqYMlKhv5J9dyd2RhhtGhNo2njPXDqU9XPfcNfa3MIDsdtZt5KlkIsirlo4dHsWdQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } }, - "import-fresh": { + "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "requires": { + "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "import-lazy": { + "node_modules/import-lazy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==" + "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", + "engines": { + "node": ">=4" + } }, - "imurmurhash": { + "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "engines": { + "node": ">=0.8.19" + } }, - "indent-string": { + "node_modules/indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } }, - "infima": { + "node_modules/infima": { "version": "0.2.0-alpha.42", "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.42.tgz", - "integrity": "sha512-ift8OXNbQQwtbIt6z16KnSWP7uJ/SysSMFI4F87MNRTicypfl4Pv3E2OGVv6N3nSZFJvA8imYulCBS64iyHYww==" + "integrity": "sha512-ift8OXNbQQwtbIt6z16KnSWP7uJ/SysSMFI4F87MNRTicypfl4Pv3E2OGVv6N3nSZFJvA8imYulCBS64iyHYww==", + "engines": { + "node": ">=12" + } }, - "inflight": { + "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "requires": { + "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, - "inherits": { + "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "ini": { + "node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, - "inline-style-parser": { + "node_modules/inline-style-parser": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "requires": { - "get-intrinsic": "^1.1.0", + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dependencies": { + "get-intrinsic": "^1.2.0", "has": "^1.0.3", "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" } }, - "internmap": { + "node_modules/internmap": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", - "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==" + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "engines": { + "node": ">=12" + } }, - "interpret": { + "node_modules/interpret": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "engines": { + "node": ">= 0.10" + } }, - "invariant": { + "node_modules/invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "requires": { + "dependencies": { "loose-envify": "^1.0.0" } }, - "ipaddr.js": { + "node_modules/ipaddr.js": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==" + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "engines": { + "node": ">= 10" + } }, - "is-alphabetical": { + "node_modules/is-alphabetical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "is-alphanumerical": { + "node_modules/is-alphanumerical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "requires": { + "dependencies": { "is-alphabetical": "^1.0.0", "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", + "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-arrayish": { + "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, - "is-bigint": { + "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "requires": { + "dependencies": { "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-binary-path": { + "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "requires": { + "dependencies": { "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "is-boolean-object": { + "node_modules/is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-buffer": { + "node_modules/is-buffer": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } }, - "is-callable": { + "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "is-ci": { + "node_modules/is-ci": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "requires": { + "dependencies": { "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" } }, - "is-core-module": { + "node_modules/is-ci/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "node_modules/is-core-module": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "requires": { + "dependencies": { "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-date-object": { + "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "requires": { + "dependencies": { "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-decimal": { + "node_modules/is-decimal": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "is-docker": { + "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==" + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "is-extendable": { + "node_modules/is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } }, - "is-extglob": { + "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } }, - "is-fullwidth-code-point": { + "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==" + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } }, - "is-glob": { + "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { + "dependencies": { "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-hexadecimal": { + "node_modules/is-hexadecimal": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "is-installed-globally": { + "node_modules/is-installed-globally": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "requires": { + "dependencies": { "global-dirs": "^3.0.0", "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "is-negative-zero": { + "node_modules/is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "is-npm": { + "node_modules/is-npm": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==" + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "is-number": { + "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } }, - "is-number-object": { + "node_modules/is-number-object": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "requires": { + "dependencies": { "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-obj": { + "node_modules/is-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==" + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "engines": { + "node": ">=0.10.0" + } }, - "is-path-cwd": { + "node_modules/is-path-cwd": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "engines": { + "node": ">=6" + } }, - "is-path-inside": { + "node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "engines": { + "node": ">=8" + } }, - "is-plain-obj": { + "node_modules/is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "engines": { + "node": ">=8" + } }, - "is-plain-object": { + "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { + "dependencies": { "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-regex": { + "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-regexp": { + "node_modules/is-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==" + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "engines": { + "node": ">=0.10.0" + } }, - "is-root": { + "node_modules/is-root": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", + "engines": { + "node": ">=6" + } }, - "is-shared-array-buffer": { + "node_modules/is-shared-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "requires": { + "dependencies": { "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-stream": { + "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==" + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "is-string": { + "node_modules/is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "requires": { + "dependencies": { "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-symbol": { + "node_modules/is-symbol": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "requires": { + "dependencies": { "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-typedarray": { + "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, - "is-weakref": { + "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "requires": { + "dependencies": { "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-whitespace-character": { + "node_modules/is-whitespace-character": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", - "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==" + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "is-word-character": { + "node_modules/is-word-character": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", - "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==" + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "is-wsl": { + "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==", - "requires": { + "dependencies": { "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "is-yarn-global": { + "node_modules/is-yarn-global": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" }, - "isarray": { + "node_modules/isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" }, - "isexe": { + "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, - "isobject": { + "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" - }, - "jest-util": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.3.1.tgz", - "integrity": "sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ==", - "requires": { - "@jest/types": "^29.3.1", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-util": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.4.3.tgz", + "integrity": "sha512-ToSGORAz4SSSoqxDSylWX8JzkOQR7zoBtNRsA7e+1WUX5F8jrOwaNpuh1YfJHJKDHXLHmObv5eOjejUd+/Ws+Q==", + "dependencies": { + "@jest/types": "^29.4.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" }, - "dependencies": { - "ci-info": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.6.2.tgz", - "integrity": "sha512-lVZdhvbEudris15CLytp2u6Y0p5EKfztae9Fqa189MfNmln9F33XuH69v5fvNfiRN5/0eAUz2yJL3mo+nhaRKg==" - } + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "requires": { + "node_modules/jest-worker": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.4.3.tgz", + "integrity": "sha512-GLHN/GTAAMEy5BFdvpUfzr9Dr80zQqBrh0fz1mtRMe05hqP45+HfQltu7oTBfduD0UeZs09d+maFtFYAXFWvAA==", + "dependencies": { "@types/node": "*", + "jest-util": "^29.4.3", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dependencies": { - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "requires": { - "has-flag": "^4.0.0" - } - } + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "joi": { - "version": "17.7.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.7.0.tgz", - "integrity": "sha512-1/ugc8djfn93rTE3WRKdCzGGt/EtiYKxITMO4Wiv6q5JL1gl9ePt4kBsl1S499nbosspfctIQTpYIhSmHA3WAg==", - "requires": { + "node_modules/joi": { + "version": "17.8.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.8.3.tgz", + "integrity": "sha512-q5Fn6Tj/jR8PfrLrx4fpGH4v9qM6o+vDUfD4/3vxxyg34OmKcNqYZ1qn2mpLza96S8tL0p0rIw2gOZX+/cTg9w==", + "dependencies": { "@hapi/hoek": "^9.0.0", "@hapi/topo": "^5.0.0", "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.0", + "@sideway/formula": "^3.0.1", "@sideway/pinpoint": "^2.0.0" } }, - "js-tokens": { + "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, - "js-yaml": { + "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "requires": { + "dependencies": { "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "jsesc": { + "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } }, - "json-buffer": { + "node_modules/json-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" }, - "json-parse-even-better-errors": { + "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, - "json-schema-traverse": { + "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, - "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } }, - "jsonfile": { + "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", + "dependencies": { "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "keyv": { + "node_modules/keyv": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "requires": { + "dependencies": { "json-buffer": "3.0.0" } }, - "khroma": { + "node_modules/khroma": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz", "integrity": "sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==" }, - "kind-of": { + "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } }, - "kleur": { + "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "engines": { + "node": ">=6" + } }, - "klona": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==" + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "engines": { + "node": ">= 8" + } }, - "latest-version": { + "node_modules/latest-version": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "requires": { + "dependencies": { "package-json": "^6.3.0" + }, + "engines": { + "node": ">=8" } }, - "leven": { + "node_modules/layout-base": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", + "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==" + }, + "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "engines": { + "node": ">=6" + } }, - "lilconfig": { + "node_modules/lilconfig": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", - "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==" + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "engines": { + "node": ">=10" + } }, - "lines-and-columns": { + "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, - "loader-runner": { + "node_modules/loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==" + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "engines": { + "node": ">=6.11.5" + } }, - "loader-utils": { + "node_modules/loader-utils": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "requires": { + "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" } }, - "locate-path": { + "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { + "dependencies": { "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" } }, - "lodash": { + "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "lodash.curry": { + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "node_modules/lodash.curry": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==" }, - "lodash.debounce": { + "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, - "lodash.flow": { + "node_modules/lodash.flow": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", "integrity": "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==" }, - "lodash.memoize": { + "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" }, - "lodash.uniq": { + "node_modules/lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" }, - "loose-envify": { + "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { + "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" } }, - "lower-case": { + "node_modules/lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "requires": { + "dependencies": { "tslib": "^2.0.3" } }, - "lowercase-keys": { + "node_modules/lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "engines": { + "node": ">=0.10.0" + } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": { + "yallist": "^3.0.2" } }, - "make-dir": { + "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "requires": { + "dependencies": { "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" } }, - "markdown-escapes": { + "node_modules/markdown-escapes": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", - "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==" + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "mdast-squeeze-paragraphs": { + "node_modules/mdast-squeeze-paragraphs": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", - "requires": { + "dependencies": { "unist-util-remove": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "mdast-util-definitions": { + "node_modules/mdast-util-definitions": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", - "requires": { + "dependencies": { "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "mdast-util-to-hast": { + "node_modules/mdast-util-to-hast": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", - "requires": { + "dependencies": { "@types/mdast": "^3.0.0", "@types/unist": "^2.0.0", "mdast-util-definitions": "^4.0.0", @@ -22711,968 +9448,1624 @@ "unist-util-generated": "^1.0.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "mdast-util-to-string": { + "node_modules/mdast-util-to-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==" + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + "node_modules/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" }, - "mdurl": { + "node_modules/mdurl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" }, - "mdx-mermaid": { + "node_modules/mdx-mermaid": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mdx-mermaid/-/mdx-mermaid-1.3.2.tgz", "integrity": "sha512-8kw0tg3isKKBFzFwoe2DhIaEgKYtVeJXQtxZCCrdTPO0CTpXHnTHT0atDqsp7YkXi5iUCp/zAZPZu1cmr68T3w==", - "requires": {} + "peerDependencies": { + "mermaid": ">=8.11.0", + "react": "^16.8.4 || ^17.0.0 || ^18.0.0", + "unist-util-visit": "^2.0.0" + } }, - "media-typer": { + "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } }, - "memfs": { - "version": "3.4.12", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.12.tgz", - "integrity": "sha512-BcjuQn6vfqP+k100e0E9m61Hyqa//Brp+I3f0OBmN0ATHlFA8vx3Lt8z57R3u2bPqe3WGDBC+nF72fTH7isyEw==", - "requires": { + "node_modules/memfs": { + "version": "3.4.13", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.13.tgz", + "integrity": "sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg==", + "dependencies": { "fs-monkey": "^1.0.3" + }, + "engines": { + "node": ">= 4.0.0" } }, - "merge-descriptors": { + "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, - "merge-stream": { + "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==" }, - "merge2": { + "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } }, - "mermaid": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-9.2.2.tgz", - "integrity": "sha512-6s7eKMqFJGS+0MYjmx8f6ZigqKBJVoSx5ql2gw6a4Aa+WJ49QiEJg7gPwywaBg3DZMs79UP7trESp4+jmaQccw==", - "requires": { + "node_modules/mermaid": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-9.4.0.tgz", + "integrity": "sha512-4PWbOND7CNRbjHrdG3WUUGBreKAFVnMhdlPjttuUkeHbCQmAHkwzSh5dGwbrKmXGRaR4uTvfFVYzUcg++h0DkA==", + "dependencies": { "@braintree/sanitize-url": "^6.0.0", + "cytoscape": "^3.23.0", + "cytoscape-cose-bilkent": "^4.1.0", + "cytoscape-fcose": "^2.1.0", "d3": "^7.0.0", - "dagre": "^0.8.5", - "dagre-d3": "^0.6.4", - "dompurify": "2.4.0", - "fast-clone": "^1.5.13", - "graphlib": "^2.1.8", + "dagre-d3-es": "7.0.8", + "dompurify": "2.4.3", + "elkjs": "^0.8.2", "khroma": "^2.0.0", - "lodash": "^4.17.21", - "moment-mini": "^2.24.0", + "lodash-es": "^4.17.21", + "moment": "^2.29.4", "non-layered-tidy-tree-layout": "^2.0.2", "stylis": "^4.1.2", + "ts-dedent": "^2.2.0", "uuid": "^9.0.0" } }, - "methods": { + "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } }, - "micromatch": { + "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "requires": { + "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" } }, - "mime": { + "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + "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==", + "engines": { + "node": ">= 0.6" + } }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" + "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==", + "dependencies": { + "mime-db": "~1.33.0" + }, + "engines": { + "node": ">= 0.6" } }, - "mimic-fn": { + "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==" + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } }, - "mimic-response": { + "node_modules/mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "engines": { + "node": ">=4" + } }, - "mini-css-extract-plugin": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.0.tgz", - "integrity": "sha512-auqtVo8KhTScMsba7MbijqZTfibbXiBNlPAQbsVt7enQfcDYLdgG57eGxMqwVU3mfeWANY4F1wUg+rMF+ycZgw==", - "requires": { + "node_modules/mini-css-extract-plugin": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.2.tgz", + "integrity": "sha512-EdlUizq13o0Pd+uCp+WO/JpkLvHRVGt97RqfeGhXqAcorYo1ypJSpkV+WDT0vY/kmh/p7wRdJNJtuyK540PXDw==", + "dependencies": { "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/mini-css-extract-plugin/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==" + }, + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "minimalistic-assert": { + "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, - "minimatch": { + "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { + "dependencies": { "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "mkdirp": { + "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "requires": { + "dependencies": { "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" } }, - "moment-mini": { + "node_modules/moment": { "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment-mini/-/moment-mini-2.29.4.tgz", - "integrity": "sha512-uhXpYwHFeiTbY9KSgPPRoo1nt8OxNVdMVoTBYHfSEKeRkIkwGpO+gERmhuhBtzfaeOyTkykSrm2+noJBgqt3Hg==" + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "engines": { + "node": "*" + } }, - "mri": { + "node_modules/mri": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==" + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "engines": { + "node": ">=4" + } }, - "mrmime": { + "node_modules/mrmime": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==" + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "engines": { + "node": ">=10" + } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "multicast-dns": { + "node_modules/multicast-dns": { "version": "7.2.5", "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "requires": { + "dependencies": { "dns-packet": "^5.2.2", "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" } }, - "multimatch": { + "node_modules/multimatch": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz", "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==", - "requires": { + "dependencies": { "@types/minimatch": "^3.0.3", "array-differ": "^3.0.0", "array-union": "^2.1.0", "arrify": "^2.0.1", "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" } }, - "nanoid": { + "node_modules/nanoid": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } }, - "negotiator": { + "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } }, - "neo-async": { + "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, - "no-case": { + "node_modules/no-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "requires": { + "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" } }, - "node-emoji": { + "node_modules/node-emoji": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", - "requires": { + "dependencies": { "lodash": "^4.17.21" } }, - "node-fetch": { + "node_modules/node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { + "dependencies": { "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node-forge": { + "node_modules/node-forge": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "engines": { + "node": ">= 6.13.0" + } }, - "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + "node_modules/node-releases": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" }, - "non-layered-tidy-tree-layout": { + "node_modules/non-layered-tidy-tree-layout": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==" }, - "normalize-path": { + "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } }, - "normalize-range": { + "node_modules/normalize-range": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "engines": { + "node": ">=0.10.0" + } }, - "normalize-url": { + "node_modules/normalize-url": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "npm-run-path": { + "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==", - "requires": { + "dependencies": { "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "nprogress": { + "node_modules/nprogress": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" }, - "nth-check": { + "node_modules/nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "requires": { + "dependencies": { "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "object-assign": { + "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "object-keys": { + "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } }, - "object.assign": { + "node_modules/object.assign": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "object.getownpropertydescriptors": { + "node_modules/object.getownpropertydescriptors": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", - "requires": { + "dependencies": { "array.prototype.reduce": "^1.0.5", "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "object.values": { + "node_modules/object.values": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "obuf": { + "node_modules/obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" }, - "on-finished": { + "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "requires": { + "dependencies": { "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" } }, - "on-headers": { + "node_modules/on-headers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "engines": { + "node": ">= 0.8" + } }, - "once": { + "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { + "dependencies": { "wrappy": "1" } }, - "onetime": { + "node_modules/onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "requires": { + "dependencies": { "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "requires": { + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "opener": { + "node_modules/opener": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==" + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "bin": { + "opener": "bin/opener-bin.js" + } }, - "p-cancelable": { + "node_modules/p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "engines": { + "node": ">=6" + } }, - "p-limit": { + "node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { + "dependencies": { "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "p-locate": { + "node_modules/p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { + "dependencies": { "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" } }, - "p-map": { + "node_modules/p-map": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "requires": { + "dependencies": { "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "p-retry": { + "node_modules/p-retry": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "requires": { + "dependencies": { "@types/retry": "0.12.0", "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" } }, - "p-try": { + "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } }, - "package-json": { + "node_modules/package-json": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "requires": { + "dependencies": { "got": "^9.6.0", "registry-auth-token": "^4.0.0", "registry-url": "^5.0.0", "semver": "^6.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" } }, - "param-case": { + "node_modules/param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "requires": { + "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" } }, - "parent-module": { + "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "requires": { + "dependencies": { "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "parse-entities": { + "node_modules/parse-entities": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "requires": { + "dependencies": { "character-entities": "^1.0.0", "character-entities-legacy": "^1.0.0", "character-reference-invalid": "^1.0.0", "is-alphanumerical": "^1.0.0", "is-decimal": "^1.0.0", "is-hexadecimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "parse-json": { + "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "requires": { + "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "parse-numeric-range": { + "node_modules/parse-numeric-range": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" }, - "parse5": { + "node_modules/parse5": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "requires": { + "dependencies": { "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "parse5-htmlparser2-tree-adapter": { + "node_modules/parse5-htmlparser2-tree-adapter": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "requires": { + "dependencies": { "domhandler": "^5.0.2", "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "parseurl": { + "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } }, - "pascal-case": { + "node_modules/pascal-case": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "requires": { + "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" } }, - "path-exists": { + "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } }, - "path-is-absolute": { + "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } }, - "path-is-inside": { + "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==" }, - "path-key": { + "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==" + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } }, - "path-parse": { + "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, - "path-to-regexp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", - "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" + "node_modules/path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "dependencies": { + "isarray": "0.0.1" + } }, - "path-type": { + "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } }, - "picocolors": { + "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, - "picomatch": { + "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, - "pkg-dir": { + "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "requires": { + "dependencies": { "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "pkg-up": { + "node_modules/pkg-up": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "requires": { + "dependencies": { "find-up": "^3.0.0" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" - } + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "engines": { + "node": ">=4" } }, - "postcss": { - "version": "8.4.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", - "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==", - "requires": { + "node_modules/postcss": { + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { "nanoid": "^3.3.4", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" } }, - "postcss-calc": { + "node_modules/postcss-calc": { "version": "8.2.4", "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "requires": { + "dependencies": { "postcss-selector-parser": "^6.0.9", "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" } }, - "postcss-colormin": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", - "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", - "requires": { - "browserslist": "^4.16.6", + "node_modules/postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "dependencies": { + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", "colord": "^2.9.1", "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-convert-values": { + "node_modules/postcss-convert-values": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", - "requires": { + "dependencies": { "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-discard-comments": { + "node_modules/postcss-discard-comments": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "requires": {} + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } }, - "postcss-discard-duplicates": { + "node_modules/postcss-discard-duplicates": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "requires": {} + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } }, - "postcss-discard-empty": { + "node_modules/postcss-discard-empty": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "requires": {} + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } }, - "postcss-discard-overridden": { + "node_modules/postcss-discard-overridden": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "requires": {} + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } }, - "postcss-discard-unused": { + "node_modules/postcss-discard-unused": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz", "integrity": "sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==", - "requires": { + "dependencies": { "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-loader": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.1.tgz", - "integrity": "sha512-VRviFEyYlLjctSM93gAZtcJJ/iSkPZ79zWbN/1fSH+NisBByEiVLqpdVDrPLVSi8DX0oJo12kL/GppTBdKVXiQ==", - "requires": { + "node_modules/postcss-loader": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.2.tgz", + "integrity": "sha512-fUJzV/QH7NXUAqV8dWJ9Lg4aTkDCezpTS5HgJ2DvqznexTbSTxgi/dTECvTZ15BwKTtk8G/bqI/QTu2HPd3ZCg==", + "dependencies": { "cosmiconfig": "^7.0.0", "klona": "^2.0.5", - "semver": "^7.3.7" + "semver": "^7.3.8" }, - "dependencies": { - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "requires": { - "lru-cache": "^6.0.0" - } - } + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" } }, - "postcss-merge-idents": { + "node_modules/postcss-merge-idents": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz", "integrity": "sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==", - "requires": { + "dependencies": { "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-merge-longhand": { + "node_modules/postcss-merge-longhand": { "version": "5.1.7", "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", - "requires": { + "dependencies": { "postcss-value-parser": "^4.2.0", "stylehacks": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-merge-rules": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.3.tgz", - "integrity": "sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA==", - "requires": { + "node_modules/postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "dependencies": { "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", "cssnano-utils": "^3.1.0", "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-minify-font-values": { + "node_modules/postcss-minify-font-values": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", - "requires": { + "dependencies": { "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-minify-gradients": { + "node_modules/postcss-minify-gradients": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", - "requires": { + "dependencies": { "colord": "^2.9.1", "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-minify-params": { + "node_modules/postcss-minify-params": { "version": "5.1.4", "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", - "requires": { + "dependencies": { "browserslist": "^4.21.4", "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-minify-selectors": { + "node_modules/postcss-minify-selectors": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", - "requires": { + "dependencies": { "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-modules-extract-imports": { + "node_modules/postcss-modules-extract-imports": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "requires": {} + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } }, - "postcss-modules-local-by-default": { + "node_modules/postcss-modules-local-by-default": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "requires": { + "dependencies": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^6.0.2", "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "postcss-modules-scope": { + "node_modules/postcss-modules-scope": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "requires": { + "dependencies": { "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "postcss-modules-values": { + "node_modules/postcss-modules-values": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "requires": { + "dependencies": { "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "postcss-normalize-charset": { + "node_modules/postcss-normalize-charset": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "requires": {} + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } }, - "postcss-normalize-display-values": { + "node_modules/postcss-normalize-display-values": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", - "requires": { + "dependencies": { "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-normalize-positions": { + "node_modules/postcss-normalize-positions": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", - "requires": { + "dependencies": { "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-normalize-repeat-style": { + "node_modules/postcss-normalize-repeat-style": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", - "requires": { + "dependencies": { "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-normalize-string": { + "node_modules/postcss-normalize-string": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", - "requires": { + "dependencies": { "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-normalize-timing-functions": { + "node_modules/postcss-normalize-timing-functions": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "requires": { + "dependencies": { "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-normalize-unicode": { + "node_modules/postcss-normalize-unicode": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", - "requires": { + "dependencies": { "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-normalize-url": { + "node_modules/postcss-normalize-url": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", - "requires": { + "dependencies": { "normalize-url": "^6.0.1", "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-normalize-whitespace": { + "node_modules/postcss-normalize-whitespace": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", - "requires": { + "dependencies": { "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-ordered-values": { + "node_modules/postcss-ordered-values": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", - "requires": { + "dependencies": { "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-reduce-idents": { + "node_modules/postcss-reduce-idents": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz", "integrity": "sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==", - "requires": { + "dependencies": { "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-reduce-initial": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.1.tgz", - "integrity": "sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w==", - "requires": { + "node_modules/postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "dependencies": { "browserslist": "^4.21.4", "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-reduce-transforms": { + "node_modules/postcss-reduce-transforms": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", - "requires": { + "dependencies": { "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-selector-parser": { + "node_modules/postcss-selector-parser": { "version": "6.0.11", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", - "requires": { + "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" } }, - "postcss-sort-media-queries": { + "node_modules/postcss-sort-media-queries": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.3.0.tgz", "integrity": "sha512-jAl8gJM2DvuIJiI9sL1CuiHtKM4s5aEIomkU8G3LFvbP+p8i7Sz8VV63uieTgoewGqKbi+hxBTiOKJlB35upCg==", - "requires": { + "dependencies": { "sort-css-media-queries": "2.1.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.4.16" } }, - "postcss-svgo": { + "node_modules/postcss-svgo": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "requires": { + "dependencies": { "postcss-value-parser": "^4.2.0", "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/postcss-svgo/node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/postcss-svgo/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/postcss-svgo/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/postcss-svgo/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/postcss-svgo/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/postcss-svgo/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/postcss-svgo/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "node_modules/postcss-svgo/node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" } }, - "postcss-unique-selectors": { + "node_modules/postcss-unique-selectors": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", - "requires": { + "dependencies": { "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-value-parser": { + "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, - "postcss-zindex": { + "node_modules/postcss-zindex": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.1.0.tgz", "integrity": "sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==", - "requires": {} + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } }, - "prepend-http": { + "node_modules/prepend-http": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==" + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", + "engines": { + "node": ">=4" + } }, - "prettier": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.0.tgz", - "integrity": "sha512-9Lmg8hTFZKG0Asr/kW9Bp8tJjRVluO8EJQVfY2T7FMw9T5jy4I/Uvx0Rca/XWf50QQ1/SS48+6IJWnrb+2yemA==" + "node_modules/prettier": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", + "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } }, - "pretty-error": { + "node_modules/pretty-error": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "requires": { + "dependencies": { "lodash": "^4.17.20", "renderkid": "^3.0.0" } }, - "pretty-quick": { + "node_modules/pretty-quick": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-3.1.3.tgz", "integrity": "sha512-kOCi2FJabvuh1as9enxYmrnBC6tVMoVOenMaBqRfsvBHB0cbpYHjdQEpSglpASDFEXVwplpcGR4CLEaisYAFcA==", - "requires": { + "dependencies": { "chalk": "^3.0.0", "execa": "^4.0.0", "find-up": "^4.1.0", @@ -23680,217 +11073,310 @@ "mri": "^1.1.5", "multimatch": "^4.0.0" }, + "bin": { + "pretty-quick": "bin/pretty-quick.js" + }, + "engines": { + "node": ">=10.13" + }, + "peerDependencies": { + "prettier": ">=2.0.0" + } + }, + "node_modules/pretty-quick/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dependencies": { - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" } }, - "pretty-time": { + "node_modules/pretty-time": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", - "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==" + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", + "engines": { + "node": ">=4" + } }, - "prism-react-renderer": { + "node_modules/prism-react-renderer": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz", "integrity": "sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg==", - "requires": {} + "peerDependencies": { + "react": ">=0.14.9" + } }, - "prismjs": { + "node_modules/prismjs": { "version": "1.29.0", "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==" + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "engines": { + "node": ">=6" + } }, - "process-nextick-args": { + "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, - "promise": { + "node_modules/promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "requires": { + "dependencies": { "asap": "~2.0.3" } }, - "prompts": { + "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "requires": { + "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" } }, - "prop-types": { + "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "requires": { + "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, - "property-information": { + "node_modules/property-information": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "requires": { + "dependencies": { "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "proxy-addr": { + "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "requires": { + "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" }, - "dependencies": { - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - } + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" } }, - "pump": { + "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { + "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" }, - "pupa": { + "node_modules/pupa": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "requires": { + "dependencies": { "escape-goat": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "pure-color": { + "node_modules/pure-color": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==" }, - "q": { + "node_modules/q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } }, - "qs": { + "node_modules/qs": { "version": "6.11.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "requires": { + "dependencies": { "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "queue": { + "node_modules/queue": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "requires": { + "dependencies": { "inherits": "~2.0.3" } }, - "queue-microtask": { + "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "randombytes": { + "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { + "dependencies": { "safe-buffer": "^5.1.0" } }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + "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==", + "engines": { + "node": ">= 0.6" + } }, - "raw-body": { + "node_modules/raw-body": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "requires": { + "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - } + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" } }, - "rc": { + "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { + "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, - "dependencies": { - "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==" - } + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/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==", + "engines": { + "node": ">=0.10.0" } }, - "react": { + "node_modules/react": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "requires": { + "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "react-base16-styling": { + "node_modules/react-base16-styling": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", "integrity": "sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==", - "requires": { + "dependencies": { "base16": "^1.0.0", "lodash.curry": "^4.0.1", "lodash.flow": "^3.3.0", "pure-color": "^1.2.0" } }, - "react-dev-utils": { + "node_modules/react-countup": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/react-countup/-/react-countup-6.4.1.tgz", + "integrity": "sha512-FxQ7qaNnnbA+Px9RebOZY4Tbawa1bhgpVPlUqRemZb90mh3f3OqyHVgr1SZqnJgaRxR3uEYqgkszgkDgFVCeEw==", + "dependencies": { + "@rollup/plugin-babel": "^6.0.2", + "countup.js": "^2.4.1" + }, + "peerDependencies": { + "react": ">= 16.3.0" + } + }, + "node_modules/react-dev-utils": { "version": "12.0.1", "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", - "requires": { + "dependencies": { "@babel/code-frame": "^7.16.0", "address": "^1.1.2", "browserslist": "^4.18.1", @@ -23916,122 +11402,172 @@ "strip-ansi": "^6.0.1", "text-table": "^0.2.0" }, + "engines": { + "node": ">=14" + } + }, + "node_modules/react-dev-utils/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dependencies": { - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==" - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "requires": { - "p-limit": "^3.0.2" - } - } + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/react-dev-utils/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "react-dom": { + "node_modules/react-dom": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "requires": { + "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "scheduler": "^0.20.2" + }, + "peerDependencies": { + "react": "17.0.2" } }, - "react-error-overlay": { + "node_modules/react-error-overlay": { "version": "6.0.11", "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" }, - "react-fast-compare": { + "node_modules/react-fast-compare": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" }, - "react-helmet-async": { + "node_modules/react-helmet-async": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", - "requires": { + "dependencies": { "@babel/runtime": "^7.12.5", "invariant": "^2.2.4", "prop-types": "^15.7.2", "react-fast-compare": "^3.2.0", "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": "^16.6.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" } }, - "react-is": { + "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, - "react-json-view": { + "node_modules/react-json-view": { "version": "1.21.3", "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", - "requires": { + "dependencies": { "flux": "^4.0.1", "react-base16-styling": "^0.6.0", "react-lifecycles-compat": "^3.0.4", "react-textarea-autosize": "^8.3.2" + }, + "peerDependencies": { + "react": "^17.0.0 || ^16.3.0 || ^15.5.4", + "react-dom": "^17.0.0 || ^16.3.0 || ^15.5.4" } }, - "react-lifecycles-compat": { + "node_modules/react-lifecycles-compat": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" }, - "react-loadable": { - "version": "npm:@docusaurus/react-loadable@5.5.2", + "node_modules/react-loadable": { + "name": "@docusaurus/react-loadable", + "version": "5.5.2", "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", - "requires": { + "dependencies": { "@types/react": "*", "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": "*" } }, - "react-loadable-ssr-addon-v5-slorber": { + "node_modules/react-loadable-ssr-addon-v5-slorber": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", - "requires": { + "dependencies": { "@babel/runtime": "^7.10.3" + }, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "react-loadable": "*", + "webpack": ">=4.41.1 || 5.x" } }, - "react-router": { + "node_modules/react-router": { "version": "5.3.4", "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", - "requires": { + "dependencies": { "@babel/runtime": "^7.12.13", "history": "^4.9.0", "hoist-non-react-statics": "^3.1.0", @@ -24042,30 +11578,27 @@ "tiny-invariant": "^1.0.2", "tiny-warning": "^1.0.0" }, - "dependencies": { - "path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "requires": { - "isarray": "0.0.1" - } - } + "peerDependencies": { + "react": ">=15" } }, - "react-router-config": { + "node_modules/react-router-config": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", - "requires": { + "dependencies": { "@babel/runtime": "^7.1.2" + }, + "peerDependencies": { + "react": ">=15", + "react-router": ">=5" } }, - "react-router-dom": { + "node_modules/react-router-dom": { "version": "5.3.4", "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", - "requires": { + "dependencies": { "@babel/runtime": "^7.12.13", "history": "^4.9.0", "loose-envify": "^1.3.1", @@ -24073,167 +11606,212 @@ "react-router": "5.3.4", "tiny-invariant": "^1.0.2", "tiny-warning": "^1.0.0" + }, + "peerDependencies": { + "react": ">=15" } }, - "react-textarea-autosize": { + "node_modules/react-textarea-autosize": { "version": "8.4.0", "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.4.0.tgz", "integrity": "sha512-YrTFaEHLgJsi8sJVYHBzYn+mkP3prGkmP2DKb/tm0t7CLJY5t1Rxix8070LAKb0wby7bl/lf2EeHkuMihMZMwQ==", - "requires": { + "dependencies": { "@babel/runtime": "^7.10.2", "use-composed-ref": "^1.3.0", "use-latest": "^1.2.1" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "readable-stream": { + "node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { + "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "readdirp": { + "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "requires": { + "dependencies": { "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" } }, - "reading-time": { + "node_modules/reading-time": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" }, - "rechoir": { + "node_modules/rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "requires": { + "dependencies": { "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" } }, - "recursive-readdir": { + "node_modules/recursive-readdir": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "requires": { + "dependencies": { "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" } }, - "regenerate": { + "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, - "regenerate-unicode-properties": { + "node_modules/regenerate-unicode-properties": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "requires": { + "dependencies": { "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" } }, - "regenerator-runtime": { + "node_modules/regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, - "regenerator-transform": { + "node_modules/regenerator-transform": { "version": "0.15.1", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "requires": { + "dependencies": { "@babel/runtime": "^7.8.4" } }, - "regexp.prototype.flags": { + "node_modules/regexp.prototype.flags": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "regexpu-core": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", - "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==", - "requires": { + "node_modules/regexpu-core": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.1.tgz", + "integrity": "sha512-nCOzW2V/X15XpLsK2rlgdwrysrBq+AauCn+omItIz4R1pIcmeot5zvjdmOBRLzEH/CkC6IxMJVmxDe3QcMuNVQ==", + "dependencies": { + "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.1.0", - "regjsgen": "^0.7.1", "regjsparser": "^0.9.1", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" } }, - "registry-auth-token": { + "node_modules/registry-auth-token": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", - "requires": { + "dependencies": { "rc": "1.2.8" + }, + "engines": { + "node": ">=6.0.0" } }, - "registry-url": { + "node_modules/registry-url": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "requires": { + "dependencies": { "rc": "^1.2.8" + }, + "engines": { + "node": ">=8" } }, - "regjsgen": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", - "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" - }, - "regjsparser": { + "node_modules/regjsparser": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "requires": { + "dependencies": { "jsesc": "~0.5.0" }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" - } + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "bin": { + "jsesc": "bin/jsesc" } }, - "relateurl": { + "node_modules/relateurl": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==" + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "engines": { + "node": ">= 0.10" + } }, - "remark-emoji": { + "node_modules/remark-emoji": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz", "integrity": "sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==", - "requires": { + "dependencies": { "emoticon": "^3.2.0", "node-emoji": "^1.10.0", "unist-util-visit": "^2.0.3" } }, - "remark-footnotes": { + "node_modules/remark-footnotes": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", - "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==" + "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "remark-mdx": { + "node_modules/remark-mdx": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", - "requires": { + "dependencies": { "@babel/core": "7.12.9", "@babel/helper-plugin-utils": "7.10.4", "@babel/plugin-proposal-object-rest-spread": "7.12.1", @@ -24243,82 +11821,108 @@ "remark-parse": "8.0.3", "unified": "9.2.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx/node_modules/@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", "dependencies": { - "@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" - } - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" - } + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/remark-mdx/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/remark-mdx/node_modules/@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/remark-mdx/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/remark-mdx/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-mdx/node_modules/unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "remark-parse": { + "node_modules/remark-parse": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", - "requires": { + "dependencies": { "ccount": "^1.0.0", "collapse-white-space": "^1.0.2", "is-alphabetical": "^1.0.0", @@ -24335,336 +11939,480 @@ "unist-util-remove-position": "^2.0.0", "vfile-location": "^3.0.0", "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "remark-squeeze-paragraphs": { + "node_modules/remark-squeeze-paragraphs": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", - "requires": { + "dependencies": { "mdast-squeeze-paragraphs": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "renderkid": { + "node_modules/renderkid": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "requires": { + "dependencies": { "css-select": "^4.1.3", "dom-converter": "^0.2.0", "htmlparser2": "^6.1.0", "lodash": "^4.17.21", "strip-ansi": "^6.0.1" + } + }, + "node_modules/renderkid/node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/renderkid/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dependencies": { - "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" - }, - "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" } }, - "repeat-string": { + "node_modules/repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==" + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "engines": { + "node": ">=0.10" + } }, - "require-from-string": { + "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==" + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } }, - "require-like": { + "node_modules/require-like": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==" + "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", + "engines": { + "node": "*" + } }, - "requires-port": { + "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, - "resolve": { + "node_modules/resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "requires": { + "dependencies": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "resolve-from": { + "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } }, - "resolve-pathname": { + "node_modules/resolve-pathname": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" }, - "responselike": { + "node_modules/responselike": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", - "requires": { + "dependencies": { "lowercase-keys": "^1.0.0" } }, - "retry": { + "node_modules/retry": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==" + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "engines": { + "node": ">= 4" + } }, - "reusify": { + "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } }, - "rimraf": { + "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { + "dependencies": { "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "robust-predicates": { + "node_modules/robust-predicates": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.1.tgz", "integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==" }, - "rtl-detect": { + "node_modules/rtl-detect": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz", "integrity": "sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==" }, - "rtlcss": { + "node_modules/rtlcss": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.5.0.tgz", "integrity": "sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==", - "requires": { + "dependencies": { "find-up": "^5.0.0", "picocolors": "^1.0.0", "postcss": "^8.3.11", "strip-json-comments": "^3.1.1" }, + "bin": { + "rtlcss": "bin/rtlcss.js" + } + }, + "node_modules/rtlcss/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dependencies": { - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "requires": { - "p-limit": "^3.0.2" - } - } + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rtlcss/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rtlcss/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rtlcss/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "run-parallel": { + "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "requires": { + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { "queue-microtask": "^1.2.2" } }, - "rw": { + "node_modules/rw": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" }, - "rxjs": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", - "integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", - "requires": { + "node_modules/rxjs": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", + "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", + "dependencies": { "tslib": "^2.1.0" } }, - "safe-buffer": { + "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==" + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "safe-regex-test": { + "node_modules/safe-regex-test": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.3", "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "safer-buffer": { + "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "sax": { + "node_modules/sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, - "scheduler": { + "node_modules/scheduler": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "requires": { + "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" } }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, + "node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "dependencies": { - "ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "requires": { - "ajv": "^8.0.0" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "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==" - } + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "section-matter": { + "node_modules/section-matter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "requires": { + "dependencies": { "extend-shallow": "^2.0.1", "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" } }, - "select-hose": { + "node_modules/select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" }, - "selfsigned": { + "node_modules/selfsigned": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "requires": { + "dependencies": { "node-forge": "^1" + }, + "engines": { + "node": ">=10" } }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } }, - "semver-diff": { + "node_modules/semver-diff": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "requires": { + "dependencies": { "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semver-diff/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "send": { + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/send": { "version": "0.18.0", "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "requires": { + "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -24679,27 +12427,49 @@ "range-parser": "~1.2.1", "statuses": "2.0.1" }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } + "ms": "2.0.0" } }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "requires": { + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/send/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dependencies": { "randombytes": "^2.1.0" } }, - "serve-handler": { + "node_modules/serve-handler": { "version": "6.1.5", "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz", "integrity": "sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==", - "requires": { + "dependencies": { "bytes": "3.0.0", "content-disposition": "0.5.2", "fast-url-parser": "1.1.3", @@ -24708,33 +12478,18 @@ "path-is-inside": "1.0.2", "path-to-regexp": "2.2.1", "range-parser": "1.2.0" - }, - "dependencies": { - "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==" - }, - "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==", - "requires": { - "mime-db": "~1.33.0" - } - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==" - } } }, - "serve-index": { + "node_modules/serve-handler/node_modules/path-to-regexp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", + "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" + }, + "node_modules/serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "requires": { + "dependencies": { "accepts": "~1.3.4", "batch": "0.6.1", "debug": "2.6.9", @@ -24743,716 +12498,1233 @@ "mime-types": "~2.1.17", "parseurl": "~1.3.2" }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" - } + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "engines": { + "node": ">= 0.6" } }, - "serve-static": { + "node_modules/serve-static": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "requires": { + "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "setimmediate": { + "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, - "setprototypeof": { + "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, - "shallow-clone": { + "node_modules/shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "requires": { + "dependencies": { "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" } }, - "shallowequal": { + "node_modules/shallowequal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" }, - "shebang-command": { + "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==", - "requires": { + "dependencies": { "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "shebang-regex": { + "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==" + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } }, - "shell-quote": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", - "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==" + "node_modules/shell-quote": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.0.tgz", + "integrity": "sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "shelljs": { + "node_modules/shelljs": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "requires": { + "dependencies": { "glob": "^7.0.0", "interpret": "^1.0.0", "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" } }, - "side-channel": { + "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { + "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "signal-exit": { + "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==" }, - "sirv": { + "node_modules/sirv": { "version": "1.0.19", "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", - "requires": { + "dependencies": { "@polka/url": "^1.0.0-next.20", "mrmime": "^1.0.0", "totalist": "^1.0.0" + }, + "engines": { + "node": ">= 10" } }, - "sisteransi": { + "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, - "sitemap": { + "node_modules/sitemap": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz", "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==", - "requires": { + "dependencies": { "@types/node": "^17.0.5", "@types/sax": "^1.2.1", "arg": "^5.0.0", "sax": "^1.2.4" }, - "dependencies": { - "@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" - } + "bin": { + "sitemap": "dist/cli.js" + }, + "engines": { + "node": ">=12.0.0", + "npm": ">=5.6.0" } }, - "slash": { + "node_modules/sitemap/node_modules/@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" + }, + "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } }, - "sockjs": { + "node_modules/sockjs": { "version": "0.3.24", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "requires": { + "dependencies": { "faye-websocket": "^0.11.3", "uuid": "^8.3.2", "websocket-driver": "^0.7.4" - }, - "dependencies": { - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - } } }, - "sort-css-media-queries": { + "node_modules/sockjs/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/sort-css-media-queries": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz", - "integrity": "sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==" + "integrity": "sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==", + "engines": { + "node": ">= 6.3.0" + } }, - "source-map": { + "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } }, - "source-map-js": { + "node_modules/source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } }, - "source-map-support": { + "node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "requires": { + "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, - "space-separated-tokens": { + "node_modules/space-separated-tokens": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==" + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "spdy": { + "node_modules/spdy": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "requires": { + "dependencies": { "debug": "^4.1.0", "handle-thing": "^2.0.0", "http-deceiver": "^1.2.7", "select-hose": "^2.0.0", "spdy-transport": "^3.0.0" }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } + "engines": { + "node": ">=6.0.0" } }, - "spdy-transport": { + "node_modules/spdy-transport": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "requires": { + "dependencies": { "debug": "^4.1.0", "detect-node": "^2.0.4", "hpack.js": "^2.1.6", "obuf": "^1.1.2", "readable-stream": "^3.0.6", "wbuf": "^1.7.3" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } } }, - "sprintf-js": { + "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, - "stable": { + "node_modules/stable": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" }, - "state-toggle": { + "node_modules/state-toggle": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", - "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==" + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "statuses": { + "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } }, - "std-env": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.1.tgz", - "integrity": "sha512-3H20QlwQsSm2OvAxWIYhs+j01MzzqwMwGiiO1NQaJYZgJZFPuAbf95/DiKRBSTYIJ2FeGUc+B/6mPGcWP9dO3Q==" + "node_modules/std-env": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.2.tgz", + "integrity": "sha512-uUZI65yrV2Qva5gqE0+A7uVAvO40iPo6jGhs7s8keRfHCmtg+uB2X6EiLGCI9IgL1J17xGhvoOqSz79lzICPTA==" }, - "string_decoder": { + "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { + "dependencies": { "safe-buffer": "~5.2.0" } }, - "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==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "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==", + "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/string-width/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "string.prototype.trimend": { + "node_modules/string.prototype.trimend": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "string.prototype.trimstart": { + "node_modules/string.prototype.trimstart": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "stringify-object": { + "node_modules/stringify-object": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "requires": { + "dependencies": { "get-own-enumerable-property-symbols": "^3.0.0", "is-obj": "^1.0.1", "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" } }, - "strip-ansi": { + "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==", - "requires": { + "dependencies": { "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "strip-bom-string": { + "node_modules/strip-bom-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==" + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "engines": { + "node": ">=0.10.0" + } }, - "strip-final-newline": { + "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==" + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" + } }, - "strip-json-comments": { + "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "style-to-object": { + "node_modules/style-to-object": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", - "requires": { + "dependencies": { "inline-style-parser": "0.1.1" } }, - "stylehacks": { + "node_modules/stylehacks": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", - "requires": { + "dependencies": { "browserslist": "^4.21.4", "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "stylis": { + "node_modules/stylis": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==" }, - "supports-color": { + "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==", - "requires": { + "dependencies": { "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "supports-preserve-symlinks-flag": { + "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "svg-parser": { + "node_modules/svg-parser": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" }, - "svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "requires": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" + "node_modules/svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", + "dependencies": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/svgo/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/svgo/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/svgo/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/svgo/node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "node_modules/svgo/node_modules/css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/svgo/node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/svgo/node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/svgo/node_modules/domutils/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "node_modules/svgo/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/svgo/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/svgo/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/svgo/node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/svgo/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.16.4", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.4.tgz", + "integrity": "sha512-5yEGuZ3DZradbogeYQ1NaGz7rXVBDWujWlx1PT8efXO6Txn+eWbfKqB2bTDVmFXmePFkoLU6XI8UektMIEA0ug==", + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", + "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } } }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" - }, - "terser": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", - "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - } + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" } }, - "terser-webpack-plugin": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", - "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", - "requires": { - "@jridgewell/trace-mapping": "^0.3.14", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "terser": "^5.14.1" + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dependencies": { - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "text-table": { + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, - "thunky": { + "node_modules/thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" }, - "tiny-invariant": { + "node_modules/tiny-invariant": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" }, - "tiny-warning": { + "node_modules/tiny-warning": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" }, - "to-fast-properties": { + "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } }, - "to-readable-stream": { + "node_modules/to-readable-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "engines": { + "node": ">=6" + } }, - "to-regex-range": { + "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { + "dependencies": { "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "toidentifier": { + "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } }, - "totalist": { + "node_modules/totalist": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", - "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==" + "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", + "engines": { + "node": ">=6" + } }, - "tr46": { + "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, - "trim": { + "node_modules/trim": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==" }, - "trim-trailing-lines": { + "node_modules/trim-trailing-lines": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", - "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==" + "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "trough": { + "node_modules/trough": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + "node_modules/ts-dedent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "engines": { + "node": ">=6.10" + } + }, + "node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" }, - "type-fest": { + "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==" + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "type-is": { + "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { + "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-is/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-is/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "typedarray-to-buffer": { + "node_modules/typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { + "dependencies": { "is-typedarray": "^1.0.0" } }, - "typescript": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", - "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", - "peer": true + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } }, - "ua-parser-js": { - "version": "0.7.32", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.32.tgz", - "integrity": "sha512-f9BESNVhzlhEFf2CHMSj40NWOjYPl1YKYbrvIr/hFTDEmLq7SRbWvm7FcdcpCYT95zrOhC7gZSxjdnnTpBcwVw==" + "node_modules/ua-parser-js": { + "version": "0.7.33", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.33.tgz", + "integrity": "sha512-s8ax/CeZdK9R/56Sui0WM6y9OFREJarMRHqLB2EwkovemBxNQ+Bqu8GAsUnVcXKgphb++ghr/B2BZx4mahujPw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } }, - "unbox-primitive": { + "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "unherit": { + "node_modules/unherit": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", - "requires": { + "dependencies": { "inherits": "^2.0.0", "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "unicode-canonical-property-names-ecmascript": { + "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==" + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "engines": { + "node": ">=4" + } }, - "unicode-match-property-ecmascript": { + "node_modules/unicode-match-property-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "requires": { + "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "unicode-match-property-value-ecmascript": { + "node_modules/unicode-match-property-value-ecmascript": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==" + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "engines": { + "node": ">=4" + } }, - "unicode-property-aliases-ecmascript": { + "node_modules/unicode-property-aliases-ecmascript": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "engines": { + "node": ">=4" + } }, - "unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "requires": { + "node_modules/unified": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", + "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", + "dependencies": { "bail": "^1.0.0", "extend": "^3.0.0", "is-buffer": "^2.0.0", "is-plain-obj": "^2.0.0", "trough": "^1.0.0", "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "unique-string": { + "node_modules/unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "requires": { + "dependencies": { "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "unist-builder": { + "node_modules/unist-builder": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", - "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==" + "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "unist-util-generated": { + "node_modules/unist-util-generated": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", - "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==" + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "unist-util-is": { + "node_modules/unist-util-is": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==" + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "unist-util-position": { + "node_modules/unist-util-position": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==" + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "unist-util-remove": { + "node_modules/unist-util-remove": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", - "requires": { + "dependencies": { "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "unist-util-remove-position": { + "node_modules/unist-util-remove-position": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", - "requires": { + "dependencies": { "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "unist-util-stringify-position": { + "node_modules/unist-util-stringify-position": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "requires": { + "dependencies": { "@types/unist": "^2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "unist-util-visit": { + "node_modules/unist-util-visit": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", - "requires": { + "dependencies": { "@types/unist": "^2.0.0", "unist-util-is": "^4.0.0", "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "unist-util-visit-parents": { + "node_modules/unist-util-visit-parents": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", - "requires": { + "dependencies": { "@types/unist": "^2.0.0", "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "universalify": { + "node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } }, - "unpipe": { + "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } }, - "unquote": { + "node_modules/unquote": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==" }, - "update-browserslist-db": { + "node_modules/update-browserslist-db": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "requires": { + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { "escalade": "^3.1.1", "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "update-notifier": { + "node_modules/update-notifier": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "requires": { + "dependencies": { "boxen": "^5.0.0", "chalk": "^4.1.0", "configstore": "^5.0.1", @@ -25468,233 +13740,390 @@ "semver-diff": "^3.1.1", "xdg-basedir": "^4.0.0" }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "node_modules/update-notifier/node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/update-notifier/node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/update-notifier/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==" + }, + "node_modules/update-notifier/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==", "dependencies": { - "boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - } - }, - "cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" - }, - "widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "requires": { - "string-width": "^4.0.0" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-notifier/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/update-notifier/node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-notifier/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "uri-js": { + "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "requires": { + "dependencies": { "punycode": "^2.1.0" } }, - "url-loader": { + "node_modules/uri-js/node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/url-loader": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "requires": { + "dependencies": { "loader-utils": "^2.0.0", "mime-types": "^2.1.27", "schema-utils": "^3.0.0" }, - "dependencies": { - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "file-loader": "*", + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "file-loader": { + "optional": true } } }, - "url-parse-lax": { + "node_modules/url-loader/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/url-loader/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/url-loader/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", - "requires": { + "dependencies": { "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "use-composed-ref": { + "node_modules/use-composed-ref": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", - "requires": {} + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } }, - "use-isomorphic-layout-effect": { + "node_modules/use-isomorphic-layout-effect": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", - "requires": {} + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } }, - "use-latest": { + "node_modules/use-latest": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", - "requires": { + "dependencies": { "use-isomorphic-layout-effect": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "util-deprecate": { + "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, - "util.promisify": { + "node_modules/util.promisify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "requires": { + "dependencies": { "define-properties": "^1.1.3", "es-abstract": "^1.17.2", "has-symbols": "^1.0.1", "object.getownpropertydescriptors": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "utila": { + "node_modules/utila": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" }, - "utility-types": { + "node_modules/utility-types": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", - "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==" + "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", + "engines": { + "node": ">= 4" + } }, - "utils-merge": { + "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } }, - "uuid": { + "node_modules/uuid": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "bin": { + "uuid": "dist/bin/uuid" + } }, - "value-equal": { + "node_modules/value-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" }, - "vary": { + "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==" + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } }, - "vfile": { + "node_modules/vfile": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "requires": { + "dependencies": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", "unist-util-stringify-position": "^2.0.0", "vfile-message": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "vfile-location": { + "node_modules/vfile-location": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", - "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==" + "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "vfile-message": { + "node_modules/vfile-message": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "requires": { + "dependencies": { "@types/unist": "^2.0.0", "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "wait-on": { + "node_modules/wait-on": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", - "requires": { + "dependencies": { "axios": "^0.25.0", "joi": "^17.6.0", "lodash": "^4.17.21", "minimist": "^1.2.5", "rxjs": "^7.5.4" + }, + "bin": { + "wait-on": "bin/wait-on" + }, + "engines": { + "node": ">=10.0.0" } }, - "watchpack": { + "node_modules/watchpack": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "requires": { + "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" } }, - "wbuf": { + "node_modules/wbuf": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "requires": { + "dependencies": { "minimalistic-assert": "^1.0.0" } }, - "web-namespaces": { + "node_modules/web-namespaces": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", - "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==" + "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "webidl-conversions": { + "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, - "webpack": { + "node_modules/webpack": { "version": "5.75.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", - "requires": { + "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^0.0.51", "@webassemblyjs/ast": "1.11.1", @@ -25720,29 +14149,28 @@ "watchpack": "^2.4.0", "webpack-sources": "^3.2.3" }, - "dependencies": { - "@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true } } }, - "webpack-bundle-analyzer": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.7.0.tgz", - "integrity": "sha512-j9b8ynpJS4K+zfO5GGwsAcQX4ZHpWV+yRiHDiL+bE0XHJ8NiPYLTNVQdlFYWxtpg9lfAQNlwJg16J9AJtFSXRg==", - "requires": { + "node_modules/webpack-bundle-analyzer": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.8.0.tgz", + "integrity": "sha512-ZzoSBePshOKhr+hd8u6oCkZVwpVaXgpw23ScGLFpR6SjYI7+7iIWYarjN6OEYOfRt8o7ZyZZQk0DuMizJ+LEIg==", + "dependencies": { + "@discoveryjs/json-ext": "0.5.7", "acorn": "^8.0.4", "acorn-walk": "^8.0.0", "chalk": "^4.1.0", @@ -25752,280 +14180,565 @@ "opener": "^1.5.2", "sirv": "^1.0.7", "ws": "^7.3.1" + }, + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" } }, - "webpack-dev-middleware": { + "node_modules/webpack-dev-middleware": { "version": "5.3.3", "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "requires": { + "dependencies": { "colorette": "^2.0.10", "memfs": "^3.4.3", "mime-types": "^2.1.31", "range-parser": "^1.2.1", "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-middleware/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==" + }, + "node_modules/webpack-dev-middleware/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-middleware/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", + "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-server/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-server/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==" + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "webpack-dev-server": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", - "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", - "requires": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.1.tgz", + "integrity": "sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew==", + "engines": { + "node": ">=10.0.0" }, - "dependencies": { - "ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "requires": {} + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true } } }, - "webpack-merge": { + "node_modules/webpack-merge": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "requires": { + "dependencies": { "clone-deep": "^4.0.1", "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" } }, - "webpack-sources": { + "node_modules/webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + }, + "node_modules/webpack/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } }, - "webpackbar": { + "node_modules/webpackbar": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", - "requires": { + "dependencies": { "chalk": "^4.1.0", "consola": "^2.15.3", "pretty-time": "^1.1.0", "std-env": "^3.0.1" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "webpack": "3 || 4 || 5" } }, - "websocket-driver": { + "node_modules/websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "requires": { + "dependencies": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" } }, - "websocket-extensions": { + "node_modules/websocket-extensions": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "engines": { + "node": ">=0.8.0" + } }, - "whatwg-url": { + "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { + "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, - "which": { + "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { + "dependencies": { "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "which-boxed-primitive": { + "node_modules/which-boxed-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "requires": { + "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", "is-number-object": "^1.0.4", "is-string": "^1.0.5", "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "widest-line": { + "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==", - "requires": { + "dependencies": { "string-width": "^5.0.1" }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "requires": { - "ansi-regex": "^6.0.1" - } - } + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "wildcard": { + "node_modules/wildcard": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" }, - "wrap-ansi": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.0.1.tgz", - "integrity": "sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==", - "requires": { + "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==", + "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" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, - "ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "requires": { - "ansi-regex": "^6.0.1" - } - } + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "wrappy": { + "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, - "write-file-atomic": { + "node_modules/write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "requires": { + "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", "signal-exit": "^3.0.2", "typedarray-to-buffer": "^3.1.5" } }, - "ws": { + "node_modules/ws": { "version": "7.5.9", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "requires": {} + "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 + } + } }, - "xdg-basedir": { + "node_modules/xdg-basedir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "engines": { + "node": ">=8" + } }, - "xml-js": { + "node_modules/xml-js": { "version": "1.6.11", "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", - "requires": { + "dependencies": { "sax": "^1.2.4" + }, + "bin": { + "xml-js": "bin/cli.js" } }, - "xtend": { + "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, - "yaml": { + "node_modules/yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } }, - "yocto-queue": { + "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "zwitch": { + "node_modules/zwitch": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==" + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } } } } From f03d860aec198ac50c94d380eb832cd31306d18a Mon Sep 17 00:00:00 2001 From: Anwesh Date: Wed, 22 Feb 2023 20:25:03 +0530 Subject: [PATCH 169/578] feat(rfp): alternative javascript console for polkadot js API (#1545) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(rfp): add a new proposal alternative javascript console for polkadot js API * feat(rfp): add a new proposal alternative javascript console for polkadot js API * feat(rfp): add a new proposal alternative javascript console for polkadot js API * feat(rfp): add a new proposal alternative javascript console for polkadot js API * Update docs/RFPs/Open/alternative-polkadot-js-api-console.md Co-authored-by: Sebastian Müller * Update docs/RFPs/Open/alternative-polkadot-js-api-console.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update docs/RFPs/Open/alternative-polkadot-js-api-console.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update docs/RFPs/Open/alternative-polkadot-js-api-console.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update docs/RFPs/Open/alternative-polkadot-js-api-console.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update docs/RFPs/Open/alternative-polkadot-js-api-console.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update docs/RFPs/Open/alternative-polkadot-js-api-console.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> --------- Co-authored-by: Sebastian Müller Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> --- .../alternative-polkadot-js-api-console.md | 55 +++++++++++++++++++ docs/rfps.md | 1 + 2 files changed, 56 insertions(+) create mode 100644 docs/RFPs/Open/alternative-polkadot-js-api-console.md diff --git a/docs/RFPs/Open/alternative-polkadot-js-api-console.md b/docs/RFPs/Open/alternative-polkadot-js-api-console.md new file mode 100644 index 00000000000..b6be07084b4 --- /dev/null +++ b/docs/RFPs/Open/alternative-polkadot-js-api-console.md @@ -0,0 +1,55 @@ +# Alternative javascript console for Polkadot JS API + +* **Status:** Open (anyone is allowed to apply) +* **Proposer:** [muddlebee](https://github.com/muddlebee) +* **Projects you think this work could be useful for** [optional]: Javascript console at https://polkadot.js.org/apps/#/js + +## Project Description :page_facing_up: + +### Current State +We have a Javascript console on the Developer tab which is really useful for running Polkadot-JS API scripts [Polkadot-JS API docs](https://polkadot.js.org/docs/) + + +**Link** - [https://polkadot.js.org/apps/#/js](https://polkadot.js.org/apps/#/js), UI screenshot below + +![image](https://user-images.githubusercontent.com/8139783/197954316-1449075f-b8be-4a30-a759-873c15f8a14f.png) + + +**Current limitations of the above console**: +Cannot save code properly, not many keyboard shortcuts, cannot customize configurations. + +**Alternative polkadot js API playground** +1. [https://github.com/subdirectory/subshell](https://github.com/subdirectory/subshell) + + +### Proposed-RFP + +A new Polkadot-JS API playground with VS Code-like configurations like save the code, workspace, keyboard shortcuts, etc. +[https://polkadot.js.org/apps/#/js](https://polkadot.js.org/apps/#/js) + +some examples -> https://playground.substrate.dev/ +here we have to manually build and run our js bundles +![image](https://user-images.githubusercontent.com/8139783/198254152-abdd0f2e-62d4-4f0f-aad1-bcfdd6d48a74.png) + +**Why alternative javascript console for Polkadot-JS API**? + +Current polkadot js API console which I mentioned in beginning of this post, has some limitations, which we can overcome by creating a better version for smoother dev experience. + + + +## Deliverables :nut_and_bolt: + +The following items could be the initial deliverables of the project. Of course, improvements and additions are more than welcome. + +- Initial research: + - study how the current javascript console is developed at https://polkadot.js.org/apps/#/js + - understand the libaries currently integrated from [polkadot JS API docs](https://polkadot.js.org/docs/) + +- Development: + - design a new UI/UX with better experience than current javascript console with features like + - save code preferably with secure session management + - keyboard shortcuts + - [example](#Proposed-RFP) + + Any additional features which make the Polkadot-JS experience more productive and smoother are welcome. + diff --git a/docs/rfps.md b/docs/rfps.md index e83d623ced6..b96865d0671 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -65,6 +65,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [validator-selection-algorithm.md](RFPs/Under%20Development/validator-selection-algorithm.md) | 🟡 | 07.12.2022 | | [wallet-aggregator-library.md](RFPs/Open/wallet-aggregator-library.md) | 🟢 | 23.01.2023 | | [xcm-tool.md](RFPs/Open/xcm-tool.md) | 🟢 | 20.07.2021 | +| [alternative-polkadot-js-api-console.md](RFPs/Open/alternative-polkadot-js-api-console.md) | 🟢 | 16.02.2023 | ## :mailbox_with_mail: Suggest an RFP From 0a2e8ecd04318fb0b3c713ea4d08a1ed0c31217c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 23 Feb 2023 16:58:36 +0100 Subject: [PATCH 170/578] Remove fiat mention from FAQ --- docs/faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/faq.md b/docs/faq.md index 57fe8cfcf8e..d427a34747b 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -58,7 +58,7 @@ title: FAQ Depending on the size of the grant, applications require two to five committee members to approve it. Since we have many different members with different backgrounds and specializations, it is possible that the committee disagrees and your application gets rejected even though one or two members approved it. The application is accepted once the pull request is merged. -### How do I apply if I want to keep information private or want to be paid in fiat? +### How do I apply if I want to keep information private? For special cases that do not fit the regular grants structure, we provide [a form](https://docs.google.com/forms/d/e/1FAIpQLSfMfjiRmDQDRk-4OhNASM6BAKii7rz_B1jWtbCPkUh6N7M2ww/viewform). You can provide all application data by submitting this form, or submit the form with a reference to a pull request with data you are willing to make public. From c085bd05d6f194b4e222df30b48e55d7c6f0bce8 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Thu, 23 Feb 2023 14:29:42 -0500 Subject: [PATCH 171/578] Update index.md (#1565) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 68baad7aec0..85b911702c3 100644 --- a/applications/index.md +++ b/applications/index.md @@ -224,7 +224,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Stardust Labs Inc.](https://stardust.finance/) | [Uncollateralized Stablecoin Research and Design](./stardust.md) | [GitHub](https://github.com/adit313/) | ☐ | ☒ | ☒ | | [Hashed Systems](https://hashed.io) | [Native Bitcoin Vaults (NBV)](./native-bitcoin-vaults.md) | [GitHub](https://github.com/hashed-io) | ☐ | ☒ | ☒ | | [Setheum](https://setheum.xyz/) | [Setheum HighEnd LaunchPad Crowdsales Module](./setheum.md) | [GitHub](https://github.com/Setheum-Labs) | ☐ | ☐ | ☐ | -| [SaaS3 Lab](https://www.saas3.io) | [SaaS3](./SaaS3.md) | [GitHub](https://github.com/SaaS3Lab) | ☐ | ☐ | ☐ | +| [SaaS3 Lab](https://www.saas3.io) | [SaaS3](./SaaS3.md) | [GitHub](https://github.com/SaaS3Lab) | ☐ | ☒ | ☐ | | [NUTS Finance](https://nuts.finance) | [DOT-pegged derivative built on top of the stable asset protocol](./stable-asset.md) | [GitHub](https://github.com/nutsfinance/) | ☐ | ☒ | ☒ | | [Strategy Object](https://strategyobject.com/) | [Substrate Client for Java](./substrate_client_java.md) | [GitHub](https://github.com/strategyobject/substrate-client-java) | ☐ | ☒ | ☐ | From 98fe4f314eda9306f1065fb6cd556c812b08a014 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 23 Feb 2023 22:54:27 +0100 Subject: [PATCH 172/578] simplify docs structure (#1561 * simplify docs structure * Remove more symlinks and fix links * Move maintenance to applications * More fixed links --- README.md | 8 ++--- applications/index.md | 24 ++++++++++++-- .../maintenance}/Substratesnap_Maintenance.md | 0 .../maintenance}/maintenance-template.md | 8 +++-- .../maintenance}/wasm-opt-for-rust.md | 0 docs/CODE_OF_CONDUCT.md | 1 - docs/Introduction/ideas.md | 4 +-- docs/Introduction/intro.md | 2 +- docs/README.md | 1 - docs/applications | 1 - docs/docs/faq.md | 1 - docs/docs/readme.md | 3 -- docs/index.md | 4 +++ docs/maintenance | 1 - docs/process.md | 3 +- docs/rfps.md | 10 +++--- docusaurus.config.js | 31 ++++++++++++++----- sidebars.js | 28 ++++++++--------- src/pages/index.js | 2 +- 19 files changed, 82 insertions(+), 50 deletions(-) rename {maintenance => applications/maintenance}/Substratesnap_Maintenance.md (100%) rename {maintenance => applications/maintenance}/maintenance-template.md (98%) rename {maintenance => applications/maintenance}/wasm-opt-for-rust.md (100%) delete mode 120000 docs/CODE_OF_CONDUCT.md delete mode 120000 docs/README.md delete mode 120000 docs/applications delete mode 120000 docs/docs/faq.md delete mode 100644 docs/docs/readme.md create mode 100644 docs/index.md delete mode 120000 docs/maintenance diff --git a/README.md b/README.md index c4b54011a0a..776bf88ac9f 100644 --- a/README.md +++ b/README.md @@ -154,7 +154,7 @@ The W3F Grants Program offers different grant levels to help you best depending 0. Please read our [FAQs](https://github.com/w3f/Grants-Program/blob/master/docs/faq.md), [category guidelines](https://github.com/w3f/Grants-Program/blob/master/docs/Support%20Docs/grant_guidelines_per_category.md), [announcement guidelines](https://github.com/w3f/Grants-Program/blob/master/docs/Support%20Docs/announcement-guidelines.md) and [Terms & Conditions](https://github.com/w3f/Grants-Program/blob/master/docs/Support%20Docs/T%26Cs.md) to familiarize yourself with the subtleties of grants, applications and the program as a whole. 1. [Fork](https://github.com/w3f/Grants-Program/fork) this repository. - 2. In the newly created fork, create a copy of the application template ([`applications/application-template.md`](applications/application-template.md)). If you're using the GitHub web interface, you will need to create a new file and copy the [contents](https://raw.githubusercontent.com/w3f/Grants-Program/master/applications/application-template.md) of the template inside the new one. Make sure you **do not modify the template file directly**. In the case of a maintenance application, use the maintenance template ([`maintenance template`](maintenance/maintenance-template.md)) instead. In the case of a research application, use the research template ([`research template`](applications/application-template-research.md)) instead. + 2. In the newly created fork, create a copy of the application template ([`applications/application-template.md`](applications/application-template.md)). If you're using the GitHub web interface, you will need to create a new file and copy the [contents](https://raw.githubusercontent.com/w3f/Grants-Program/master/applications/application-template.md) of the template inside the new one. Make sure you **do not modify the template file directly**. In the case of a maintenance application, use the maintenance template ([`maintenance template`](applications/maintenance/maintenance-template.md)) instead. In the case of a research application, use the research template ([`research template`](applications/application-template-research.md)) instead. 3. Name the new file after your project: `project_name.md`. 4. Fill out the template with the details of your project. The more information you provide, the faster the review. Please refer to our [Grant guidelines for most popular grant categories](https://github.com/w3f/Grants-Program/blob/master/docs/Support%20Docs/grant_guidelines_per_category.md) and make sure your deliverables present a similar same level of detail. To get an idea of what a strong application looks like, you can have a look at the following examples: [1](https://github.com/w3f/Grants-Program/blob/master/applications/project_aurras_mvp_phase_1.md), [2](https://github.com/w3f/Grants-Program/blob/master/applications/project_bodhi.md), [3](https://github.com/w3f/Grants-Program/blob/master/applications/pontem.md), [4](https://github.com/w3f/Grants-Program/blob/master/applications/spartan_poc_consensus_module.md). Naturally, if you're only applying for a smaller grant that only consists of, say, UI work, you don't need to provide as much detail. 5. Once you're done, create a pull request in **our** main [Grants-Program repository](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/README.md). The pull request should only contain _one new file_—the Markdown file you created from the template. @@ -196,7 +196,7 @@ Ideas generally have better chances of being implemented if they're presented in 4. Fill out the template with the project details. Please include as many details as possible. 5. Once you're done, create a pull request in **our** main [Grants-Program repository](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/README.md). The pull request should only contain _one new file_—the Markdown file you created from the template. 6. You will see the same template as for creating an application. Please replace it with [this one](.github/PULL_REQUEST_TEMPLATE/rfp_pr_template.md). -7. The RFP will be accepted and merged as soon as it receives three approvals from [W3F Grants Committee](https://github.com/w3f/Grants-Program#w3f-grants-committee) members. +7. The RFP will be accepted and merged as soon as it receives three approvals from [W3F Grants Committee](https://github.com/w3f/Grants-Program#w3f-grants-committee) members. ## :hammer_and_wrench: Maintenance Grants @@ -322,8 +322,8 @@ Below is a list of other grant programs in the Polkadot/Substrate ecosystem: - [Interlay Labs Grants Program](https://github.com/interlay/Grants-Program) - [Moonbeam Grants Program](https://moonbeam.foundation/grants/) - [OAK’s Developer Grants](https://oak.tech/community/grants/) -- [peaq Ecosystem Grant Program](https://www.peaq.network/grant-program) -- [Phala Builders Program](https://wiki.phala.network/en-us/build/general/builders-program/) +- [peaq Ecosystem Grant Program](https://www.peaq.network/grant-program) +- [Phala Builders Program](https://wiki.phala.network/en-us/build/general/builders-program/) - [Picasso / Composable Grants Program](https://grants.composable.finance) - [SubQuery Grants Programme](https://subquery.network/grants) diff --git a/applications/index.md b/applications/index.md index 85b911702c3..ea1d0c222de 100644 --- a/applications/index.md +++ b/applications/index.md @@ -12,6 +12,7 @@ Use this page for an overview of all public grants and their status. Use the sid > Besides, **there is a clear difference between an application being accepted and the successful delivery of the respective project**, and only teams that have successfully delivered a milestone are allowed to make public announcements on the matter or to use our [badge](https://github.com/w3f/General-Grants-Program/blob/master/grants/grant-badge-guidelines.md). The badge can also never be used as a general endorsement for a team. Violations to this policy can be reported [here](mailto:grants@web3.foundation). ## Menu + - [2023](#2023): [17](#%EF%B8%8F-wave-17---first-quarter-2023) - [2022](#2022): [16](#%EF%B8%8F-wave-16---fourth-quarter-2022), [15](#%EF%B8%8F-wave-15---third-quarter-2022), [14](#%EF%B8%8F-wave-14---second-quarter-2022), [13](#%EF%B8%8F-wave-13---first-quarter-2022) - [2021](#2021): [12](#%EF%B8%8F-wave-12---fourth-quarter-2021), [11](#%EF%B8%8F-wave-11---third-quarter-2021), [10](#%EF%B8%8F-wave-10---second-quarter-2021), [9](#%EF%B8%8F-wave-9---first-quarter-2021) @@ -20,7 +21,8 @@ Use this page for an overview of all public grants and their status. Use the sid ## 2023 -### 🏄‍♀️ Wave 17 - First Quarter 2023 +### 🏄‍♀️ Wave 17 - First Quarter 2023 + [Menu🔝](#menu) | Team | Project | Link | Terminated | First Delivery | Completed | @@ -59,6 +61,7 @@ Use this page for an overview of all public grants and their status. Use the sid ## 2022 ### 🏄‍♀️ Wave 16 - Fourth Quarter 2022 + [Menu🔝](#menu) | Team | Project | Link | Terminated | First Delivery | Completed | @@ -89,7 +92,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [TwinP](https://github.com/herou) | [Decentralized Invoice](decentralized_invoice.md) | [GitHub](https://github.com/herou) | ☐ | ☒ | ☒ | | [Zondax](http://zondax.ch/) | [Hybrid node research grant](hybrid_node_research.md) | [GitHub](https://github.com/ZondaX) | ☐ | ☐ | ☐ | | [Bright Inventions](https://brightinventions.pl/) | [ZK-Snarks Tutorial](ZK-Snarks%20tutorial.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☐ | -| [Common Orbit LLC](https://brson.github.io) | [wasm-opt-for-rust maintenance](../maintenance/wasm-opt-for-rust.md) | [GitHub](https://github.com/brson/wasm-opt-rs) | ☐ | ☒ | ☐ | +| [Common Orbit LLC](https://brson.github.io) | [wasm-opt-for-rust maintenance](maintenance/wasm-opt-for-rust.md) | [GitHub](https://github.com/brson/wasm-opt-rs) | ☐ | ☒ | ☐ | | [Salaheldin Soliman](https://github.com/salaheldinsoliman) | [Solang developer experience improvements](Solang_developer_experience_improvements.md) | [GitHub](https://github.com/hyperledger/solang) | ☐ | ☐ | ☐ | | [Optymalizacja AI Grzegorz Miebs](https://github.com/miepsik) | [Validator selection](validators_selection.md) | [GitHub](https://github.com/miepsik) | ☒ | ☐ | ☐ | | [Applied Blockchain Ltd](https://appliedblockchain.com/) | [Silent Data](project_silentdata.md) | [GitHub](https://github.com/appliedblockchain) | ☐ | ☐ | ☐ | @@ -104,6 +107,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [MangoBOX labs](https://www.mangobox.xyz/) | [MangoSale Protocol](MangoSale_Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☐ | ☐ | ### 🏄‍♀️ Wave 15 - Third Quarter 2022 + [Menu🔝](#menu) | Team | Project | Link | Terminated | First Delivery | Completed | @@ -149,12 +153,13 @@ Use this page for an overview of all public grants and their status. Use the sid | [hack-ink](https://github.com/hack-ink) | [Subalfred](./subalfred.md) | [GitHub](https://github.com/hack-ink/subalfred) | ☐ | ☒ | ☒ | ### 🏄‍♀️ Wave 14 - Second Quarter 2022 + [Menu🔝](#menu) | Team | Project | Link | Terminated | First Delivery | Completed | | :--------------------------------------------------------- | :------------------------------------------------------------------------------------------------------ | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | | [TDSoftware](https://www.tdsoftware.de/) | [SubIdentity](./SubIdentity.md) | [GitHub](https://github.com/TDSoftware) | ☐ | ☒ | ☒ | -| [ChainSafe Systems](https://chainsafe.io/) | [SubstrateSnap Maintenance Proposal](./Substratesnap_Maintenance.md) | [GitHub](https://github.com/ChainSafe/metamask-snap-polkadot) | ☐ | ☒ | ☒ | +| [ChainSafe Systems](https://chainsafe.io/) | [SubstrateSnap Maintenance Proposal](./maintenance/Substratesnap_Maintenance.md) | [GitHub](https://github.com/ChainSafe/metamask-snap-polkadot) | ☐ | ☒ | ☒ | | [HugoByte](https://hugobyte.com/) | [Project Aurras - MVP - Phase 2](./project_aurras_mvp_phase_2.md) | [GitHub](https://github.com/HugoByte) | ☐ | ☐ | ☐ | | [Perun Network](https://perun.network/) | [Perun App Channels](./perun_app_channels.md) | [GitHub](https://github.com/perun-network/) | ☐ | ☒ | ☒ | | [ChainSafe Systems](https://chainsafe.io/) | [Privacy enhancement for Polkadot-js extension](./polkadot-js-extension-per-account-auth.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☒ | ☒ | @@ -191,6 +196,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [MangoBOX labs](http://mangobox.xyz/) | [MangoBOX Protocol](./MangoBOX-Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☒ | ☒ | ### 🏄‍♀️ Wave 13 - First Quarter 2022 + [Menu🔝](#menu) | Team | Project | Link | Terminated | First Delivery | Completed | @@ -231,6 +237,7 @@ Use this page for an overview of all public grants and their status. Use the sid ## 2021 ### 🏄‍♀️ Wave 12 - Fourth Quarter 2021 + [Menu🔝](#menu) | Team | Project | Link | Terminated | First Delivery | Completed | @@ -258,6 +265,7 @@ Use this page for an overview of all public grants and their status. Use the sid | Crypto Pay Lab (CPL)) | [Dotpay a github paid task platform using DOT](./DotPay.md) | [GitHub](https://github.com/bytepayment) | ☐ | ☒ | ☐ | ### 🏄‍♀️ Wave 11 - Third Quarter 2021 + [Menu🔝](#menu) | Team | Project | Link | Terminated | First Delivery | Completed | @@ -290,6 +298,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Evercity](https://evercity.io/) | Sustainable Finance Protocol | [GitHub](https://github.com/EvercityEcosystem) | ☐ | ☒ | ☒ | ### 🏄‍♀️ Wave 10 - Second Quarter 2021 + [Menu🔝](#menu) | Team | Project | Link | Terminated | First Delivery | Completed | @@ -325,6 +334,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Yatima Inc](https://github.com/yatima-inc/yatima) | [Lambda-VM and programming language for Substrate](./yatima.md) | [GitHub](https://github.com/yatima-inc/yatima) | ☐ | ☒ | ☒ | ### 🏄‍♀️ Wave 9 - First Quarter 2021 + [Menu🔝](#menu) | Team | Project | Link | Terminated | First Delivery | Completed | @@ -381,6 +391,7 @@ Use this page for an overview of all public grants and their status. Use the sid ## 2020 ### 🏄‍♀️ Wave 8 - Fourth Quarter 2020 + [Menu🔝](#menu) | Team | Project | Link | Terminated | First Delivery | Completed | @@ -430,6 +441,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Bounce Protocol](https://bounce.finance/) | [Decentralized Auction Protocol](./bounce-protocol.md) | [GitHub](https://github.com/bouncefinance/bounce-network) | ☐ | ☐ | ☐ | ### 🏄‍♀️ Wave 7 - Third Quarter 2020 + [Menu🔝](#menu) | Team | Project | Link | Terminated | First Delivery | Completed | @@ -467,6 +479,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Shard Labs](https://shardlabs.io) | [Tip or Donate KSM Embeddable Button](./KSM-embeddable-tip-or-donate-button.md) | [GitHub](https://github.com/Shard-Labs) | ☐ | ☒ | ☒ | ### 🏄‍♀️ Wave 6 - Second Quarter 2020 + [Menu🔝](#menu) | Team | Project | Link | Terminated | First Delivery | Completed | @@ -506,6 +519,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Dipole Tech](https://www.dipole.tech) | [Dipole Oracle: Distributed energy resource management](./DipoleOracle.md) | [GitHub](https://github.com/DipoleTech/dipole-oracle) | ☐ | ☒ | ☒ | ### 🏄‍♀️ Wave 5 - First Quarter 2020 + [Menu🔝](#menu) | Team | Project | Link | Terminated | First Delivery | Completed | @@ -551,6 +565,7 @@ Use this page for an overview of all public grants and their status. Use the sid ## 2019 ### 🏄‍♀️ Wave 4 - Fourth Quarter 2019 + [Menu🔝](#menu) | Team | Project | Link | Terminated | First Delivery | Completed | @@ -583,6 +598,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Chain Security](https://chainsecurity.com/) | Tool for validating correctness of Polkadot runtimes | [GitHub](https://github.com/ChainSecurity/polpatrol) | ☐ | ☒ | ☒ | ### 🏄‍♀️ Wave 3 - Third Quarter 2019 + [Menu🔝](#menu) | Team | Project | Link | Terminated | First Delivery | Completed | @@ -603,6 +619,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Wiv](http://wiv.io/) | Supply chain modules and front-end UI | [GitHub](https://github.com/wivtech) | ☒ | ☐ | ☐ | ### 🏄‍♀️ Wave 2 - Second Quarter 2019 + [Menu🔝](#menu) | Team | Project | Link | Terminated | First Delivery | Completed | @@ -621,6 +638,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Usetech](http://usetech.com/blockchain.html) | [Polkadot C++ API](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/cpp_api.md) | [GitHub](https://github.com/usetech-llc/polkadot_api_cpp) | ☐ | ☒ | ☒ | ### 🏄‍♀️ Wave 1 - First Quarter 2019 + [Menu🔝](#menu) | Team | Project | Link | Terminated | First Delivery | Completed | diff --git a/maintenance/Substratesnap_Maintenance.md b/applications/maintenance/Substratesnap_Maintenance.md similarity index 100% rename from maintenance/Substratesnap_Maintenance.md rename to applications/maintenance/Substratesnap_Maintenance.md diff --git a/maintenance/maintenance-template.md b/applications/maintenance/maintenance-template.md similarity index 98% rename from maintenance/maintenance-template.md rename to applications/maintenance/maintenance-template.md index 56ed521e59d..c3e13f35146 100644 --- a/maintenance/maintenance-template.md +++ b/applications/maintenance/maintenance-template.md @@ -78,7 +78,7 @@ Please also provide the GitHub accounts of all team members. If they contain no If you've already started implementing your project or it is part of a larger repository, please provide a link and a description of the code here. In any case, please provide some documentation on the research and other work you have conducted before applying. This could be: -- links to improvement proposals or [RFPs](https://github.com/w3f/Grants-Program/tree/master/rfp-proposal) (requests for proposal), +- links to improvement proposals or [RFPs](https://github.com/w3f/Grants-Program/tree/master/docs/RFPs) (requests for proposal), - academic publications relevant to the problem, - links to your research diary, blog posts, articles, forum discussions or open GitHub issues, - references to conversations you might have had related to this project with anyone from the Web3 Foundation, @@ -93,11 +93,13 @@ Also, make sure the current project owners are willing to review/accept your con Below we provide **example maintenance responsibilities**. Issues we want to fix: + - There's a bug in the JsonRPC library that affects its speed. - Massive lack of documentation and part of it is outdated. - Code has no comments, and it's tough for new developers to understand the code and contribute. Our responsibilities: + - We will maintain the project's documentation. - We will answer issues and discussions. - We will fix new bugs as we receive and help contributors who have pull requests get any needed information. @@ -106,12 +108,12 @@ Our responsibilities: ### Overview -- **Start Date:** Date, when you plan to start with the maintenance work. +- **Start Date:** Date, when you plan to start with the maintenance work. - **Sprint/Period Duration:** Duration of the sprint/period (e.g. 4 weeks) - **Total Duration:** Duration of the entire maintenance contract (e.g. 1 year) - **Full-Time Equivalent (FTE):** Average number of full-time employees working on the project throughout its duration (see [Wikipedia](https://en.wikipedia.org/wiki/Full-time_equivalent), e.g. 2 FTE) - **Max budget per sprint/period:** Requested max budget in USD per sprint/period (e.g. 7,000 USD). Cost for each period need to be provided in USD; if the grant is paid out in Bitcoin, the amount will be calculated according to the exchange rate at the time of payment. -- **Hourly rate:** Amount of budget per hour, since it’s unlikely that the maintenance of the project requires the exact same workload each sprint. +- **Hourly rate:** Amount of budget per hour, since it’s unlikely that the maintenance of the project requires the exact same workload each sprint. > ⚠️ *Note that you will need to provide a comprehensive report of the work done at the end of each month, including the list of issues/bugs/pull requests worked on, time spent on each of these, & finally, the associated cost. The time allocation & price will likely vary from month to month, depending on the nature of the project you're contributing to. The report should be in the form of a Milestone Delivery, again like the typical procedure. W3F will make the payments only after the successful merge of each individual report.* diff --git a/maintenance/wasm-opt-for-rust.md b/applications/maintenance/wasm-opt-for-rust.md similarity index 100% rename from maintenance/wasm-opt-for-rust.md rename to applications/maintenance/wasm-opt-for-rust.md diff --git a/docs/CODE_OF_CONDUCT.md b/docs/CODE_OF_CONDUCT.md deleted file mode 120000 index 0400d574603..00000000000 --- a/docs/CODE_OF_CONDUCT.md +++ /dev/null @@ -1 +0,0 @@ -../CODE_OF_CONDUCT.md \ No newline at end of file diff --git a/docs/Introduction/ideas.md b/docs/Introduction/ideas.md index bdec9d2153f..82ffd8ee563 100644 --- a/docs/Introduction/ideas.md +++ b/docs/Introduction/ideas.md @@ -4,9 +4,9 @@ sidebar_position: 3 # Project Ideas -An overview of existing projects in the Web 3.0 Technology Stack along with broad project ideas we would potentially be interested in funding can be found [here](https://wiki.polkadot.network/docs/build-open-source), as well as a list of previously accepted applications [here](../applications/index.md). +An overview of existing projects in the Web 3.0 Technology Stack along with broad project ideas we would potentially be interested in funding can be found [here](https://wiki.polkadot.network/docs/build-open-source), as well as a list of previously accepted applications [here](../../applications/index.md). -[Requests For Proposals](../RFPs/README.md) (RFPs) represent concrete ideas for projects that we would like to see implemented. Several teams may apply for the same RFP, so even if another team has already applied to implement a certain RFP, we invite you to do the same if you're interested. +[Requests For Proposals](../rfps.md) (RFPs) represent concrete ideas for projects that we would like to see implemented. Several teams may apply for the same RFP, so even if another team has already applied to implement a certain RFP, we invite you to do the same if you're interested. Finally, you don't need to start your own project in order to be eligible for a grant. Instead, some teams choose to port existing work to Substrate, where the pertinent licenses allow, or even to contribute to an existing open-source project. In the latter case, you should check in advance that the maintainers of the project are interested in your contribution, and the acceptance of the milestones will generally be tied to the inclusion of your work in said project. See the [Maintenance Grants section](../maintenance.md) for more info. diff --git a/docs/Introduction/intro.md b/docs/Introduction/intro.md index 82a854f83aa..fc02ed87e87 100644 --- a/docs/Introduction/intro.md +++ b/docs/Introduction/intro.md @@ -28,4 +28,4 @@ Please also heed our [Announcement Guidelines](../Support%20Docs/announcement-gu Finally, we take licensing and the right of all teams in and outside the ecosystem to be recognised for their work very seriously. Using others' work with no attribution or indication that this was not your own work as part of a milestone delivery **will lead to immediate termination**. Please reach out to us before submitting if you have any doubts on how to comply with a specific license and we'll be happy to help. -We also try to enforce our [code of conduct](https://github.com/w3f/Grants-Program/blob/web-test-branch/CODE_OF_CONDUCT.md) and based on this may [block users](https://github.blog/2016-04-04-organizations-can-now-block-abusive-users/). +We also try to enforce our [code of conduct](../../CODE_OF_CONDUCT.md) and based on this may [block users](https://github.blog/2016-04-04-organizations-can-now-block-abusive-users/). diff --git a/docs/README.md b/docs/README.md deleted file mode 120000 index 32d46ee883b..00000000000 --- a/docs/README.md +++ /dev/null @@ -1 +0,0 @@ -../README.md \ No newline at end of file diff --git a/docs/applications b/docs/applications deleted file mode 120000 index 32c37e2d5b3..00000000000 --- a/docs/applications +++ /dev/null @@ -1 +0,0 @@ -../applications \ No newline at end of file diff --git a/docs/docs/faq.md b/docs/docs/faq.md deleted file mode 120000 index be736927b29..00000000000 --- a/docs/docs/faq.md +++ /dev/null @@ -1 +0,0 @@ -../faq.md \ No newline at end of file diff --git a/docs/docs/readme.md b/docs/docs/readme.md deleted file mode 100644 index aba65647b94..00000000000 --- a/docs/docs/readme.md +++ /dev/null @@ -1,3 +0,0 @@ -This folder is a hack to make links from Applications work in the website. -It simply contains simlinks to the following files: -/docs/faq.md \ No newline at end of file diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 00000000000..bf48b8249a5 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,4 @@ +--- +draft: true +--- + diff --git a/docs/maintenance b/docs/maintenance deleted file mode 120000 index 765a7bbc5c3..00000000000 --- a/docs/maintenance +++ /dev/null @@ -1 +0,0 @@ -../maintenance \ No newline at end of file diff --git a/docs/process.md b/docs/process.md index 86a0b841df8..70e5231d29d 100644 --- a/docs/process.md +++ b/docs/process.md @@ -25,7 +25,8 @@ flowchart LR style G stroke:#e83e8c,stroke-width:2px,stroke-dasharray: 5 5 style H stroke:#e83e8c,stroke-width:2px,stroke-dasharray: 5 5 - click C "Process/index" "Apply now" + click C "Process/how-to-apply" "Apply now" + click F "Process/how-to-apply" "Apply now" click D "https://wiki.polkadot.network/docs/en/learn-treasury" "https://wiki.polkadot.network/docs/en/learn-treasury" _blank click H "https://www.substrate.io/builders-program/" "https://www.substrate.io/builders-program" _blank ``` diff --git a/docs/rfps.md b/docs/rfps.md index b96865d0671..dc18578735a 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -6,15 +6,15 @@ title: Requests for Proposals

-- [❔ What is an RFP?](#grey_question-what-is-an-rfp) -- [📜 List of RFPs](#scroll-list-of-rfps) -- [📬 Suggest an RFP](#mailbox_with_mail-suggest-an-rfp) +- [:grey\_question: What is an RFP?](#grey_question-what-is-an-rfp) +- [📜 List of RFPs](#-list-of-rfps) +- [:mailbox\_with\_mail: Suggest an RFP](#mailbox_with_mail-suggest-an-rfp) ## :grey_question: What is an RFP? An RFP (Request for Proposals) is a declaration of interest for others to submit a grant or a treasury application regarding a specific project. They usually revolve around issues that the author (often someone from our team, but [anyone can suggest one](suggesting.md)) deems useful and missing or unsolved in our ecosystem. -If you find an open RFP here that you think you can address, feel free to [submit a grant application](process.md). There is a [section in our application template](https://github.com/w3f/Grants-Program/blob/master/applications/application-template.md#project-overview-page_facing_up) where you can reference the RFP you are addressing. Alternatively, you can always submit an on-chain treasury application for an RFP. +If you find an open RFP here that you think you can address, feel free to [submit a grant application](process.md). There is a [section in our application template](https://github.com/w3f/Grants-Program/blob/master/applications/application-template.md#project-overview-page_facing_up) where you can reference the RFP you are addressing. Alternatively, you can always submit an on-chain treasury application for an RFP. ## 📜 List of RFPs @@ -43,7 +43,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [implementation-benchmarking.md](RFPs/Open/implementation-benchmarking.md) | 🟢 | 20.07.2021 | | [ink!_smart_contract_block_explorer.md](RFPs/Under%20Development/ink_smart_contract_block_explorer.md) | 🟡 | 05.07.2021 | | [ISO_20022.md](RFPs/Open/ISO_20022.md) | 🟢 | 31.05.2022 | -| [ISO_8583.md](RFPs/Under%20Development/ISO_8583.md) | 🟡 | 31.05.2022 | +| [ISO_8583.md](RFPs/Open/ISO_8583.md) | 🟡 | 31.05.2022 | | [ksm-tipping-button.md](RFPs/Implemented/ksm-tipping-button.md) | 🔴 | 20.07.2021 | | [move_smart_contract_pallet.md](RFPs/Open/move_smart_contract_pallet.md) | 🟢 | 22.12.2022 | | [multi-chain-block-explorer.md](RFPs/Under%20Development/multi-chain-block-explorer.md) | 🟡 | 23.11.2021 | diff --git a/docusaurus.config.js b/docusaurus.config.js index 5b556500219..2fcf1be149d 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -42,7 +42,7 @@ module.exports = { items: [ { type: 'doc', - docId: 'introduction', + docId: 'docs/introduction', label: 'Introduction', }, { @@ -53,18 +53,18 @@ module.exports = { }, { type: 'doc', - docId: 'faq', + docId: 'docs/faq', label: 'FAQ', }, { type: 'doc', - docId: 'Process/how-to-apply', + docId: 'docs/Process/how-to-apply', position: 'right', label: 'Apply', }, { type: 'doc', - docId: 'contribute', + docId: 'docs/contribute', position: 'right', label: 'Contribute', } @@ -86,7 +86,7 @@ module.exports = { }, { label: 'Privacy Policy', - href: './Support%20Docs/privacy_policy', + to: 'docs/Support%20Docs/privacy_policy', }, ], }, @@ -125,6 +125,7 @@ module.exports = { '@docusaurus/preset-classic', { docs: { + path: '.', routeBasePath: '/', editUrl: 'https://github.com/w3f/Grants-Program/edit/master/', // showLastUpdateAuthor: true, @@ -140,9 +141,23 @@ module.exports = { rehypePlugins: [ ], exclude: [ - 'Applications/application-template.md', - 'Applications/example-project.md', - 'RFPs/suggestion-template.md' + 'applications/application-template.md', + 'applications/example-project.md', + 'docs/RFPs/suggestion-template.md', + '.docusaurus/**', + '.github/**', + '.vscode/**', + 'build/**', + 'node_modules/**', + 'src/**', + 'static/**', + 'babel.config.js', + '.gitignore', + 'LICENSE', + 'package-lock.json', + 'package.json', + 'sidebars.js', + 'README.md' ], }, blog: false, diff --git a/sidebars.js b/sidebars.js index 46a7739a683..f420e567c68 100644 --- a/sidebars.js +++ b/sidebars.js @@ -16,42 +16,42 @@ const sidebars = { { type: 'category', label: 'Introduction', - link: {type:'doc', id:'introduction'}, - items: [{type: 'autogenerated', dirName: 'Introduction'}] + link: {type:'doc', id:'docs/introduction'}, + items: [{type: 'autogenerated', dirName: 'docs/Introduction'}] }, { type: 'category', label: 'Application Process', - link: {type:'doc', id:'process'}, - items: [{type: 'autogenerated', dirName: 'Process'}] + link: {type:'doc', id:'docs/process'}, + items: [{type: 'autogenerated', dirName: 'docs/Process'}] }, { type: 'doc', - id:'suggesting' + id:'docs/suggesting' }, { type: 'doc', - id:'maintenance' + id:'docs/maintenance' }, { type: 'doc', - id:'help' + id:'docs/help' }, { type: 'doc', - id:'referral-program' + id:'docs/referral-program' }, { type: 'doc', - id:'funding' + id:'docs/funding' }, { type: 'doc', - id:'contribute' + id:'docs/contribute' }, { type: 'doc', - id:'faq' + id:'docs/faq' }, { type: 'doc', @@ -61,13 +61,13 @@ const sidebars = { { type: 'category', label: 'Support Docs', - items: [{type: 'autogenerated', dirName: 'Support Docs'}] + items: [{type: 'autogenerated', dirName: 'docs/Support Docs'}] }, { type: 'category', label: 'Requests for Proposal', - link: {type:'doc', id:'rfps'}, - items: [{type: 'autogenerated', dirName: 'RFPs'}] + link: {type:'doc', id:'docs/rfps'}, + items: [{type: 'autogenerated', dirName: 'docs/RFPs'}] }, ] }; diff --git a/src/pages/index.js b/src/pages/index.js index 6c78f2fbdf3..7613602e3e2 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -18,7 +18,7 @@ function HomepageHeader() {
+ to="./docs/Process/how-to-apply"> Apply
From 9d3e071c1d43e96f949a3e6c6e43a0cffd04ad6c Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Fri, 24 Feb 2023 04:47:18 -0800 Subject: [PATCH 173/578] Update index.md (#1566 * Update index.md Typechain follow-up 2 -> first delivery, completed * Update index.md Epirus Substrate Phase 2 -> Completed --- applications/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/applications/index.md b/applications/index.md index ea1d0c222de..9835532fb5c 100644 --- a/applications/index.md +++ b/applications/index.md @@ -46,7 +46,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Aviraj Khare](https://github.com/avirajkhare00) | [Polkasearch](polkasearch.md) | [GitHub](https://github.com/avirajkhare00) | ☐ | ☐ | ☐ | | [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib Follow up](php-rpc-lib-follow-up.md) | [GitHub](https://github.com/gmajor-encrypt/php-substrate-api) | ☐ | ☐ | ☐ | | [CoinFabrik](https://www.coinfabrik.com/) | [Scout - Security Analysis Tool](ScoutCoinFabrik.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | -| [727.ventures](https://727.ventures/) | [Typechain-Polkadot Follow-up-2](typechain-polkadot-follow-up-2.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☐ | ☐ | +| [727.ventures](https://727.ventures/) | [Typechain-Polkadot Follow-up-2](typechain-polkadot-follow-up-2.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☒ | ☒ | | [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☐ | ☐ | | [Zeeve](https://www.zeeve.io) | [Parachain deployment zoombienet testing automation](Zeeve_Parachain_deployment_zoombienet_testing_automation.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | | [Polytope Labs](https://research.polytope.technology/) | [Trie Verifier Implementation](solidity-trie-verifier.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | @@ -142,7 +142,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Cyril Carlier](https://github.com/CrommVardek) | [Maki](./Maki.md) | [GitHub](https://github.com/CrommVardek) | ☐ | ☐ | ☐ | | [TopMonks](https://www.topmonks.com/) | [Calamar](./Calamar.md) | [GitHub](https://github.com/topmonks/calamar) | ☐ | ☒ | ☐ | | [Bela Supernova](https://bsn.si/) | [Rubeus Keeper](./RubeusKeeper.md) | [GitHub](https://github.com/bsn-si) | ☐ | ☒ | ☒ | -| [Web3 Labs Ltd](https://www.web3labs.com/epirus-explorer) | [Epirus Substrate Explorer - Phase 2](./epirus_substrate_phase_2.md) | [GitHub](https://github.com/web3labs) | ☐ | ☒ | ☐ | +| [Web3 Labs Ltd](https://www.web3labs.com/epirus-explorer) | [Epirus Substrate Explorer - Phase 2](./epirus_substrate_phase_2.md) | [GitHub](https://github.com/web3labs) | ☐ | ☒ | ☒ | | [Uke](https://github.com/Uke-Messaging) | [Uke Protocol PoC & App (revised)](./uke-protocol.md) | [GitHub](https://github.com/Uke-Messaging) | ☐ | ☒ | ☒ | | [727.ventures](https://727.ventures/) | [Typechain Phase 2](./typechain-polkadot-follow-up.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☒ | ☒ | | [QSTN](https://qstn.us/) | [QSTN](./QSTN.md) | [GitHub](https://github.com/qstnus) | ☐ | ☐ | ☐ | From b104659264b54351a70746ec024e139883a44b36 Mon Sep 17 00:00:00 2001 From: Nabil Abdellaoui Date: Fri, 24 Feb 2023 11:07:15 -0500 Subject: [PATCH 174/578] Terminate Wika Network grant (#1568 Team is committed to other obligations and won't have time to work on it in the near future. --- applications/wika_network.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/wika_network.md b/applications/wika_network.md index 94cbac89415..0a9b6003b54 100644 --- a/applications/wika_network.md +++ b/applications/wika_network.md @@ -3,7 +3,7 @@ - **Team Name:** Web Registry DAO - **Payment Address:** 0xBfc8cDb5617eE0F83794156ABD7465730E125cE3 (USDT) - **Level:** 2 - +- **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/682#issuecomment-1443835696) ## Project Overview :page_facing_up: From fb11f129c10b02e7e0435f7e58995baeca8c581d Mon Sep 17 00:00:00 2001 From: Nabil Abdellaoui Date: Fri, 24 Feb 2023 11:07:48 -0500 Subject: [PATCH 175/578] Update applications index (#1567 Blockcoders XCM SDK completed milestone 2 --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 9835532fb5c..8763ee5c152 100644 --- a/applications/index.md +++ b/applications/index.md @@ -69,7 +69,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [CrossChain Labs](https://github.com/CrossChainLabs) | [DotPulse](DotPulse.md) | [GitHub](https://github.com/CrossChainLabs) | ☐ | ☒ | ☒ | | [Jett Hays](https://github.com/jettblu) | [Distributed Key Management](DistributedKeyManagement.md) | [GitHub](https://github.com/KryptikApp) | ☐ | ☒ | ☐ | | [NexToken Technology](https://github.com/NexTokenTech) | [TREX - Timed Release Encryption Xing chains](TREX_Network.md) | [GitHub](https://github.com/NexTokenTech/TREX) | ☐ | ☐ | ☐ | -| [Blockcoders](http://blockcoders.io/) | [Cross-Consensus Messaging Software Development Kit](xcm-sdk.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☐ | +| [Blockcoders](http://blockcoders.io/) | [Cross-Consensus Messaging Software Development Kit](xcm-sdk.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☒ | | [Keystone Wallet](https://keyst.one/) | [Polkadot Snap](PolkadotSnap.md) | [GitHub](https://github.com/KeystoneHQ) | ☐ | ☐ | ☐ | | [LeetCoin](https://www.leetcoin.co/) | [LeetCoin](leetcoin.md) | [GitHub](https://github.com/nashhq/leetcoin) | ☐ | ☐ | ☐ | | [727.ventures](https://727.ventures/) | [Sol2Ink Phase 2](typechain-polkadot-follow-up.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☒ | ☒ | From 8975c040a71a809b9ca3c90a2511b84a4db5efa5 Mon Sep 17 00:00:00 2001 From: Anwesh Date: Sun, 26 Feb 2023 21:08:35 +0530 Subject: [PATCH 176/578] Mempool Dashboard - Version 2 (#1559) * Mempool Dashboard - Version 2 * Mempool Dashboard - Version 2 * Mempool Dashboard - Version 2 * Update applications/polkadot-mempool-explorer-v2.md Co-authored-by: Matteo Casonato * fix(formatting) * fix(formatting) * Mempool Dashboard - Version 2 * Mempool Dashboard - Version 2 * fix(formatting) * fix(formatting) * fix(formatting) * fix(formatting) * fix(formatting) * fix(formatting) * fix(formatting) * fix(suggestions) * fix(suggestions) * fix(suggestions) * fix(suggestions) * fix(suggestions) --------- Co-authored-by: Matteo Casonato --- applications/polkadot-mempool-explorer-v2.md | 477 +++++++++++++++++++ 1 file changed, 477 insertions(+) create mode 100644 applications/polkadot-mempool-explorer-v2.md diff --git a/applications/polkadot-mempool-explorer-v2.md b/applications/polkadot-mempool-explorer-v2.md new file mode 100644 index 00000000000..6d16d8a424e --- /dev/null +++ b/applications/polkadot-mempool-explorer-v2.md @@ -0,0 +1,477 @@ +# polkadot-mempool-explorer-v2 + + + + + +- **Team Name:** NA + + + +- **Payment Address:** TBD + + + +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + + + + + +## Project Overview :page_facing_up: + + + +Mempool Explorer enables Polkadot ecosystem members to monitor pending transactions across several parameters and gain meaningful insights. + + + + + +**Follow-up of Mempool Dashboard - Version 1** + + + +- Link to the phase 1 project: [medium](https://medium.com/protofire-blog/monitoring-pending-transactions-in-polkadot-with-mempool-explorer-36e88e8a41ed) + + + + + +However the project was created by a different team, Protofire. Currently it's not in working condition, the provided link https://mempool.dot.protofire.io/ doesn't work anymore. + + + + + +### Overview + + + +Version 2 of mempool dashboard, is a tool to monitor pending transactions in Polkadot, Kusama, Westend, Rococo and you can add your customized network. + + + + + +**Current issues with the initial implementation** + + + +version 1 of the mempool dashboard is not in working condition. I took this opportunity to revive the project and create a next version of the original project by fixing the current issues, creating a new UI to enhance user experience and readability and improvements to the API. + + + + + +My first task was to understand the codebase, identify the current issue and provide a fix for it. After applying a few patches I was able to restore back to the original state, however still with few issues. + + + + + +**Noteable issues** + + + +- [proper balance amount was not displayed correctly](https://github.com/muddlebee/polkadot-mempool-explorer/issues/4) + + + +- [docker scripts not working](https://github.com/muddlebee/polkadot-mempool-explorer/issues/1) + + + +- [enhance caching logic](https://github.com/muddlebee/polkadot-mempool-explorer/issues/5) + + + +- [feature to view accounts/txn details not working properly across different networks](https://github.com/muddlebee/polkadot-mempool-explorer/issues/6) + + + +- lack of proper code documentation ( it was difficult for me to understand the codebase initially ) + + + + + +and set of exhaustive open issues https://github.com/muddlebee/polkadot-mempool-explorer/issues + + + +track of patches/fixes done till date - https://github.com/muddlebee/polkadot-mempool-explorer/commits/dev + + + +We have fixed majority of the issues already. + + + + + +**What's in version 2** + + + + + +- new UI for desktop and mobile view [figma link](https://www.figma.com/file/2EIEKQXfpI6wBldxQ18h6Q/Polkadot-work?node-id=0:1&t=aWz2emO8pIhjWyP5-1) + + + +- fix the existing issues + + + +- enable CI/CD deployment to the hosted servers and fix docker scripts + + + +- series of tutorials on polkadot-js APIs + + + +Currently there's a lack of proper tutorials/education materials for anything polkadot-js API related stuff other than the official docs. I would like to create an extensive tutorial on how to consume polkadot-js APIs (more details in Milestone section). + + + + +why create a separate set of tutorials? + + + +- currently the [polkadot JS docs](https://polkadot.js.org/docs/api) is difficult for beginners with zero or less technical knowledge about the polkadot architecture to understand properly. + + + +- easy to learn and develop using polkadot JS APIs/SDKs as compared to substrate in Rust + + + + + +### Project Details + + + +Github: https://github.com/muddlebee/polkadot-mempool-explorer + + + +API : /api folder + + + +Frontend: /web folder + + + + + +API uses nodejs on top of polkadot js API + + + +Frontend uses React to render the transaction blocks in the UI + + + + + +**Note** We already have done 50% of the proposed work, and its live in the url below + + + +[mempool-ui](http://139.84.168.166:3000/#/main) + + + + + +### Technology stack + + + + + +- javascript, nodejs, react + + + +- polkadot js API + + + +- docker + + + + + +### Ecosystem Fit + + + +Solution that would allow members of the Polkadot ecosystem to monitor information related to pending transactions. + + + +More details has been published in the phase 1 delivery report [medium](https://medium.com/protofire-blog/monitoring-pending-transactions-in-polkadot-with-mempool-explorer-36e88e8a41ed) + + + + + +Tutorials for polkadot JS APIs will help educate folks who are not expert in Rust/Substrate and want to adopt JS first approach first. We have many examples of live webapps integrating polkadot JS APIs like wallets, tools etc. + + + + + +## Team :busts_in_silhouette: + + + + + +### Team members + + + +#### Name of team leader: + + + +- Anwesh Nayak (@muddlebee) + + + +#### Names of team members: + + + +- Arnav Nayak + + + +- Dikhyant Krishna + + + + + +### Contact + + + + + +- **Contact Name:** Anwesh Nayak + + + +- **Contact Email:** anweshknayak@gmail.com + + + + + +### Legal Structure + + + + + +- **Registered Address:** NA + + + +- **Registered Legal Entity:** NA + + + + + +### Team's experience + + + +I have around 5 years of experience in full stack development. Currently work as a tech lead at B2B fintech firm. Also a polkadot ambassador and the community moderator of the official polkadot/kusama discord. I have been contributing to the ecosystem since last year. Also participated in Thousand Contributors Programme by w3f and have been adding suggestions/improvements across the w3f github projects. + + + + + +**Arnav**, our lead designer has 2 years of experience in product design prior to that used to work as a architect with few years of experience. + + + + + +**Dikhyant**, frontend developer has around 2 years of experience in web development, creating UI out of design specs. + + + + + +### Team Code Repos + + + + + +- Currently hosted here https://github.com/muddlebee/polkadot-mempool-explorer + + + +will move to a separate github repo once grant is approved + + + + + +### Team LinkedIn Profiles (if available) + + + + + +- Anwesh Nayak + + + + + +- Arnav Nayak + + + +- Dikhyant Krishna + + + + + +## Development Roadmap :nut_and_bolt: + + + + + +### Overview + + + + + +- **Total Estimated Duration:** 7-8 weeks + + +- **Full-Time Equivalent (FTE):** 3 + + + +- **Total Costs:** 9000 USD + + + + + +### Milestone 1 + + + +#### version 2 of mempool dashboard and polkadot js API tutorials + + + + +- **Estimated Duration:** 7-8 weeks + + + +- **FTE:** 3 + + + +- **Costs:** 9000 USD + + +| Number | Deliverable | Specification | +| ------: | -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **0a.** | License | APACHE 2 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how to view pending transactions in dashboard | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | | | | +| 1. | new UI for desktop and mobile view and fix existing issues| | +| 2. | enhance the APIs and fix existing issues | +| 3. | enable CI/CD | spin up a server instance for hosting the backend and deploying the frontend at github pages | + | 4a | polkadot js API tutorials | We will provide both **inline documentation** of the code and a series of **tutorial** that explains how to run sample examples | +| 4b | Graphics/Illustrations | Illustrations wherever required to explain complex topics +| 4c | Publish tutorials online | Use a technical documentation tool to publish the tutorials online + +Sample tutorials +- https://github.com/muddlebee/polkadot-js-beginner-series +- https://rust-unofficial.github.io/too-many-lists/index.html + + +Chapters overview + + + +1. Explain the basics of polkadot architecture + +2. Role of polkadot JS API, substrate and how to interact with the live blockchain + +3. How to fetch the metadata, and what are the metadata of the blockchain? https://polkadot.js.org/docs/api/start/basics + +4. What's the purpose of polkadot js console and how to use it? https://polkadot.js.org/apps/#/ + +5. Explain transaction lifecycle, and how to perform transactions through the API + +and more ..... + +Overall goal it to curate a series of tutorials to build the concepts of polkadot blockchain. + + +#### Cost breakup + +Design - 1500 USD + +Frontend - 1500 USD + +API/backend - 2500 USD + +CI/CD setup + server costs/maintenance - 500 USD + +polkadot js API tutorials - 3000 USD + + + + + + +## Future Plans + + + + + +### Version 2 of polkadot JS tutorials + + + +- Create a extensive and expanded set of tutorials covering most of the [polkadot JS APIs](https://polkadot.js.org/docs/api/) + + + +- Make it good enough so it can be integrated and added over to the education repo at w3f https://github.com/w3f/w3f-education + + + +- Expand the goal of education through quality content + + + +- Add good explanatory graphics to explain the basic concepts \ No newline at end of file From 36a3c01b61ec1d5720f6782e34643c99849be265 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Sun, 26 Feb 2023 16:41:14 +0100 Subject: [PATCH 177/578] Update index.md --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 8763ee5c152..88d6c095b4c 100644 --- a/applications/index.md +++ b/applications/index.md @@ -56,6 +56,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [hack-ink](https://hack.ink/) | [Slothunter](slothunter.md) | [GitHub](https://github.com/hack-ink) | ☐ | ☐ | ☐ | | [Invers Inc](https://invers.tech/) | [Zkwasm Rollups Transfer](zkwasm-rollups-transfer.md) | [GitHub](https://github.com/zero-network) | ☐ | ☐ | ☐ | | [decentraDOT](https://decentradot.com/) | [Cyclops Validator Dashboard](cyclops.md) | [GitHub](https://github.com/ArthurHoeke?tab=repositories) | ☐ | ☐ | ☐ | +| [Anwesh Nayak](https://github.com/muddlebee) | [Mempool Dashboard - Version 2](polkadot-mempool-explorer-v2.md) | [GitHub](https://github.com/muddlebee) | ☐ | ☐ | ☐ | ## 2022 From d1fe0110132bca333d441e9aeb8c054574f42d75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Mon, 27 Feb 2023 11:50:55 +0100 Subject: [PATCH 178/578] Improve maintenance and help pages --- README.md | 24 ++++++++++++------------ docs/help.md | 20 ++++++++++---------- docs/maintenance.md | 19 +++++++++++++------ docusaurus.config.js | 2 ++ 4 files changed, 37 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index 776bf88ac9f..6205d1d610d 100644 --- a/README.md +++ b/README.md @@ -20,9 +20,9 @@ - [:hammer\_and\_wrench: Maintenance Grants](#hammer_and_wrench-maintenance-grants) - [:moneybag: Referral Program](#moneybag-referral-program) - [:bulb: Help](#bulb-help) - - [Additional information](#additional-information) - - [Real-time conversation](#real-time-conversation) + - [Real-time Conversation](#real-time-conversation) - [Office Hours](#office-hours) + - [Additional Information](#additional-information) - [:rocket: Alternative Funding Sources](#rocket-alternative-funding-sources) - [Substrate Builders Program vs Treasury vs Web3 Grants](#substrate-builders-program-vs-treasury-vs-web3-grants) - [Substrate Builders Program](#substrate-builders-program) @@ -227,24 +227,18 @@ In order to be eligible for the referral bonus, the application itself must cont ## :bulb: Help -### Additional information +### Real-time Conversation -| | | | | | | -| :-: | :-: | :-: | :-: | :-: | :-: | -| [W3F Website](https://web3.foundation) | [W3F Twitter](https://twitter.com/web3foundation) | [W3F Medium](https://medium.com/web3foundation) | [Polkadot Wiki](https://wiki.polkadot.network/en/) | [Web 3.0 Reddit](https://www.reddit.com/r/web3) | [W3F YouTube](https://www.youtube.com/channel/UClnw_bcNg4CAzF772qEtq4g) | +We have a Matrix channel for grant-related questions and activities. Head over there to ask grants-related questions, share your experience with other applications and grantees, or simply hang out: -### Real-time conversation +- [W3F Grants Community](https://matrix.to/#/!XpynPDLusWUWfDpaqr:matrix.org?via=web3.foundation&via=matrix.org) -We have Matrix/Element channels for real-time discussions on Web3 and Polkadot. Join the conversation. +We also have Matrix/Element channels for real-time discussions on Web3 and Polkadot. Join the conversation! - [Web3 Foundation Chat](https://matrix.to/#/#w3f:matrix.org) - [Polkadot Space](https://matrix.to/#/#polkadot:web3.foundation) - [Kusama Space](https://matrix.to/#/#kusama:web3.foundation) -Besides, we also have a **community room for all grant recipients**. Head over to that room to share your experience with other grantees, ask grants-related questions or simply hang out: - -- [W3F Grants Community](https://matrix.to/#/!XpynPDLusWUWfDpaqr:matrix.org?via=web3.foundation&via=matrix.org) - ### Office Hours Web3 Foundation Grants Office Hours are a chance to ask the grants team questions regarding a specific (potential) grant application. It offers @@ -261,6 +255,12 @@ Apply for Office Hours if you It is **not** a chance to pitch your project, especially since only a small subset of the committee will participate in the call. To apply, please fill out the [Office Hours :alarm_clock: form](https://forms.gle/54xkiqU37WwdN9UR6). Be as specific as possible, so we can help you more quickly. We will get back to you with follow-up questions or a link for booking a timeslot. +### Additional Information + +| | | | | | | +| :-: | :-: | :-: | :-: | :-: | :-: | +| [W3F Website](https://web3.foundation) | [W3F Twitter](https://twitter.com/web3foundation) | [W3F Medium](https://medium.com/web3foundation) | [Polkadot Wiki](https://wiki.polkadot.network/en/) | [Web 3.0 Reddit](https://www.reddit.com/r/web3) | [W3F YouTube](https://www.youtube.com/channel/UClnw_bcNg4CAzF772qEtq4g) | + ## :rocket: Alternative Funding Sources diff --git a/docs/help.md b/docs/help.md index 5bfb1be914d..66d04a20bfe 100644 --- a/docs/help.md +++ b/docs/help.md @@ -4,24 +4,18 @@ title: Help --- -### Additional information +### Real-time Conversation -| | | | | | | -| :-: | :-: | :-: | :-: | :-: | :-: | -| [W3F Website](https://web3.foundation) | [W3F Twitter](https://twitter.com/web3foundation) | [W3F Medium](https://medium.com/web3foundation) | [Polkadot Wiki](https://wiki.polkadot.network/en/) | [Web 3.0 Reddit](https://www.reddit.com/r/web3) | [W3F YouTube](https://www.youtube.com/channel/UClnw_bcNg4CAzF772qEtq4g) | +We have a Matrix channel for grant-related questions and activities. Head over there to ask grants-related questions, share your experience with other applications and grantees, or simply hang out: -### Real-time conversation +- [W3F Grants Community](https://matrix.to/#/!XpynPDLusWUWfDpaqr:matrix.org?via=web3.foundation&via=matrix.org) -We have Matrix/Element channels for real-time discussions on Web3 and Polkadot. Join the conversation. +We also have Matrix/Element channels for real-time discussions on Web3 and Polkadot. Join the conversation! - [Web3 Foundation Chat](https://matrix.to/#/#w3f:matrix.org) - [Polkadot Space](https://matrix.to/#/#polkadot:web3.foundation) - [Kusama Space](https://matrix.to/#/#kusama:web3.foundation) -Besides, we also have a **community room for all grant recipients**. Head over to that room to share your experience with other grantees, ask grants-related questions or simply hang out: - -- [W3F Grants Community](https://matrix.to/#/!XpynPDLusWUWfDpaqr:matrix.org?via=web3.foundation&via=matrix.org) - ### Office Hours Web3 Foundation Grants Office Hours are a chance to ask the grants team questions regarding a specific (potential) grant application. It offers @@ -37,3 +31,9 @@ Apply for Office Hours if you - need help finding the resources you need. It is **not** a chance to pitch your project, especially since only a small subset of the committee will participate in the call. To apply, please fill out the [Office Hours :alarm_clock: form](https://forms.gle/54xkiqU37WwdN9UR6). Be as specific as possible, so we can help you more quickly. We will get back to you with follow-up questions or a link for booking a timeslot. + +### Additional Information + +| | | | | | | +| :-: | :-: | :-: | :-: | :-: | :-: | +| [W3F Website](https://web3.foundation) | [W3F Twitter](https://twitter.com/web3foundation) | [W3F Medium](https://medium.com/web3foundation) | [Polkadot Wiki](https://wiki.polkadot.network/en/) | [Web 3.0 Reddit](https://www.reddit.com/r/web3) | [W3F YouTube](https://www.youtube.com/channel/UClnw_bcNg4CAzF772qEtq4g) | diff --git a/docs/maintenance.md b/docs/maintenance.md index 7a68592e73f..600b04eba53 100644 --- a/docs/maintenance.md +++ b/docs/maintenance.md @@ -7,19 +7,26 @@ title: Maintenance Grants Maintenance Grants are yet another idea to get involved with the Polkadot community. If you are a user of an open-source library that has gone out of date, or you simply want to work on small new features/fix bugs in these repos, we can support your contributions via a grant. We are happy to award rolling grants on a monthly basis, as long as the work done within each time period is performed to a quality standard deemed satisfactory by the grant evaluators. +## Application Process + The process of applying for a Maintenance Grant is similar to what was already outlined above, but instead of defining very detailed deliverables for each milestone upfront, we will ask you to specify, where possible: -- The repo(s) that need maintenance -- Outline of why the specific project should continue being supported -- Broad overview of the features/bugs that need development contributions -- An assurance that the current project owners are willing to review/accept your contributions (a note here: if you're fully taking over the project, it would make more sense for the current owners to transfer the repository to your organisation. If you can't get in touch with them, you may, of course, work on a fork) -- Max budget per month +- the repo(s) that need maintenance, +- outline of why the specific project should continue being supported, +- broad overview of the features/bugs that need development contributions, +- an assurance that the current project owners are willing to review/accept your contributions (a note here: if you're fully taking over the project, it would make more sense for the current owners to transfer the repository to your organisation. If you can't get in touch with them, you may, of course, work on a fork), and +- max budget per month. Then, at the end of each month, you will need to provide a comprehensive report of the work done, including the list of issues/bugs/pull requests worked on, time spent on each of these & finally the associated cost. It is quite likely that the time allocation & cost will vary from month to month, depending on the nature of the project you're contributing to. The delivery process and format should follow that of a typical [milestone delivery](https://github.com/w3f/Grant-Milestone-Delivery#mailbox-milestone-delivery-process), as will the processing of the payment. -Please note that: +## Notes - Maintenance grants, as the name suggests, are meant to allow teams/individuals to maintain a certain project, and not to continue its development or implement larger features. Please use the traditional application process for this purpose. - The 1-month timeframe is just a guideline. If you find it unsuitable for you or the chosen project for any reason, feel free to adjust as seen fit and point this out in your application. - Please bear in mind that the Grants Committee might be stricter in accepting maintainers when compared to typical grants, mostly selecting for applicants with proven experience in the relevant tech stacks. - Maintenance Grants are only awarded for fixed timeframes. The requested duration needs to be specified in the application. + +## Help + +- For a list of previously accepted maintenance grants, see the `applications/maintenance` folder in our grants repository. +- For a list of ways to reach us and ask questions, see our [Help page](help.md). diff --git a/docusaurus.config.js b/docusaurus.config.js index 2fcf1be149d..4fd923b27c4 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -143,6 +143,8 @@ module.exports = { exclude: [ 'applications/application-template.md', 'applications/example-project.md', + 'applications/maintenance/maintenance-template.md', + 'applications/application-template-research.md', 'docs/RFPs/suggestion-template.md', '.docusaurus/**', '.github/**', From 6352eece192e105e2d44270c2b97a75f4a4f3845 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Mon, 27 Feb 2023 02:52:21 -0800 Subject: [PATCH 179/578] Update ajuna_network_follow_up.md (#1571 Add level to fix actions --- applications/ajuna_network_follow_up.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/ajuna_network_follow_up.md b/applications/ajuna_network_follow_up.md index b621692be06..9a0086c34b1 100644 --- a/applications/ajuna_network_follow_up.md +++ b/applications/ajuna_network_follow_up.md @@ -2,7 +2,7 @@ * **Team Name:** Ajuna Network Team * **Payment Address:** 1. Milestone: 1FgaH4sRHF4boR4Fw316ddKMJbFpsDXGeL 2-4. Milestone: 3H2shhx3GyMjc5Y4QuF9D5skbQgZDhvPMq -*The above combination of your GitHub account submitting the application and payment address will be your unique identifier during the program. Please keep them safe.* +* **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 ![image](https://user-images.githubusercontent.com/17710198/136852531-d9eb47cd-efcd-4c88-bdbf-78dfcbffe287.png) From 85c185f98eec13fdca0181c5ad7d969627453dd5 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Mon, 27 Feb 2023 08:13:56 -0800 Subject: [PATCH 180/578] Move zondax maintenance application in /maintenance (#1572) --- applications/{ => maintenance}/Zondax-Support.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename applications/{ => maintenance}/Zondax-Support.md (100%) diff --git a/applications/Zondax-Support.md b/applications/maintenance/Zondax-Support.md similarity index 100% rename from applications/Zondax-Support.md rename to applications/maintenance/Zondax-Support.md From 1b3dfccbdcb23e898e13ccd3f60fd227349776fc Mon Sep 17 00:00:00 2001 From: Doordashcon Date: Mon, 27 Feb 2023 19:03:39 +0100 Subject: [PATCH 181/578] update payment address (#1570) --- applications/solidity-trie-verifier.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/solidity-trie-verifier.md b/applications/solidity-trie-verifier.md index 6e058a31bfb..b1cf75708d8 100644 --- a/applications/solidity-trie-verifier.md +++ b/applications/solidity-trie-verifier.md @@ -1,7 +1,7 @@ # solidity-trie-verifier - **Team Name:** Polytope Labs -- **Payment Address:** 0xC70ac55B07A070743555C5D12B263733eCae9f92 (Ethereum DAI) +- **Payment Address:** 0x486cbad2d704bc76f8d0cdda6aa93c94d53297b9 (Ethereum DAI) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 ## Project Overview :page_facing_up: From e5c2eb23dbce850c4bf1f6c0f3eef99e54d09b57 Mon Sep 17 00:00:00 2001 From: frisitano <35734660+frisitano@users.noreply.github.com> Date: Mon, 27 Feb 2023 18:05:21 +0000 Subject: [PATCH 182/578] Binary merkle tree (#1569) * binary merkle tree application * update application * update merkle tree application --- applications/binary_merkle_tree.md | 50 +++++++++++++++++++++++++----- 1 file changed, 43 insertions(+), 7 deletions(-) diff --git a/applications/binary_merkle_tree.md b/applications/binary_merkle_tree.md index 36e95adc357..5d4bc060533 100644 --- a/applications/binary_merkle_tree.md +++ b/applications/binary_merkle_tree.md @@ -47,11 +47,11 @@ pub trait Tree { fn depth (&self) -> usize; - fn get_value(&self, index: usize) -> Result, TreeError>; + fn value(&self, index: usize) -> Result, TreeError>; - fn get_leaf(&self, index: usize) -> Result, TreeError>; + fn leaf(&self, index: usize) -> Result, TreeError>; - fn get_proof(&self, index: usize) -> Result>, TreeError>; + fn proof(&self, index: usize) -> Result>, TreeError>; } pub struct TreeDBMut<'a, H: Hasher> { @@ -68,17 +68,49 @@ pub trait TreeMut { fn depth(&self) -> uszie; - fn get_value(&self, index: usize) -> Result, TreeError>; + fn value(&self, index: usize) -> Result, TreeError>; - fn get_leaf(&self, index: usize) -> Result, TreeError>; + fn leaf(&self, index: usize) -> Result, TreeError>; - fn get_proof(&self, index: usize) -> Result>, TreeError>; + fn proof(&self, index: usize) -> Result>, TreeError>; - fn insert_value(&mut self, index: usize, value: DBValue) -> Result, TreeError>; + fn insert(&mut self, index: usize, value: DBValue) -> Result, TreeError>; + + fn remove(&mut self, key: &[u8]) -> Result, TreeError>; fn commit(&mut self); } +pub trait SparseTree { + fn root(&self) -> &H::Out; + + fn depth(&self) -> usize; + + fn value(&self, key: &[u8]) -> Result, TreeError>; + + fn leaf(&self, key: &[u8]) -> Result, TreeError>; + + fn proof(&self, key: &[u8]) -> Result>, TreeError>; +} + +pub trait SparseTreeMut { + fn root(&mut self) -> &H::Out; + + fn depth(&self) -> usize; + + fn value(&self, key: &[u8]) -> Result, TreeError>; + + fn leaf(&self, key: &[u8]) -> Result, TreeError>; + + fn proof(&self, key: &[u8]) -> Result>>, TreeError>; + + fn insert(&mut self, key: &[u8], value: DBValue) -> Result, TreeError>; + + fn remove(&mut self, key: &[u8]) -> Result, TreeError>; + + fn commit(&mut self, key: &[u8]); +} + pub struct Recorder { nodes: Vec } @@ -229,6 +261,8 @@ The project has not started yet. We have defined the requirements and designed - **FTE:** 2 - **Costs:** 10,000 USD +- **Estimated extension required** 2 weeks (as of 25/2/2023) + | Number | Deliverable | Specification | | -----: |----------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 0a. | License | Apache 2.0 / GPLv3 / MIT / Unlicense | @@ -244,6 +278,8 @@ The project has not started yet. We have defined the requirements and designed - **FTE:** 2 - **Costs:** 15,000 USD +- **Estimated extension required** 2 months (following completion of milestone 1) + | Number | Deliverable | Specification | | -----: |------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 0a. | License | Apache 2.0 / GPLv3 / MIT / Unlicense | From 3a5caa5163c3778ccbfce57f06cd548c1cc61186 Mon Sep 17 00:00:00 2001 From: Nabil Abdellaoui Date: Mon, 27 Feb 2023 14:03:39 -0500 Subject: [PATCH 183/578] Update application index (#1573) Afloat team delivered last milestone (4) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 88d6c095b4c..48ba7f6e7f6 100644 --- a/applications/index.md +++ b/applications/index.md @@ -172,7 +172,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Dante Network](https://www.dantechain.com/) | [Dante Network](./Dante_Network.md) | [GitHub](https://github.com/dantenetwork) | ☐ | ☒ | ☒ | | [Verida](https://www.verida.io/) | [Single Sign-On for Apps](./verida_network.md) | [GitHub](https://github.com/verida) | ☐ | ☐ | ☐ | | [Kami Ekbatanifard](https://github.com/Nick-1979/) | [Polkadot js plus / Nomination pools](./Plus-follow-up.md) | [GitHub](https://github.com/Nick-1979/polkadot-Js-Plus-extension/wiki) | ☐ | ☒ | ☒ | -| [Afloat Inc](https://stayafloat.io/#/) | [Tax Infrastructure Polkadot Integration](./Afloat.md) | [GitHub](https://github.com/hashed-io) | ☐ | ☒ | ☐ | +| [Afloat Inc](https://stayafloat.io/#/) | [Tax Infrastructure Polkadot Integration](./Afloat.md) | [GitHub](https://github.com/hashed-io) | ☐ | ☒ | ☒ | | [gmajor](https://github.com/gmajor-encrypt) | [SCALE Codec Comparator](./scale-codec-comparator.md) | [GitHub](https://github.com/gmajor-encrypt) | ☐ | ☒ | ☒ | | [Rusty Crewmates](http://rustycrewmates.com/) | [Substrate Tutorials](./substrate-tutorials.md) | [GitHub](https://github.com/rusty-crewmates/substrate-tutorials) | ☐ | ☒ | ☐ | | [Sequester](https://github.com/SequesterChain) | [A Common-Good Carbon Sink on Polkadot](./sequester.md) | [GitHub](https://github.com/SequesterChain/pallets) | ☐ | ☒ | ☒ | From 7754fd8a759237e34dd9d19b4481cca70bbde634 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Tue, 28 Feb 2023 09:17:30 +0100 Subject: [PATCH 184/578] Clean up applications index markdown --- applications/index.md | 72 +++++++++++++++++++++---------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/applications/index.md b/applications/index.md index 48ba7f6e7f6..3aea421d9be 100644 --- a/applications/index.md +++ b/applications/index.md @@ -25,38 +25,38 @@ Use this page for an overview of all public grants and their status. Use the sid [Menu🔝](#menu) -| Team | Project | Link | Terminated | First Delivery | Completed | -| :----------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------- | :--------- | :------------: | :-------: | -| [Deep Ink Ventures GmbH](http://deep-ink.ventures/) | [GenesisDAO](GenesisDAO.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☐ | ☐ | -| [ArtZero](https://artzero.io/) | [ArtZero & InkWhale](ArtZero_InkWhale.md) | [GitHub](https://github.com/artzero-io) | ☐ | ☐ | ☐ | -| EightFish | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☐ | ☐ | -| [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☐ | ☐ | -| [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☐ | ☐ | -| [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | -| [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☐ | ☐ | -| [Blockcoders](http://blockcoders.io/) | [Cross-chain Wallet - XCW](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☐ | ☐ | -| [OmniBTC](https://omnibtc.finance/) | [Polkadot Smart Chain](psc.md) | [GitHub](https://github.com/OmniBTC/PSC) | ☐ | ☒ | ☒ | -| [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☒ | ☒ | -| [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | -| [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☐ | ☐ | ☐ | -| [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | -| [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☐ | -| [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☐ | ☐ | -| [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | -| [Aviraj Khare](https://github.com/avirajkhare00) | [Polkasearch](polkasearch.md) | [GitHub](https://github.com/avirajkhare00) | ☐ | ☐ | ☐ | -| [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib Follow up](php-rpc-lib-follow-up.md) | [GitHub](https://github.com/gmajor-encrypt/php-substrate-api) | ☐ | ☐ | ☐ | -| [CoinFabrik](https://www.coinfabrik.com/) | [Scout - Security Analysis Tool](ScoutCoinFabrik.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | -| [727.ventures](https://727.ventures/) | [Typechain-Polkadot Follow-up-2](typechain-polkadot-follow-up-2.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☒ | ☒ | -| [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☐ | ☐ | -| [Zeeve](https://www.zeeve.io) | [Parachain deployment zoombienet testing automation](Zeeve_Parachain_deployment_zoombienet_testing_automation.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | -| [Polytope Labs](https://research.polytope.technology/) | [Trie Verifier Implementation](solidity-trie-verifier.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | -| Off-Narrative Labs | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☐ | ☐ | -| [FuzzLand](https://fuzz.land/) | [FuzzLand](FuzzLand.md) | [GitHub](https://github.com/fuzzland) | ☐ | ☐ | ☐ | -| [Fuu](https://github.com/ff13dfly/) | [Anchor, On-chain Linked List pallet and Name Service](Anchor.md) | [GitHub](https://github.com/ff13dfly/Anchor) | ☐ | ☐ | ☐ | -| [hack-ink](https://hack.ink/) | [Slothunter](slothunter.md) | [GitHub](https://github.com/hack-ink) | ☐ | ☐ | ☐ | -| [Invers Inc](https://invers.tech/) | [Zkwasm Rollups Transfer](zkwasm-rollups-transfer.md) | [GitHub](https://github.com/zero-network) | ☐ | ☐ | ☐ | -| [decentraDOT](https://decentradot.com/) | [Cyclops Validator Dashboard](cyclops.md) | [GitHub](https://github.com/ArthurHoeke?tab=repositories) | ☐ | ☐ | ☐ | -| [Anwesh Nayak](https://github.com/muddlebee) | [Mempool Dashboard - Version 2](polkadot-mempool-explorer-v2.md) | [GitHub](https://github.com/muddlebee) | ☐ | ☐ | ☐ | +| Team | Project | Link | Terminated | First Delivery | Completed | +| :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------------------------------- | :--------- | :------------: | :--------: | +| [Deep Ink Ventures GmbH](http://deep-ink.ventures/) | [GenesisDAO](GenesisDAO.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☐ | ☐ | +| [ArtZero](https://artzero.io/) | [ArtZero & InkWhale](ArtZero_InkWhale.md) | [GitHub](https://github.com/artzero-io) | ☐ | ☐ | ☐ | +| EightFish | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☐ | ☐ | +| [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☐ | ☐ | +| [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☐ | ☐ | +| [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | +| [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☐ | ☐ | +| [Blockcoders](http://blockcoders.io/) | [Cross-chain Wallet - XCW](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☐ | ☐ | +| [OmniBTC](https://omnibtc.finance/) | [Polkadot Smart Chain](psc.md) | [GitHub](https://github.com/OmniBTC/PSC) | ☐ | ☒ | ☒ | +| [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☒ | ☒ | +| [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | +| [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☐ | ☐ | ☐ | +| [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | +| [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☐ | +| [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☐ | ☐ | +| [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | +| [Aviraj Khare](https://github.com/avirajkhare00) | [Polkasearch](polkasearch.md) | [GitHub](https://github.com/avirajkhare00) | ☐ | ☐ | ☐ | +| [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib Follow up](php-rpc-lib-follow-up.md) | [GitHub](https://github.com/gmajor-encrypt/php-substrate-api) | ☐ | ☐ | ☐ | +| [CoinFabrik](https://www.coinfabrik.com/) | [Scout - Security Analysis Tool](ScoutCoinFabrik.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | +| [727.ventures](https://727.ventures/) | [Typechain-Polkadot Follow-up-2](typechain-polkadot-follow-up-2.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☒ | ☒ | +| [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☐ | ☐ | +| [Zeeve](https://www.zeeve.io) | [Parachain deployment zoombienet testing automation](Zeeve_Parachain_deployment_zoombienet_testing_automation.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | +| [Polytope Labs](https://research.polytope.technology/) | [Trie Verifier Implementation](solidity-trie-verifier.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | +| Off-Narrative Labs | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☐ | ☐ | +| [FuzzLand](https://fuzz.land/) | [FuzzLand](FuzzLand.md) | [GitHub](https://github.com/fuzzland) | ☐ | ☐ | ☐ | +| [Fuu](https://github.com/ff13dfly/) | [Anchor, On-chain Linked List pallet and Name Service](Anchor.md) | [GitHub](https://github.com/ff13dfly/Anchor) | ☐ | ☐ | ☐ | +| [hack-ink](https://hack.ink/) | [Slothunter](slothunter.md) | [GitHub](https://github.com/hack-ink) | ☐ | ☐ | ☐ | +| [Invers Inc](https://invers.tech/) | [Zkwasm Rollups Transfer](zkwasm-rollups-transfer.md) | [GitHub](https://github.com/zero-network) | ☐ | ☐ | ☐ | +| [decentraDOT](https://decentradot.com/) | [Cyclops Validator Dashboard](cyclops.md) | [GitHub](https://github.com/ArthurHoeke?tab=repositories) | ☐ | ☐ | ☐ | +| [Anwesh Nayak](https://github.com/muddlebee) | [Mempool Dashboard - Version 2](polkadot-mempool-explorer-v2.md) | [GitHub](https://github.com/muddlebee) | ☐ | ☐ | ☐ | ## 2022 @@ -93,7 +93,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [TwinP](https://github.com/herou) | [Decentralized Invoice](decentralized_invoice.md) | [GitHub](https://github.com/herou) | ☐ | ☒ | ☒ | | [Zondax](http://zondax.ch/) | [Hybrid node research grant](hybrid_node_research.md) | [GitHub](https://github.com/ZondaX) | ☐ | ☐ | ☐ | | [Bright Inventions](https://brightinventions.pl/) | [ZK-Snarks Tutorial](ZK-Snarks%20tutorial.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☐ | -| [Common Orbit LLC](https://brson.github.io) | [wasm-opt-for-rust maintenance](maintenance/wasm-opt-for-rust.md) | [GitHub](https://github.com/brson/wasm-opt-rs) | ☐ | ☒ | ☐ | +| [Common Orbit LLC](https://brson.github.io) | [wasm-opt-for-rust maintenance](maintenance/wasm-opt-for-rust.md) | [GitHub](https://github.com/brson/wasm-opt-rs) | ☐ | ☒ | ☐ | | [Salaheldin Soliman](https://github.com/salaheldinsoliman) | [Solang developer experience improvements](Solang_developer_experience_improvements.md) | [GitHub](https://github.com/hyperledger/solang) | ☐ | ☐ | ☐ | | [Optymalizacja AI Grzegorz Miebs](https://github.com/miepsik) | [Validator selection](validators_selection.md) | [GitHub](https://github.com/miepsik) | ☒ | ☐ | ☐ | | [Applied Blockchain Ltd](https://appliedblockchain.com/) | [Silent Data](project_silentdata.md) | [GitHub](https://github.com/appliedblockchain) | ☐ | ☐ | ☐ | @@ -103,9 +103,9 @@ Use this page for an overview of all public grants and their status. Use the sid | [Odyssey B.V.](https://odyssey.org/) | [Momentum, an open source, metaverse for digital societies](odyssey_momentum.md) | [GitHub](https://github.com/momentum-xyz) | ☐ | ☐ | ☐ | | [Bela Supernova](https://bsn.si/) | [Rubeus Keeper Stage 2](Rubeus_keeper_st2.md) | [GitHub](https://github.com/bsn-si) | ☐ | ☒ | ☐ | | [Coong Team](https://coong.xyz/) | [Coong Wallet](coong_wallet.md) | [GitHub](https://github.com/CoongCrafts) | ☐ | ☐ | ☐ | -| OCamlMyCaml | [PrivaDEX: Cross-Chain DEX Aggregator MVP](PrivaDEX_aggregator.md) | [GitHub](https://github.com/kapilsinha/privadex) | ☐ | ☐ | ☐ | -| [Aband-Network](https://a.band/) | [Substrate Parachain PoS Template](substrate-parachain-PoS-template.md) | [GitHub](https://github.com/Aband-Network/substrate-parachain-PoS-template) | ☐ | ☒ | ☒ | -| [MangoBOX labs](https://www.mangobox.xyz/) | [MangoSale Protocol](MangoSale_Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☐ | ☐ | +| OCamlMyCaml | [PrivaDEX: Cross-Chain DEX Aggregator MVP](PrivaDEX_aggregator.md) | [GitHub](https://github.com/kapilsinha/privadex) | ☐ | ☐ | ☐ | +| [Aband-Network](https://a.band/) | [Substrate Parachain PoS Template](substrate-parachain-PoS-template.md) | [GitHub](https://github.com/Aband-Network/substrate-parachain-PoS-template) | ☐ | ☒ | ☒ | +| [MangoBOX labs](https://www.mangobox.xyz/) | [MangoSale Protocol](MangoSale_Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☐ | ☐ | ### 🏄‍♀️ Wave 15 - Third Quarter 2022 From 4b3cb36293c77c71aaedd7944a2c62a38f6eace1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Tue, 28 Feb 2023 09:19:24 +0100 Subject: [PATCH 185/578] PrivaDEX 1st and last milestone completed --- applications/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/applications/index.md b/applications/index.md index 3aea421d9be..0d1e3ea773c 100644 --- a/applications/index.md +++ b/applications/index.md @@ -103,9 +103,9 @@ Use this page for an overview of all public grants and their status. Use the sid | [Odyssey B.V.](https://odyssey.org/) | [Momentum, an open source, metaverse for digital societies](odyssey_momentum.md) | [GitHub](https://github.com/momentum-xyz) | ☐ | ☐ | ☐ | | [Bela Supernova](https://bsn.si/) | [Rubeus Keeper Stage 2](Rubeus_keeper_st2.md) | [GitHub](https://github.com/bsn-si) | ☐ | ☒ | ☐ | | [Coong Team](https://coong.xyz/) | [Coong Wallet](coong_wallet.md) | [GitHub](https://github.com/CoongCrafts) | ☐ | ☐ | ☐ | -| OCamlMyCaml | [PrivaDEX: Cross-Chain DEX Aggregator MVP](PrivaDEX_aggregator.md) | [GitHub](https://github.com/kapilsinha/privadex) | ☐ | ☐ | ☐ | -| [Aband-Network](https://a.band/) | [Substrate Parachain PoS Template](substrate-parachain-PoS-template.md) | [GitHub](https://github.com/Aband-Network/substrate-parachain-PoS-template) | ☐ | ☒ | ☒ | -| [MangoBOX labs](https://www.mangobox.xyz/) | [MangoSale Protocol](MangoSale_Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☐ | ☐ | +| OCamlMyCaml | [PrivaDEX: Cross-Chain DEX Aggregator MVP](PrivaDEX_aggregator.md) | [GitHub](https://github.com/kapilsinha/privadex) | ☐ | ☒ | ☒ | +| [Aband-Network](https://a.band/) | [Substrate Parachain PoS Template](substrate-parachain-PoS-template.md) | [GitHub](https://github.com/Aband-Network/substrate-parachain-PoS-template) | ☐ | ☒ | ☒ | +| [MangoBOX labs](https://www.mangobox.xyz/) | [MangoSale Protocol](MangoSale_Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☐ | ☐ | ### 🏄‍♀️ Wave 15 - Third Quarter 2022 From 85391136a46e04cf9aafb4ddeb9327b108fae7fa Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Tue, 28 Feb 2023 02:12:47 -0800 Subject: [PATCH 186/578] Update index.md (#1574) Supersig -> Completed --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 0d1e3ea773c..1e71179c4b3 100644 --- a/applications/index.md +++ b/applications/index.md @@ -179,7 +179,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Keysafe Network](https://github.com/keysafe-protocol) | [A decentralized protocol for private key custody and crypto asset management](./keysafe_network.md) | [GitHub](https://github.com/keysafe-protocol) | ☐ | ☒ | ☐ | | [Fennel Labs](https://fennellabs.com/) | [Whiteflag on Fennel Protocol](./Fennel_Protocol.md) | [GitHub](https://github.com/fennelLabs) | ☐ | ☒ | ☒ | | [Relationlabs](https://relationlabs.ai/#/home) | [Relation Graph](./Relation-Graph.md) | [GitHub](https://github.com/relationlabs) | ☐ | ☐ | ☐ | -| [Decentration](https://kabocha.network) | [Supersig](./pallet_supersig.md) | [GitHub](https://github.com/kabocha-network) | ☐ | ☒ | ☐ | +| [Decentration](https://kabocha.network) | [Supersig](./pallet_supersig.md) | [GitHub](https://github.com/kabocha-network) | ☐ | ☒ | ☒ | | [Web3 Labs Ltd](https://www.web3labs.com/epirus-explorer) | [Epirus Substrate Explorer](./epirus_substrate_explorer.md) | [GitHub](https://github.com/web3labs) | ☐ | ☒ | ☒ | | [727.ventures](https://727.ventures/) | [Sol2Ink](./sol2ink.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | | [727.ventures](https://727.ventures/) | [OpenBrush Phase 3](./openbrush-follow-up-2.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☒ | ☒ | From 908a25594c2f3456cf8d56607341bc8a5d064728 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Wed, 1 Mar 2023 09:28:29 -0300 Subject: [PATCH 187/578] Update index.md (#1576) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 1e71179c4b3..f54007aa882 100644 --- a/applications/index.md +++ b/applications/index.md @@ -81,7 +81,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [TDSoftware](https://www.tdsoftware.de/) | [Substrate IPFS Utilities](ipfs_utilities.md) | [GitHub](https://github.com/TDSoftware) | ☐ | ☒ | ☐ | | [Ink Boxes Team](https://github.com/nerdsince98) | [Ink Boxes](ink-boxes.md) | [GitHub](https://github.com/avirajkhare00/ink-boxes/) | ☐ | ☒ | ☒ | | [ParaSpell](https://github.com/paraspell) | [ParaSpell Phase 2](ParaSpell_follow-up.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | -| [SubRelay](http://subrelay.xyz/) | [SubRelay](subrelay.md) | [GitHub](https://github.com/subrelay) | ☐ | ☐ | ☐ | +| [SubRelay](http://subrelay.xyz/) | [SubRelay](subrelay.md) | [GitHub](https://github.com/subrelay) | ☐ | ☒ | ☐ | | [Wow Labz](http://www.wowlabz.com) | [Dot Marketplace Phase 3](dot_marketplace-Phase3.md) | [GitHub](https://github.com/orgs/WowLabz) | ☐ | ☒ | ☒ | | [10Clouds Sp. z o.o.](https://10clouds.com/) | [Crowdloan Front End Template](crowdloan_frontend_template.md) | [GitHub](https://github.com/10clouds) | ☐ | ☐ | ☐ | | [DodoRare, Inc.](https://dodorare.com/) | [Faterium](faterium.md) | [GitHub](https://github.com/faterium) | ☐ | ☒ | ☒ | From 28ca1633f7ea4ec0faeba63ada6f44aa5670b476 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Thu, 2 Mar 2023 01:07:52 -0800 Subject: [PATCH 188/578] Update MangoSale_Protocol.md (#1578) --- applications/MangoSale_Protocol.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/MangoSale_Protocol.md b/applications/MangoSale_Protocol.md index 6619478bfe4..c502002abdf 100644 --- a/applications/MangoSale_Protocol.md +++ b/applications/MangoSale_Protocol.md @@ -259,7 +259,7 @@ In the Substrate/Polkadot/Kusama ecosystem, we have not found any similar produ ### Contact -- **Contact Name:Jason Zhao** +- **Contact Name:** Jason Zhao - **Contact Email:** MangoBOXLabs@gmail.com - **Website: mangobox.xyz** From a307d244de9211743a0e17cb9856f6cfdfae6fe3 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Thu, 2 Mar 2023 04:08:40 -0500 Subject: [PATCH 189/578] Update README.md (#1577) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 6205d1d610d..d1e6a089b40 100644 --- a/README.md +++ b/README.md @@ -300,6 +300,7 @@ The [Substrate Builders Program](https://substrate.io/ecosystem/substrate-builde The treasury is a pot of on-chain funds collected through transaction fees, slashing, staking inefficiencies, etc. The funds held in the treasury can be spent on spending proposals. Both [Polkadot](https://polkadot.network/) and [Kusama](https://kusama.network/) offer everyone the opportunity to apply for funding via the treasury. See: - [Treasury](https://polkadot.network/treasury/) +- [Treasury Bounties](https://polkadot.subsquare.io/treasury/bounties) - [Polkadot Treasury Guide](https://docs.google.com/document/d/1IZykdp2cyQavcRyZd_dgNj5DcgxgZR6kAqGdcNARu1w) - [Kusama Treasury Guide](https://docs.google.com/document/d/1p3UQUjph5t8TVaWnTkfrI5mE-BABnM9Xvtuhdlhl6JE) From bf8f9770b56095d502f376f945f1028793699734 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 2 Mar 2023 10:51:46 +0100 Subject: [PATCH 190/578] Update funding.md Update on the website --- docs/funding.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/funding.md b/docs/funding.md index 33af5de690f..9ce7e8be6be 100644 --- a/docs/funding.md +++ b/docs/funding.md @@ -9,7 +9,8 @@ Some funding sources might be more and some less suitable for your project throu The treasury is a pot of on-chain funds collected through transaction fees, slashing, staking inefficiencies, etc. The funds held in the treasury can be spent on spending proposals. Both [Polkadot](https://polkadot.network/) and [Kusama](https://kusama.network/) offer everyone the opportunity to apply for funding via the treasury. See: -- [Treasury Wiki](https://wiki.polkadot.network/docs/en/learn-treasury) +- [Treasury](https://polkadot.network/treasury/) +- [Treasury Bounties](https://polkadot.subsquare.io/treasury/bounties) - [Polkadot Treasury Guide](https://docs.google.com/document/d/1IZykdp2cyQavcRyZd_dgNj5DcgxgZR6kAqGdcNARu1w) - [Kusama Treasury Guide](https://docs.google.com/document/d/1p3UQUjph5t8TVaWnTkfrI5mE-BABnM9Xvtuhdlhl6JE) From 549bb50e75d99ad9977a1f5ebc8ed721a608a6eb Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 2 Mar 2023 14:47:41 +0100 Subject: [PATCH 191/578] Update index.md Update Java host --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index f54007aa882..fa6910914d9 100644 --- a/applications/index.md +++ b/applications/index.md @@ -98,7 +98,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Optymalizacja AI Grzegorz Miebs](https://github.com/miepsik) | [Validator selection](validators_selection.md) | [GitHub](https://github.com/miepsik) | ☒ | ☐ | ☐ | | [Applied Blockchain Ltd](https://appliedblockchain.com/) | [Silent Data](project_silentdata.md) | [GitHub](https://github.com/appliedblockchain) | ☐ | ☐ | ☐ | | [Web3Box Labs](https://github.com/web3box-labs) | [Web3Box](Web3Box.md) | [GitHub](https://github.com/web3box-labs) | ☐ | ☒ | ☒ | -| [LimeChain](https://limechain.tech/) | [Research feasibility of Polkadot Host in Java](research-feasibiliy-java-host.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☐ | ☐ | +| [LimeChain](https://limechain.tech/) | [Research feasibility of Polkadot Host in Java](research-feasibiliy-java-host.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☒ | ☒ | | [Blaize.tech](https://blaize.tech/) | [Unified deployment for the collator node](unified_collator_node_deployment.md) | [GitHub](https://github.com/babebort-blaize) | ☐ | ☐ | ☐ | | [Odyssey B.V.](https://odyssey.org/) | [Momentum, an open source, metaverse for digital societies](odyssey_momentum.md) | [GitHub](https://github.com/momentum-xyz) | ☐ | ☐ | ☐ | | [Bela Supernova](https://bsn.si/) | [Rubeus Keeper Stage 2](Rubeus_keeper_st2.md) | [GitHub](https://github.com/bsn-si) | ☐ | ☒ | ☐ | From e1a92e3da2c0605adef9c3a9af6433ae3d796dc9 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 2 Mar 2023 15:04:45 +0100 Subject: [PATCH 192/578] Update research-feasibiliy-java-host.md Fix amount and duration --- applications/research-feasibiliy-java-host.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/applications/research-feasibiliy-java-host.md b/applications/research-feasibiliy-java-host.md index ac2b5a097cc..c7a10cc53ed 100644 --- a/applications/research-feasibiliy-java-host.md +++ b/applications/research-feasibiliy-java-host.md @@ -183,9 +183,9 @@ Described below are the steps we think are necessary to get a deep understanding ### Milestone 1 — Research the feasibility of Polkadot Host in Java -- **Estimated duration:** 4 working weeks +- **Estimated duration:** 6 working weeks - **FTE:** 2 -- **Costs:** $24,000 +- **Costs:** $36,000 This milestone will: @@ -213,4 +213,4 @@ after delivering this research. # Additional Information **➕** LimeChain has been a long-time contributor to the Substrate ecosystem mainly focused on developer tooling. Due to our -involvement in the space, we are working with various clients, developing smart contracts and working on parachains. \ No newline at end of file +involvement in the space, we are working with various clients, developing smart contracts and working on parachains. From c494af8a790be6e7587071eeb833710066987df2 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Thu, 2 Mar 2023 15:24:45 +0100 Subject: [PATCH 193/578] update rfps --- .../alternative_polkadot_host_implementations.md | 2 +- docs/rfps.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename docs/RFPs/{Open => Under Development}/alternative_polkadot_host_implementations.md (91%) diff --git a/docs/RFPs/Open/alternative_polkadot_host_implementations.md b/docs/RFPs/Under Development/alternative_polkadot_host_implementations.md similarity index 91% rename from docs/RFPs/Open/alternative_polkadot_host_implementations.md rename to docs/RFPs/Under Development/alternative_polkadot_host_implementations.md index 58beae93c31..8f182c3fb29 100644 --- a/docs/RFPs/Open/alternative_polkadot_host_implementations.md +++ b/docs/RFPs/Under Development/alternative_polkadot_host_implementations.md @@ -1,6 +1,6 @@ # Alternative Polkadot Host Implementation -* **Status:** Open +* **Status:** [Under Development 1](https://github.com/LimeChain/java-host-research), [Under Development 2](https://github.com/w3f/Grants-Program/blob/master/applications/hybrid_node_research.md) * **Proposer:** [Noc2](https://github.com/Noc2) ## Project Description :page_facing_up: diff --git a/docs/rfps.md b/docs/rfps.md index dc18578735a..3400bfc8105 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -28,7 +28,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | RFP | Status | Last Updated | | :-- | :----: | :----------: | | [a-and-v-topology.md](RFPs/Open/a-and-v-topology.md) | 🟢 | 29.11.2021 | -| [alternative_polkadot_host_implementations.md](RFPs/Open/alternative_polkadot_host_implementations.md) | 🟢 | 29.11.2021 | +| [alternative_polkadot_host_implementations.md](RFPs/Open/alternative_polkadot_host_implementations.md) | 🟡 | 02.03.2023 | | [analysis-website-and-data-platform.md](RFPs/Open/analysis-website-and-data-platform.md) | 🟢 | 17.02.2023 | | [anti-collusion_infrastructure.md](RFPs/Open/anti-collusion_infrastructure.md) | 🟢 | 29.11.2021 | | [appi.md](RFPs/Implemented/appi.md) | 🔴 | 20.07.2021 | From 3c801641d80fc6a3022799e38f0e57c5f9d23272 Mon Sep 17 00:00:00 2001 From: brendaloya <35778124+brendaloya@users.noreply.github.com> Date: Thu, 2 Mar 2023 11:36:54 -0500 Subject: [PATCH 194/578] Tellor grant application (#1532) * Brenda (#2) * added Tellor's application * chore: clarify proposal * updated reporter repo * updated tellor.md --------- Co-authored-by: Frank Bell * Brenda (#3) * added Tellor's application * chore: clarify proposal * updated reporter repo * updated tellor.md * updated milestones --------- Co-authored-by: Frank Bell * addressed comments. Added milestone 2 headline, removed redundant testin deliverable on milestone 1 deliverable 3, expanded on milestone 2 delivarable 2 * added clarity to milestone 2 deliverable 2 --------- Co-authored-by: Frank Bell --- applications/Tellor.md | 228 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 228 insertions(+) create mode 100644 applications/Tellor.md diff --git a/applications/Tellor.md b/applications/Tellor.md new file mode 100644 index 00000000000..51ec98a776a --- /dev/null +++ b/applications/Tellor.md @@ -0,0 +1,228 @@ +# Tellor + +- **Team Name:** Tellor Inc +- **Payment Address:** Ethereum 0x1B8E06E7133B89ea5A799Bf2bF0221aE71959190 (USDC) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 3 + +## Project Overview :page_facing_up: + +The Tellor oracle system is a fully decentralized community focused on securely placing data on-chain. The oracle mechanism works by using simple crypto-economic incentives to secure data through staking and dispute mechanisms, while the community is bound by a token which utilizes an anonymous governance system and monetary policy to reward and motivate adoption and development of the network. + +### Overview + +Oracles are a key piece of infrastructure for any blockchain ecosystem. Whether it’s the ability to query price data for defi applications, connect to chains outside of their own system, or make governance decisions based on real world input, oracles make the future of a chain not only exciting, but relevant to the real world. + +Polkadot builders need robust tooling to leverage the full potential of Polkadot’s multichain environment. To realize a fully functional Polkadot ecosystem, there is a need to integrate a reliable and flexible oracle solution for accessing secure data on any parachain. + +The Tellor Proposal: + +Tellor plans to implement an oracle pallet along with a deployment of controller smart contracts on a to-be-selected EVM parachain that will handle the staking, governance, and reward system. This will enable parachains across the ecosystem to read, and/or request a push of oracle data. + +This integration supports the many smart contract applications and parachain pallets requesting truly decentralized oracles across Polkadot’s environment: +oracle consumer smart contracts deployed on the same EVM parachain will use the existing Tellor oracle system as is, +while oracle consumer parachains will interact with the controller contracts via XCM. EVM/WASM smart contracts on any other smart contract parachain could also consume oracle data via the oracle pallet once installed there. + +The controller smart contracts will interact with the oracle pallet via Solidity precompiles, precompiled contracts which handle the call translation from Solidity to native Substrate pallets, and XCM. +The XCM pallets then handle cross-chain messaging, effectively enabling the smart contracts to invoke dispatchable functions within the oracle pallet installed on other parachains, as well as allow the pallet to invoke functions available within the controller smart contracts. + +### Project Details + +The Tellor oracle system is currently deployed to various EVM chains as a set of Solidity smart contracts. The existing solution has been translated into one that ensures minimal changes to the existing smart contracts, whilst enabling parachains to make use of Tellor oracle functionality via a native Substrate pallet and cross-chain messaging. + +The modified smart contracts will be deployed to an EVM smart contract parachain and the pallet incorporated within any parachain requiring oracle functionality, classified as an oracle consumer parachain. + +**Oracle Solution Components** + +The major components have been identified as follows, along with a description of the adaptations/implementation required. + +![PolkaTellor design](https://github.com/tellor-io/PolkaTellor/blob/main/public/PolkaTellorDesign.png) + + +**Oracle Contract** +The main oracle contract which handles staking, reporting and slashing, which is controlled by the Governance contract. Oracle reporters are required to stake a token to ensure data integrity before reporting oracle data. Data is reported on-chain using a query identifier, a hash of an off-chain data specification, and a simple byte array representing the data. The Oracle contract also uses its own functionality to be provided with a current staking token price, which is used to dynamically adjust the minimum stake amount (to guarantee a minimum amount of security). + +The existing smart contract will need to be adapted to support staking by parachain, so that corresponding staking events/balances can be reported from the contract to oracle consumer parachains, effectively unlocking oracle reporters to begin reporting data to these consumer parachains directly. + +The revised Oracle contract will continue to provide existing functionality to the local smart contract parachain on which it is deployed, enabling other smart contracts deployed on the same chain to use the oracle solution as-is. + +**Governance Contract** +Used to handle oracle data disputes, where a successful dispute results in the corresponding oracle data reporter having their stake slashed and distributed to the dispute initiator via the Oracle contract. Governance votes are split equally between the staking token holders, reporters, users and the Tellor team: the staking token holders are weighted by on-chain token balances, active reporters by non-transferrable ‘reporter tokens’ earned for each report they provide, users by the number of tips and the team as a tie-breaker. + +Data disputes for an oracle consumer parachain will originate on said parachain and then be reported into the Governance contract for dispute resolution. The existing Governance smart contract will therefore need to be adapted to support disputes by parachain, so that the result of disputes can be reported back to the corresponding oracle consumer parachain to take additional action. + +Vote weighting will also need to take parachain state into account, as the oracle users and reporters are now spread out across parachains in the ecosystem. Each consumer parachain could be notified of a new round of dispute voting, along with an expected duration. The oracle users and reporters of each parachain could then cast their votes on their respective parachains, acting as proxies by collating votes until finally submitting them before the voting deadline, along with additional information used to weight the votes (total submitted data points for reporters, total tips for oracle users). + +**AutoPay Contract** +This smart contract is responsible for the creation and funding of data feeds by an oracle data consumer, as well as the payment to oracle reporters. It keeps track of data submissions and user tips, allowing reporters to claim rewards as required. A percentage of the claim is taken as fees, which goes towards staking rewards. + +This functionality will need to be ported to a native Substrate pallet, so that an oracle consumer parachain can create and fund feeds as well as pay reporters locally using its own token. A reporter will earn local staking rewards based on their percentage of the overall parachain stake locked in the Oracle contract. + +**Consumer (Using Tellor) Contract** +The Using Tellor contract is incorporated into consumer smart contracts to access reported oracle data.The functionality and APIs exposed here will need to be ported to a native Substrate pallet, so that a parachain can make use of available oracle data stored within its own chain state. + +**Parachain Integration Contract** +A new lightweight smart contract to handle parachain registration and ease parachain integration from the Oracle and Governance contracts. Registration provides parachain-specific configuration and ensures that sensitive functionality can only be called by the corresponding consumer parachain ‘owner’ accounts. Helper functions will abstract the necessary call encodings for remote execution, keeping cross-chain messaging functionality separate from oracle and governance logic. + +Parachain registration could also require additional staking within the Oracle contract, further adding to the economic security of the oracle solution. + +**Tellor Pallet** +An amalgamation of aspects of the functionality from the Oracle, AutoPay and Consumer contracts, enabling oracle functionality on any parachain secured by stake within the Oracle contract. Allows oracle data feed setup and funding as well as oracle data reporting and consumption, ensuring that all oracle data for a particular parachain is stored within its own local state. + +Oracle reporters must have staked the necessary tokens for a parachain via the Oracle contract before they are able to start reporting on a consumer parachain. Oracle reporters earn rewards for reporting oracle data in the token of the parachain. + +Data disputes originate via the pallet on the consumer chain and require a dispute fee, typically 10% of stake amount and increasing with each round, to be locked before being reported to the Governance contract where they are voted on, locking an oracle reporter from reporting to the parachain until resolution. + +*Tellor core architecture:* +The underlying oracle design will follow the same structure as Tellor on other chains, namely a game theoretic design where data is put on-chain by staked reporters who are liable to lose their stake if disputed. The system can be as fast as participants desire, but like other blockchain architectures, is more secure the slower the oracle use is since it allows more time for disputes. + +Tellor architecture of the smart contracts can be found in the [TellorFlex github repository](https://github.com/tellor-io/tellorFlex) or in our [whitepaper](https://tellor.io/whitepaper/). Information on the Tellor Reporter (node) software can be found in the [Tellor Docs](https://docs.tellor.io/tellor/reporting-data/introduction). + +*Prior work or research on the topic:* +The team received an Ethereum foundation grant for researching bridges as the team was initially designing a cross-chain decentralized derivative protocol. There were no available decentralized oracles at the time and that prompted the team to design and build a decentralized oracle, which soon was dubbed Tellor. Tellor has been live on Ethereum mainnet since August 2019 and the team has continued to iterate to increase decentralization, token dependency, and improve upon governance. We have launched on several chains as of May 2022, including Ethereum, Polygon, Arbitrum, Algorand, and corresponding testnets. + +*What your project is not or will not provide or implement:* +Tellor will launch the system and help design/solve any specific integration for users in the substrate ecosystem. We will initially help bootstrap a network of reporters, however Tellor is a system that is designed to run without any team intervention. Being crypto-economically incentivized, reporters will stay in networks that provide enough incentives/rewards for them to provide data. Tellor can provide the software for reporters to run, however the size of the network will largely depend on whether users are active in the system and funding oracle reporters. It is important for the web3 ecosystem and tellor to work together to ensure enough usage and monitoring is enabled on the system once it is launched. + + + +### Ecosystem Fit + +Ecosystem Needs and Fit - For a long time the Tellor team has been fans of the Polkadot ecosystem and their pursuit of decentralization. The values of security, transparency, and truly open and decentralized networks is something that Tellor was built upon and lines up perfectly with the ecosystem built here. Oracles are a necessity for decentralized applications to meet their full potential and to expand the interoperability between chains. Although there are competitors, Tellor is an oracle built on the values which align with projects built on Polkadot. We provide the needed infrastructure for chains’ use cases to expand, while at the same time remaining uncompromising in our approach towards censorship resistance and decentralization. + +Target Audience - The target audience is developers needing connections to off-chain data. Whether it’s connections to other non-XCM connected chains, or even straight web2 off-chain data, Tellor can provide the ecosystem with a general purpose oracle that can handle any data, at any speed, for any use case. The initial goal is for the Tellor oracle pallet to be included/added to parachains so that developers can use it to access off-chain data in any smart contract structure on the ecosystem. + +Similar projects - A similar project to Tellor is the Chainlink Substrate oracle pallet. Tellor also provides off chain data however, Tellor’s design differs greatly in areas where it matters. Mainly, the Tellor oracle has a greater (actual) degree of decentralization, is crypto economically incentivized versus reputation based, and is completely flexible for the needs of any data type or frequency. In addition, once the network of reporters is bootstrapped, there is minimal team intervention needed. Anyone can become a reporter by staking, anyone can dispute the validity of the data for a fee, and the user can incentivize reporters to quickly add or replace the data they need by posting a reward. The system is permissionless, as well as sybil and censorship resistant. + + +## Team :busts_in_silhouette: + +### Team members + +Our team consists of 7 developers and 3 non-technical team members. 3 of us are cofounders - Brenda Loya CEO, Nick Fett CTO, and Michael Zemrose CSO. + +The developers of Tellor have years of blockchain specific coding experience. + + +### Contact + +- **Contact Name:** Brenda Loya +- **Contact Email:** brenda@tellor.io +- **Website:** www.Tellor.io + +### Legal Structure + +- **Registered Address:** 118 N. Market Street Suite 110, Frederick, MD 21701 +- **Registered Legal Entity:** Tellor Inc + +### Team's experience + +The Tellor team has broad experience working in blockchain technology. The founders have been in the space for a decade now and have authored research papers, performed audits, been active members of DAO’s, and worked on several L1 paradigms over the years. The main Tellor repo has most of our work, however individual achievements of those in the company are their own. + +### Team Code Repos + +- https://github.com/tellor-io/ + + +Github profiles of our dev team: + +- https://github.com/themandalore - Nick Fett CTO +- https://github.com/brendaloya - Brenda Loya CEO +- https://github.com/tkernell - Integrations Engineer +- https://github.com/orgs/tellor-io/people/akremstudy - Developer +- https://github.com/tallywiesenberg - Developer +- https://github.com/oraclown - Developer + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/brendaloya/ +- https://www.linkedin.com/in/nicholas-fett/ +- https://www.linkedin.com/in/zemrose +- https://www.linkedin.com/in/timothy-kernell-27b213102/ +- https://www.linkedin.com/in/tally-wiesenberg/ +- https://www.linkedin.com/in/owenburton22/ + +## Development Status :open_book: + +The smart contract structure for Tellor is finished for most EVM chains, but will need specific changes. Initial design discussions have been had with Robin, Frank Bell, and Guatam and we have specifications and even some base work done around the design. + +- Medium Articles - https://medium.com/@tellor +- Research - ​​https://vc.bridgew.edu/cgi/viewcontent.cgi?article=1037&context=ijcic +- Smart Contract repository - https://github.com/tellor-io/tellorFlex +- Reporter (Node) repository - https://github.com/tellor-io/telliot-feeds + +## Development Roadmap :nut_and_bolt: + +| Milestone | Description | Stack | Resources | Funding | +| --------- | -------------------------------------------------------------------------------- | --------------------- | --------- | ------- | +| 1 | Develop and launch Tellor core contracts on an EVM parachain | Solidity / javascript | 2 devs | 20,000 | +| 2 | Create and test oracle pallet and complete documentation with usage examples | Rust / Solidity | 2 devs | 20,000 | + + + + + +### Overview + +- **Total Estimated Duration:** 4 months +- **Full-Time Equivalent (FTE):** 2 +- **Total Costs:** 40,000 USD + + +### Milestone 1 — Launch Tellor core contracts on an EVM parachain + + +- **Estimated duration:** 2 month +- **FTE:** 2 +- **Costs:** 20,000 USD + + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | MIT| +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial**. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1 | Develop Controller contracts | We will provide a set of solidity smart contracts with the functionality described above in the [Project Details](#project-details) | +| 2 | Develop Parachain integration contract| We will provide an integration contract | + + +### Milestone 2 — Create and test oracle pallet and complete documentation with usage examples + +- **Estimated Duration:** 2 months +- **FTE:** 2 +- **Costs:** 20,000 USD + +Details: A new Substrate pallet will be required which includes the core oracle data reporting and querying logic as well as staking rewards and payment logic, ported from the existing tellorFlex (oracle), AutoPay and UsingTellor (consumer) smart contracts. All the logic within the pallet will simply use the token of the parachain. Any parachain user can create and fund feeds, which are fulfilled by oracle reporters which have deposited a stake to the Oracle contract on the smart contract parachain. Once completed, integrating and testing the pallet and the controller contracts will take significant work and documentation in order to make a robust and user-friendly oracle module. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | MIT | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial**. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1 | Substrate Oracle pallet design and integration | We will provide the Substrate oracle pallet | +| 2 | Tests and a guide for testing functionallity of the the pallet with integration of a mock project on selected parachains| We will provide tests and a guide to test cross functionality of the system for interactions between the EVM chain and consumer chain and oracle pallet (meaning test the functinallity between milestone 1 and 2 delivarable 1 - solidity contracts, pallet, XCM)| +| 3 | Documentation/ Usage Examples| We will provide documenatation and usage examples for the system. | + + + +## Future Plans + +Tellor plans to work with the Polkadot ecosystem as they grow to identify new and better set-ups for the oracle structure on the system. Another key piece to the ongoing support is working directly with builders to get them integrated and create a large set of sample code and existing users that can help make Tellor the secure choice of oracle on the network. We’ll accomplish this by: + +- Becoming further engaged with the Polkadot ecosystem (hackathons, events, podcasts, etc.) +- Working on more specific documentation and builder engagement (stack questions, more sample repos through tellor) +- Direct outreach to projects (working closely with existing projects on Polkadot to increase the security and capabilities of their current codebase) + + +## Referral Program (optional) :moneybag: + +You can find more information about the program [here](../README.md#moneybag-referral-program). +- **Referrer:** Name of the Polkadot Ambassador or GitHub account of the Web3 Foundation grantee +- **Payment Address:** BTC, Ethereum (USDT/USDC/DAI) or Polkadot/Kusama (aUSD) payment address. Please also specify the currency. (e.g. 0x8920... (DAI)) + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** + +We talked to Rohan at a few events about building on Polkadot and he recommended we apply! We’ve been in touch with Robin Ejsmond-Frey, Frank Bell, and Guatam from Parity who have done significant work with us in developing the specifications and design for the build. \ No newline at end of file From 655dcd1e9e6002191f547328ea040956f7db3713 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 2 Mar 2023 17:53:04 +0100 Subject: [PATCH 195/578] Update index.md Add Tellor --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index fa6910914d9..2a3c36c5141 100644 --- a/applications/index.md +++ b/applications/index.md @@ -57,6 +57,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Invers Inc](https://invers.tech/) | [Zkwasm Rollups Transfer](zkwasm-rollups-transfer.md) | [GitHub](https://github.com/zero-network) | ☐ | ☐ | ☐ | | [decentraDOT](https://decentradot.com/) | [Cyclops Validator Dashboard](cyclops.md) | [GitHub](https://github.com/ArthurHoeke?tab=repositories) | ☐ | ☐ | ☐ | | [Anwesh Nayak](https://github.com/muddlebee) | [Mempool Dashboard - Version 2](polkadot-mempool-explorer-v2.md) | [GitHub](https://github.com/muddlebee) | ☐ | ☐ | ☐ | +| [Tellor Inc](https://tellor.io/) | [Tellor Oracle Protocol](Tellor.md) | [GitHub](https://github.com/tellor-io/) | ☐ | ☐ | ☐ | ## 2022 From 3966857bd1d559e02629763cbfbb4995aee018eb Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Fri, 3 Mar 2023 09:17:58 +0100 Subject: [PATCH 196/578] Update index.md Complete Social Recovery Wallet Grant --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 2a3c36c5141..ae5bad67fd7 100644 --- a/applications/index.md +++ b/applications/index.md @@ -115,7 +115,7 @@ Use this page for an overview of all public grants and their status. Use the sid | Team | Project | Link | Terminated | First Delivery | Completed | | :----------------------------------------------------------- | :-------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | | [QRUCIAL OÜ](https://qrucial.io/) | [QRUCIAL DAO](./QRUCIAL_DAO.md) | [GitHub](https://github.com/Qrucial/QRUCIAL-DAO) | ☐ | ☒ | ☐ | -| [Polkadot js plus](http://polkadotjs.plus/) | [Polkadot js plus / Social Recovery Wallet](./Plus-social-recovery-wallet.md) | [GitHub](https://github.com/Nick-1979/polkadot-Js-Plus-extension/wiki) | ☐ | ☒ | ☐ | +| [Polkadot js plus](http://polkadotjs.plus/) | [Polkadot js plus / Social Recovery Wallet](./Plus-social-recovery-wallet.md) | [GitHub](https://github.com/Nick-1979/polkadot-Js-Plus-extension/wiki) | ☐ | ☒ | ☒ | | [Lee](https://github.com/rust-0x0) | [Hex Space Social Graph](./hex.md) | [GitHub](https://github.com/rust-0x0) | ☐ | ☒ | ☐ | | [Liberland LLC](https://liberland.org/en/) | [Liberland Pallets](./liberland.md) | [GitHub](https://github.com/liberland/liberland_substrate) | ☐ | ☒ | ☐ | | [Standard Protocol](https://standard.tech/) | [Signac - a monorepo plugin for developing multiple Parity ink! smart contracts](./signac.md) | [GitHub](https://github.com/standardweb3/signac) | ☐ | ☒ | ☒ | From 76c1e8ff7110aba1f528065c768edabab261a4d6 Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Fri, 3 Mar 2023 09:21:42 +0100 Subject: [PATCH 197/578] Update index.md --- applications/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/applications/index.md b/applications/index.md index ae5bad67fd7..9d6076f0721 100644 --- a/applications/index.md +++ b/applications/index.md @@ -115,7 +115,7 @@ Use this page for an overview of all public grants and their status. Use the sid | Team | Project | Link | Terminated | First Delivery | Completed | | :----------------------------------------------------------- | :-------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | | [QRUCIAL OÜ](https://qrucial.io/) | [QRUCIAL DAO](./QRUCIAL_DAO.md) | [GitHub](https://github.com/Qrucial/QRUCIAL-DAO) | ☐ | ☒ | ☐ | -| [Polkadot js plus](http://polkadotjs.plus/) | [Polkadot js plus / Social Recovery Wallet](./Plus-social-recovery-wallet.md) | [GitHub](https://github.com/Nick-1979/polkadot-Js-Plus-extension/wiki) | ☐ | ☒ | ☒ | +| [Polkadot js plus](http://polkadotjs.plus/) | [Polkadot js plus / Social Recovery Wallet](./Plus-social-recovery-wallet.md) | [GitHub](https://github.com/Nick-1979/polkadot-Js-Plus-extension/wiki) | ☐ | ☒ | ☐ | | [Lee](https://github.com/rust-0x0) | [Hex Space Social Graph](./hex.md) | [GitHub](https://github.com/rust-0x0) | ☐ | ☒ | ☐ | | [Liberland LLC](https://liberland.org/en/) | [Liberland Pallets](./liberland.md) | [GitHub](https://github.com/liberland/liberland_substrate) | ☐ | ☒ | ☐ | | [Standard Protocol](https://standard.tech/) | [Signac - a monorepo plugin for developing multiple Parity ink! smart contracts](./signac.md) | [GitHub](https://github.com/standardweb3/signac) | ☐ | ☒ | ☒ | @@ -194,7 +194,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Faceless Protocol](https://github.com/HeisenbergLin22) | [Faceless Protocol](./faceless.md) | [GitHub](https://github.com/HeisenbergLin22) | ☐ | ☒ | ☒ | | [727.ventures](https://727.ventures/) | [Typechain](./typechain-polkadot.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☒ | ☒ | | [Codelight](https://massbit.io/) | [Massbit Route](./massbit_route.md) | [GitHub](https://github.com/massbitprotocol/massbitroute) | ☐ | ☒ | ☒ | -| [Hypha Hashed Partners](https://hypha.earth/) | [Social Recovery Wallet](./social_recovery_wallet.md) | [GitHub](https://github.com/hypha-dao) | ☐ | ☒ | ☐ | +| [Hypha Hashed Partners](https://hypha.earth/) | [Social Recovery Wallet](./social_recovery_wallet.md) | [GitHub](https://github.com/hypha-dao) | ☐ | ☒ | ☒ | | [MangoBOX labs](http://mangobox.xyz/) | [MangoBOX Protocol](./MangoBOX-Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☒ | ☒ | ### 🏄‍♀️ Wave 13 - First Quarter 2022 From 7c200c2d9b491b20fe50d65e65488082152c2234 Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Fri, 3 Mar 2023 09:27:04 +0100 Subject: [PATCH 198/578] Update social-recovery-wallet.md --- docs/RFPs/Under Development/social-recovery-wallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/RFPs/Under Development/social-recovery-wallet.md b/docs/RFPs/Under Development/social-recovery-wallet.md index b5f51233af6..579b05d5bd0 100644 --- a/docs/RFPs/Under Development/social-recovery-wallet.md +++ b/docs/RFPs/Under Development/social-recovery-wallet.md @@ -1,6 +1,6 @@ # Social Recovery Wallet -* **Status:** [Under Development 1](https://github.com/w3f/Grants-Program/blob/master/applications/Plus-social-recovery-wallet.md), [Under Development 2](https://github.com/w3f/Grants-Program/blob/master/applications/social_recovery_wallet.md), [Under Development 3](https://github.com/w3f/Grants-Program/blob/master/applications/keysafe_network.md) +* **Status:** [Under Development 1](https://github.com/w3f/Grants-Program/blob/master/applications/Plus-social-recovery-wallet.md), [Implemented](https://github.com/hypha-dao/hashed-wallet), [Under Development 3](https://github.com/w3f/Grants-Program/blob/master/applications/keysafe_network.md) * **Proposer:** [Noc2](https://github.com/Noc2) ## Project Description :page_facing_up: From 17b23c8dcd5fa7403130f5ef84a6b9cc1a442986 Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Fri, 3 Mar 2023 09:28:10 +0100 Subject: [PATCH 199/578] Update rfps.md --- docs/rfps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/rfps.md b/docs/rfps.md index 3400bfc8105..fac92c29a30 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -55,7 +55,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [privacy-enhancement-polkadot-extension.md](RFPs/Under%20Development/privacy-enhancement-polkadot-extension.md) | 🟡 | 27.05.22 | | [raft-validators.md](RFPs/Open/raft-validators.md) | 🟢 | 23.11.2021 | | [scale-codec-comparator.md](RFPs/Under%20Development/scale-codec-comparator.md) | 🟡 | 30.05.2022 | -| [social-recovery-wallet.md](RFPs/Under%20Development/social-recovery-wallet.md) | 🟡 | 05.07.2021 | +| [social-recovery-wallet.md](RFPs/Under%20Development/social-recovery-wallet.md) | 🔴 | 03.03.2023 | | [staking-rewards-collector-front-end.md](RFPs/Implemented/staking-rewards-collector-front-end.md) | 🔴 | 20.07.2021 | | [Static-Analysis-for-Runtime-Pallets.md](RFPs/Open/Static-Analysis-for-Runtime-Pallets.md) | 🟢 | 06.02.2023 | | [sub-consensus.md](RFPs/Open/sub-consensus.md) | 🟢 | 23.11.2021 | From 0153441a954336f94ccbf8609963fdafea53a33c Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Fri, 3 Mar 2023 05:40:20 -0800 Subject: [PATCH 200/578] Update index.md (#1583) Cyclops -> First delivery --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 9d6076f0721..759f519493b 100644 --- a/applications/index.md +++ b/applications/index.md @@ -55,7 +55,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Fuu](https://github.com/ff13dfly/) | [Anchor, On-chain Linked List pallet and Name Service](Anchor.md) | [GitHub](https://github.com/ff13dfly/Anchor) | ☐ | ☐ | ☐ | | [hack-ink](https://hack.ink/) | [Slothunter](slothunter.md) | [GitHub](https://github.com/hack-ink) | ☐ | ☐ | ☐ | | [Invers Inc](https://invers.tech/) | [Zkwasm Rollups Transfer](zkwasm-rollups-transfer.md) | [GitHub](https://github.com/zero-network) | ☐ | ☐ | ☐ | -| [decentraDOT](https://decentradot.com/) | [Cyclops Validator Dashboard](cyclops.md) | [GitHub](https://github.com/ArthurHoeke?tab=repositories) | ☐ | ☐ | ☐ | +| [decentraDOT](https://decentradot.com/) | [Cyclops Validator Dashboard](cyclops.md) | [GitHub](https://github.com/ArthurHoeke?tab=repositories) | ☐ | ☒ | ☐ | | [Anwesh Nayak](https://github.com/muddlebee) | [Mempool Dashboard - Version 2](polkadot-mempool-explorer-v2.md) | [GitHub](https://github.com/muddlebee) | ☐ | ☐ | ☐ | | [Tellor Inc](https://tellor.io/) | [Tellor Oracle Protocol](Tellor.md) | [GitHub](https://github.com/tellor-io/) | ☐ | ☐ | ☐ | From 2b627f0c98c185c4d10d5b0a0b50abb492d2e95f Mon Sep 17 00:00:00 2001 From: Mark Van de Vyver Date: Sat, 4 Mar 2023 08:43:56 +1100 Subject: [PATCH 201/578] RFP: Designing Upchain - a framework for securing Substrate runtime upgrades and Substrate network upgrades (#1309 * RFP: Designing Upchain A framework for securing Substrate software update systems Signed-off-by: Mark Van de Vyver * RFP: Designing Upchain A framework for securing Substrate software update systems Signed-off-by: Mark Van de Vyver * Address review feedback Signed-off-by: Mark Van de Vyver * Address review feedback Signed-off-by: Mark Van de Vyver --------- Signed-off-by: Mark Van de Vyver --- .../uptane-for-substrate-design-and-scope.md | 98 +++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 docs/rfps/Open/uptane-for-substrate-design-and-scope.md diff --git a/docs/rfps/Open/uptane-for-substrate-design-and-scope.md b/docs/rfps/Open/uptane-for-substrate-design-and-scope.md new file mode 100644 index 00000000000..f419262f612 --- /dev/null +++ b/docs/rfps/Open/uptane-for-substrate-design-and-scope.md @@ -0,0 +1,98 @@ +# Designing Upchain: A framework for securing Substrate software update systems + +* **Status:** Open +* **Proposer:** taqtiqa-mark +* **Your Project(s):** N.A. +* **Projects you think this work could be useful for** [Substrate runtime upgrades](https://docs.substrate.io/build/upgrade-the-runtime/) and [Substrate network upgrades](https://docs.substrate.io/tutorials/get-started/upgrade-a-running-network/) +* **Teams/People that could deliver the RFP** Parity, William Freudenberger (KILT), Albrecht Weiche + +## Project Description :page_facing_up: + +The Upchain Specification, a framework for securing Substrate runtime upgrades and Substrate network upgrades, by extending The Update Framework and modeled on Uptane (The Update Framework Specification extended for automobiles). + +This RFP seeks W3F Grant applications addressing/proposing how TUF can be integrated into Substrate. + +The UpChain specification should serve as an outline of the requirements a chain must implement in order to be described as integrating UpChain. + +The UpChain specification should allow for Parachin scaling, see for example [Parachain scaling by Parablock splitting](https://forum.polkadot.network/t/parachain-scaling-by-parablock-splitting/341). + +The target audience is authors of the Substrate relay and parachain upgrade logic. The specification should be followed by default in all Substrate runtime upgrades and Substrate network upgrades. +Developers using Substrate would be oblivious until an upgrade failed - at which point they would notice their legacy logic is still in place. + +There is considerable prior art to inform and guide the initial specification. +A greenfield design should not be accepted. + +Rather, the Milestone 2 document accompanying the design specification should reference: + +* [The Uptane Standard for Design and Implementation 2.0.0](https://uptane.github.io/papers/uptane-standard.2.0.0.html) +* [The Update Framework Specification](https://theupdateframework.github.io/specification/latest/) + +Articulating: + +* Deviations + * The section number and title in the Uptane and TUF specification that Upchain should deviate from. + * The Relay-parachain functionality lost or gained by this deviation, described in terms of TUF/Uptane functionality +* Extensions + * The section number and title in the Uptane and TUF specification that should be extended by Upchain + * The Relay-parachain functionality removed or added by this extension, described in terms of TUF/Uptane functionality +* Omissions + * The section number and title in the Uptane and TUF specification that should be omitted from Upchain + * The Relay-parachain functionality lost or gained by this omission, described in terms of TUF/Uptane functionality + +Specifically, elements of these two specifications should not silently vanish. + +### Context + +The Uptane (ECU update framework for automotives) is chosen as the template to begin with and contrast UpChain for a couple of reasons: + +* The specification should explicitly address Parachain scaling, see for example [Parachain scaling by Parablock splitting](https://forum.polkadot.network/t/parachain-scaling-by-parablock-splitting/341). +* While ECU updates have client-server model where centrally managed updates are pushed to clients, and upgrade failures must leave a vehicle in a safe and usable state. Substrate upgrades have a single source of truth that also must be pushed to nodes, and upgrade failures must leave a node in a safe and usable state. +* Further, there are implementations of the Uptane spec that are not trivial and that experience could be expected to inform the design of how UpChain protects Parachain scaling e.g. motivate any deviations or extensions. + +### Motivation + +I’ve come across several reports of a para-relay chain update/upgrade going awry and a chain is bricked, unable to produce blocks - hi-jinx ensue, and everyone lives happily ever after. + +One such case is discussed here: [How to recover a parachain](). The consensus appears to be: Automatic rollback is not possible, and a Parachain being inoperable for some period is the way things will be (hi-jinx required). + +Potential utility for the wider community is evidenced by the [Polkadot Summit: Barcamp (30 Nov, 1 Dec) topic Parachain Emergency Recovery](https://forum.polkadot.network/t/polkadot-summit-barcamp-submit-agenda-topics-30-nov-1-dec/669/8) + +## Deliverables :nut_and_bolt: + +Upchain Standard for Design and Implementation 1.0.0 + +### Scope + +The scope of "Designing UpChain" is limited to creating a spec which aims at mitigating/avoiding such upgrade failures. + +Guidelines to triage and recover after the issue occurred will likely depend on the detail of an implementation, hence should be deferred to the implementation phase. + +Scope includes providing recommendations and changes at the protocol level. +It also include analysis of performance overheads (e.g., overheads on the blockspace). +This may entail involving teams at parity/w3f. + +* **Total Estimated Duration:** Duration of the whole project +* **Full-time equivalent (FTE):** Amount of time (in days) required for a single person to complete this project ([see](https://en.wikipedia.org/wiki/Full-time_equivalent)) +* **Total Costs:** Amount of Payment in USD for the whole project. + +### Milestone 1 + +* **Estimated Duration:** Duration of milestone 1 +* **FTE:** Amount of time (in days) required for a single person to complete this milestone +* **Costs:** Amount of Payment in USD for milestone 1 + +| Number | Deliverable | Specification | +| ------------- | ------------- | ------------- | +| 1. | Upchain Standard for Design and Implementation 1.0.0 | The Update Framework Specification extended for Substrate Relay and Parachains | + +This deliverable can be valuated by comparing the list of (sub-)sections with those from [The Update Framework](https://theupdateframework.github.io/specification/latest) - there should be no omissions. + +### Milestone 2 + +* **Estimated Duration:** Duration of milestone 1 +* **FTE:** Amount of time (in days) required for a single person to complete this milestone +* **Costs:** Amount of Payment in USD for milestone 1 + +| Number | Deliverable | Specification | +| ------------- | ------------- | ------------- | +| 1. | Upchain: Deviations, Extensions and Omissions from The Update Framework | As detailed above, a document setting out all deviations, extensions and omissions from The Update Framework | From 8806e4324e7db5ccdb43e15a13a0f92be5a26853 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Fri, 3 Mar 2023 22:54:00 +0100 Subject: [PATCH 202/578] Fix phrasing around RFPs (#1585 * Update README.md RFPs aren't applications * Update ideas.md (#1584) --- README.md | 2 +- docs/Introduction/ideas.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d1e6a089b40..558793ac623 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,7 @@ An overview of existing projects in the Web 3.0 Technology Stack along with broa Finally, you don't need to start your own project in order to be eligible for a grant. Instead, some teams choose to port existing work to Substrate, where the pertinent licenses allow, or even to contribute to an existing open-source project. In the latter case, you should check in advance that the maintainers of the project are interested in your contribution, and the acceptance of the milestones will generally be tied to the inclusion of your work in said project. See the [Maintenance Grants section](#hammer_and_wrench-maintenance-grants) for more info. -If you have a **good concept of the technical challenges** that your idea entails and would like feedback before applying, you can send us an [email](mailto:grants@web3.foundation) and tell us about it. +If you have a **good concept of the technical challenges** that your idea entails and would like feedback/input before submitting it, you can send us an [email](mailto:grants@web3.foundation) and tell us about it. ### Support diff --git a/docs/Introduction/ideas.md b/docs/Introduction/ideas.md index 82ffd8ee563..8df9450df99 100644 --- a/docs/Introduction/ideas.md +++ b/docs/Introduction/ideas.md @@ -10,4 +10,4 @@ An overview of existing projects in the Web 3.0 Technology Stack along with broa Finally, you don't need to start your own project in order to be eligible for a grant. Instead, some teams choose to port existing work to Substrate, where the pertinent licenses allow, or even to contribute to an existing open-source project. In the latter case, you should check in advance that the maintainers of the project are interested in your contribution, and the acceptance of the milestones will generally be tied to the inclusion of your work in said project. See the [Maintenance Grants section](../maintenance.md) for more info. -If you have a **good concept of the technical challenges** that your idea entails and would like feedback before applying, you can send us an [email](mailto:grants@web3.foundation) and tell us about it. +If you have a **good concept of the technical challenges** that your idea entails and would like feedback/input before submitting it, you can send us an [email](mailto:grants@web3.foundation) and tell us about it. From 94959dd2d69449fb28477fcf51dc063f8fe1b5c6 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Sat, 4 Mar 2023 14:13:01 +0100 Subject: [PATCH 203/578] Update rfps.md Add uptane-for-substrate-design-and-scope.md --- docs/rfps.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/rfps.md b/docs/rfps.md index fac92c29a30..7a8268fbe18 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -60,6 +60,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [Static-Analysis-for-Runtime-Pallets.md](RFPs/Open/Static-Analysis-for-Runtime-Pallets.md) | 🟢 | 06.02.2023 | | [sub-consensus.md](RFPs/Open/sub-consensus.md) | 🟢 | 23.11.2021 | | [uncollateralized-stablecoin-research.md](RFPs/Implemented/uncollateralized-stablecoin-research.md) | 🔴 | 01.01.23 | +| [uptane-for-substrate-design-and-scope.md](RFPs/Open/uptane-for-substrate-design-and-scope.md) | 🟢 | 04.03.2023 | | [user-account-access-analysis.md](RFPs/Open/user-account-access-analysis.md) | 🟢 | 07.01.2023 | | [validator-setup-maintenance.md](RFPs/Open/validator-setup-maintenance.md) | 🟢 | 23.11.2021 | | [validator-selection-algorithm.md](RFPs/Under%20Development/validator-selection-algorithm.md) | 🟡 | 07.12.2022 | From 97e0019d8ec8ec525e6c96d1c2125e1b943d2669 Mon Sep 17 00:00:00 2001 From: Bolat Khojayev Date: Mon, 6 Mar 2023 00:47:59 -0700 Subject: [PATCH 204/578] Update to leetcoin application (#1550) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update leetcoin.md * Update applications/leetcoin.md typo fix Co-authored-by: Sebastian Müller * Update leetcoin.md * Update leetcoin.md --------- Co-authored-by: Sebastian Müller --- applications/leetcoin.md | 225 ++++++++++++++++++++++++++------------- 1 file changed, 152 insertions(+), 73 deletions(-) diff --git a/applications/leetcoin.md b/applications/leetcoin.md index 3a96a4e832f..44c8a76ab14 100644 --- a/applications/leetcoin.md +++ b/applications/leetcoin.md @@ -4,55 +4,118 @@ - **Payment Address:** 0x03e95B0657846cD3dCF500791506947272eE12c8 ETH - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 - ## Project Overview :page_facing_up: ### Overview -LeetCoin is the LeetCode for Web3, centered on leveling up dev’s skills. We are creating a platform to help enhance technical skills in a gamified and fun way, expand Web3 technical literacy through highly visual smart contract analysis and create an online judge system for Ink!, Solidity and Vyper to evaluate smart contract solutions against predefined test suites. Web3 is relatively new and most companies do not have established technical interviewing guidelines. Also, technical exploits, both front-end and at the smart contract level, have become a widespread problem harming the ecosystem. To succeed we will take an incremental approach starting with creating problem sets with concepts and challenges that can help developers follow a standardized way to up their level no matter what it is, from beginner to expert across key areas. Problems will be of three primary types: +LeetCoin is the LeetCode for Web3, centered on leveling up dev’s skills. We are creating a platform to help enhance +technical skills in a gamified and fun way, expand Web3 technical literacy through highly visual smart contract analysis +and create an online judge system for Ink!, Solidity and Vyper to evaluate smart contract solutions against predefined +test suites. Web3 is relatively new and most companies do not have established technical interviewing guidelines. Also, +technical exploits, both front-end and at the smart contract level, have become a widespread problem harming the +ecosystem. To succeed we will take an incremental approach starting with creating problem sets with concepts and +challenges that can help developers follow a standardized way to up their level no matter what it is, from beginner to +expert across key areas. Problems will be of three primary types: + 1. open-ended (write a function that utilizes the x data oracle and returns properly formatted Big Number), 2. comprehension based (given this smart contract, spot the problem leading to a reentrancy guard attack), and 3. knowledge based (which of the following can improve this snippet of code?). - These problem sets will become community-driven through incentivizing creation of new problems. + These problem sets will become community-driven through incentivizing creation of new problems. -The project will be driven by the community and offer interactive, gamified resources for developers to get to their next stage, hiring companies to source superior candidates and better learning resources. Every problem solved as well as created by a community member will be tied to incentives to encourage continuous learning and sustainability. We will partner with Web3 projects, infrastructure builders and tooling experts to co-create problem sets of key skills they believe future hires should have. +The project will be driven by the community and offer interactive, gamified resources for developers to get to their +next stage, hiring companies to source superior candidates and better learning resources. Every problem solved as well +as created by a community member will be tied to incentives to encourage continuous learning and sustainability. We will +partner with Web3 projects, infrastructure builders and tooling experts to co-create problem sets of key skills they +believe future hires should have. ### Project Details #### Features We are working on 3 important core functionalities: -- Many new Web3 devs lack knowledge in core areas such as Ink!, Security & Auditing, Solc Versioning Knowledge, OppenZepplin, Testing (Apeworx & Brownie), and Exploits (Frontend & Smart Contract). Our platform will host and curate the sets of gamified practice problems that cover core knowledge in the above areas. Each challenge runs against a suite of test cases. New problems will be added regularly and designed by a mix of the LeetCoin team, community members, and Web3 industry partners. -- Hiring core teams is difficult and always a bit risky, especially when many developers prefer to remain anonymous and lack GitHub coding activity, verifiable resumes, or LinkedIn pages. LeetCoin offers core teams a fun way to discover and vet potential builders by testing the only thing that matters: evaluating technical skills in an objective, fair and data-driven approach. We plan to raise the hiring standards across the entire ecosystem and make hiring better for everyone. -- LeetCoin’s online judge engine can compile and run smart contracts code written in Ink!, Solidity and Vyper. The engine records the execution metadata like statistics and saves the execution output to a permanent storage that can be evaluated against the predefined test suite. + +- Many new Web3 devs lack knowledge in core areas such as Ink!, Security & Auditing, Solc Versioning Knowledge, + OppenZepplin, Testing (Apeworx & Brownie), and Exploits (Frontend & Smart Contract). Our platform will host and curate + the sets of gamified practice problems that cover core knowledge in the above areas. Each challenge runs against a + suite of test cases. New problems will be added regularly and designed by a mix of the LeetCoin team, community + members, and Web3 industry partners. +- Hiring core teams is difficult and always a bit risky, especially when many developers prefer to remain anonymous and + lack GitHub coding activity, verifiable resumes, or LinkedIn pages. LeetCoin offers core teams a fun way to discover + and vet potential builders by testing the only thing that matters: evaluating technical skills in an objective, fair + and data-driven approach. We plan to raise the hiring standards across the entire ecosystem and make hiring better for + everyone. +- LeetCoin’s online judge engine can compile and run smart contracts code written in Ink!, Solidity and Vyper. The + engine records the execution metadata like statistics and saves the execution output to a permanent storage that can + be evaluated against the predefined test suite. #### Online Judge System -An important part of the LeetCoin platform is the online judge system. The online judge is an engine that can run the candidates’ code solutions against a specified testing suite, evaluate the performance and report the test results back. Currently, there are no online judge solutions that can evaluate the smart contracts against predefined testing suites. We are creating one with the initial support for Ink!, Solidity and Vyper. + +An important part of the LeetCoin platform is the online judge system. The online judge is an engine that can run the +candidates’ code solutions against a specified testing suite, evaluate the performance and report the test results back. +Currently, there are no online judge solutions that can evaluate the smart contracts against predefined testing suites. +We are creating one with the initial support for Ink!, Solidity and Vyper. #### Architecture + The platform consists of 3 main components -1. Frontend application - the UI React application that displays all the available problems, problem pages, code editor, user profile, login/signup page, and admin dashboard. The frontend application interacts with the backend application using REST API to request available coding problems, submit problem submissions, retrieve submission results, retrieve user information, etc. -2. Backend application - the core NodeJS application that is responsible for the business logic. The application has a database that stores the list of available coding problems, users, coding submissions and etc. The main purpose is to serve the data from the database via REST API. -3. Online judge engine - the core engine component of the backend app that executes the coding solutions in an isolated environment. The engine supports Ink!, Solidity and Vyper smart contract languages. It compiles the smart contract code, runs it and saves the output to a text file to a dedicated storage. The engine also reads the submission outputs from the storage and compares it against the expected output and reports back the failed and succeeded test cases along with the execution metadata (e.g statistics) and reports them back to the backend application. + +1. Frontend application - the UI React application that displays all the available problems, problem pages, code editor, + user profile, login/signup page, and admin dashboard. The frontend application interacts with the backend application + using REST API to request available coding problems, submit problem submissions, retrieve submission results, + retrieve user information, etc. +2. Backend application - the core NodeJS application that is responsible for the business logic. The application has a + database that stores the list of available coding problems, users, coding submissions and etc. The main purpose is to + serve the data from the database via REST API. +3. Online judge engine - the core engine component of the backend app that executes the coding solutions in an isolated + environment. The engine supports Ink!, Solidity and Vyper smart contract languages. It compiles the smart contract + code, runs it and saves the output to a dedicated storage in string format. The engine also reads the submission + outputs from the storage and compares it against the expected output and reports back the failed and succeeded test + cases along with the execution metadata (e.g statistics) and reports them back to the backend application. ![](https://imgur.com/fDx7QFR.png) #### Technology Stack -The frontend application is written in React and hosted on AWS Amplify platform. The backend application utilizes express server framework which is built on top of NodeJS. It is really easy to design REST API using express and the API specification will be written in Swagger. TypeScript is used on the backend. The online judge is packaged as a portable module that can be easily incorporated in the other projects. The judge is written in TypeScript. The submission output database will be initially hosted on S3 as a bucket. + +The frontend application is written in React and NextJS and hosted on AWS Amplify platform. The backend application utilizes +express server framework which is built on top of NodeJS. It is really easy to design REST API using express and the API +specification will be written in Swagger. TypeScript is used on the backend. The online judge is packaged as a portable +module that can be easily incorporated in the other projects. The judge is written in TypeScript. The submission output +database will be initially hosted on Postgres. #### Mockups: + ![](https://i.imgur.com/seKd2sa.png) ![](https://imgur.com/W0mNmDc.png) -### Ecosystem Fit - -LeetCoin is an applied, community-driven education-focused public good aimed at building the future builders of Ethereum. It is important because it offers a streamlined way to level up across 3 domains: practice problems, visual and simplified smart contract analysis and hiring. -We want to provide new devs a gamified way to learn and enhance skills regardless of their background, a way that already fits their mental schemas if they are transferring over from Web2 and familiar with popular platforms like HackerRank and LeetCode. These platforms unfortunately focus on Web2 algorithmic challenges and do not offer Web3-focused problem sets. Not only will a gamified way allow beasier Web3 adoption by developers, it allows practical experience across key areas that ethereum developers only learn over time in a haphazard way by exploring github repos and spending countless hours individually analyzing and testing code. Given that many projects by new devs in the ecosystem are forks of existing smart contracts that are often not fully understood, new devs risk releasing code that leads to exploits and harms the reputation of the ecosystem, presenting a barrier to future potential devs from entering. Problem sets will cover key areas from security and coding to cryptographic primitives and allow builders to create their own personalized learning paths. Better builders lead to a stronger Ethereum foundation and superior talent. Problem sets manifest the Web3 ethos by being open-source and inviting the collaboration of community, domain experts and leading protocols. Community involvement is key given the fast-moving evolution of the ecosystem. +### Ecosystem Fit -By allowing hiring teams a means of curating their own problem sets from our open-source database or developing their own, it allows them to pre-screen and vet new hires leading to a higher standard. We aim for Leetcoin to be adopted across the ecosystem similar to how similar platforms have improved hiring processes in Web2. By vetting devs before inviting them to the initial interview to join a core team, the caliber of builders will improve resulting in less technical exploits and superior builders in the ecosystem. +LeetCoin is an applied, community-driven education-focused public good aimed at building the future builders of +Ethereum. It is important because it offers a streamlined way to level up across 3 domains: practice problems, visual +and simplified smart contract analysis and hiring. + +We want to provide new devs a gamified way to learn and enhance skills regardless of their background, a way that +already fits their mental schemas if they are transferring over from Web2 and familiar with popular platforms like +HackerRank and LeetCode. These platforms unfortunately focus on Web2 algorithmic challenges and do not offer +Web3-focused problem sets. Not only will a gamified way allow beasier Web3 adoption by developers, it allows practical +experience across key areas that ethereum developers only learn over time in a haphazard way by exploring github repos +and spending countless hours individually analyzing and testing code. Given that many projects by new devs in the +ecosystem are forks of existing smart contracts that are often not fully understood, new devs risk releasing code that +leads to exploits and harms the reputation of the ecosystem, presenting a barrier to future potential devs from +entering. Problem sets will cover key areas from security and coding to cryptographic primitives and allow builders to +create their own personalized learning paths. Better builders lead to a stronger Ethereum foundation and superior +talent. Problem sets manifest the Web3 ethos by being open-source and inviting the collaboration of community, domain +experts and leading protocols. Community involvement is key given the fast-moving evolution of the ecosystem. + +By allowing hiring teams a means of curating their own problem sets from our open-source database or developing their +own, it allows them to pre-screen and vet new hires leading to a higher standard. We aim for Leetcoin to be adopted +across the ecosystem similar to how similar platforms have improved hiring processes in Web2. By vetting devs before +inviting them to the initial interview to join a core team, the caliber of builders will improve resulting in less +technical exploits and superior builders in the ecosystem. #### Relevance to Polkadot and Substrate -We anticipate more adoption of Ink! as a smart contract language and teach more developers how to write smart contracts better and more secure. In addition, we anticipate more developers to express interest and switch to Web3 development and help Web3 companies to raise their hiring standards. +We anticipate more adoption of Ink! as a smart contract language and teach more developers how to write smart contracts +better and more secure. In addition, we anticipate more developers to express interest and switch to Web3 development +and help Web3 companies to raise their hiring standards. ## Team :busts_in_silhouette: @@ -62,7 +125,6 @@ We anticipate more adoption of Ink! as a smart contract language and teach more - Alberto Cevallos - Bolat Khojayev - ### Contact - **Contact Name:** Bolat Khojayev @@ -79,21 +141,37 @@ Legally incorporated in Canada. ### Team's experience #### Ali Serag - Lead Smart Contracts Developer -Ali is a serial builder passionate about technology and community. Ali Co-Founded Fostrum, a startup backed by Techstars and Barclays Bank and launched various award-winning open-source initiatives such as covidimpact.ca (Call for Code, Code the Curve). Ali has worked on various DeFi projects over the past several years, both anon and publicly. Having acted as president of the largest tech early-talent community in Canada, Ali is passionate about education and community. Ali advises Vancouver City Council candidates on blockchain and tech-centered policies and is a close advisor to Coding in Color, an international educational initiative supported by the government of Canada focused on teaching refugee youth coding skills. + +Ali is a serial builder passionate about technology and community. Ali Co-Founded Fostrum, a startup backed by Techstars +and Barclays Bank and launched various award-winning open-source initiatives such as covidimpact.ca (Call for Code, Code +the Curve). Ali has worked on various DeFi projects over the past several years, both anon and publicly. Having acted as +president of the largest tech early-talent community in Canada, Ali is passionate about education and community. Ali +advises Vancouver City Council candidates on blockchain and tech-centered policies and is a close advisor to Coding in +Color, an international educational initiative supported by the government of Canada focused on teaching refugee youth +coding skills. #### Bolat Khojayev - Lead Full-stack Developer -Bolat was a senior Amazon full-stack developer and architect who turned to Web3. He worked with various early-stage start-ups such as Connectly.ai and Carmodity to develop their first MVPs, define coding best practices, hire competent developers and establish a high performing engineering culture. Bolat has been interviewing prospective engineers for over 5 years (at Amazon, Connectly and Karat) and has launched various mentorship initiatives, including Qazaq Codes, a curriculum teaching Russian speaking devs core coding competencies. + +Bolat was a senior Amazon full-stack developer and architect who turned to Web3. He worked with various early-stage +start-ups such as Connectly.ai and Carmodity to develop their first MVPs, define coding best practices, hire competent +developers and establish a high performing engineering culture. Bolat has been interviewing prospective engineers for +over 5 years (at Amazon, Connectly and Karat) and has launched various mentorship initiatives, including Qazaq Codes, a +curriculum teaching Russian speaking devs core coding competencies. #### Alberto Cevallos - Contributor -Alberto is the founder of GreenOak.xyz and heads its Builder Program which provides mentorship and support for projects contributing to the Web3 ecosystem. He is a seasoned Web3 builder and investor, having been co-founder of BadgerDAO and acting as an early core team member of Travala. + +Alberto is the founder of GreenOak.xyz and heads its Builder Program which provides mentorship and support for projects +contributing to the Web3 ecosystem. He is a seasoned Web3 builder and investor, having been co-founder of BadgerDAO and +acting as an early core team member of Travala. ### Team Code Repos -- https://github.com/greenoakxyz -- https://github.com/greenoakxyz/leetcoin -- https://github.com/greenoakxyz/leetcoin-app +- https://github.com/LeetCoinCo +- https://github.com/LeetCoinCo/leetcoin-backend +- https://github.com/LeetCoinCo/leetcoin-frontend -Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted +elsewhere or live are also fine. - https://github.com/Aliserag - https://github.com/NoirKomBatman @@ -107,81 +185,82 @@ Please also provide the GitHub accounts of all team members. If they contain no ## Development Status :open_book: -We have created a landing page https://leetcoin.co and some initial backend skeleton structure https://github.com/greenoakxyz/leetcoin-app. There is no prototype yet and we are currently developing it. +We have created a landing page https://leetcoin.co and some initial backend skeleton +structure https://github.com/greenoakxyz/leetcoin-app. There is no prototype yet and we are currently developing it. ## Development Roadmap :nut_and_bolt: ### Overview -- **Total Estimated Duration:** 20 Weeks +- **Total Estimated Duration:** 37 Weeks - **Full-Time Equivalent (FTE):** 3 FTE - **Total Costs:** 29,999 DAI ### Milestone 1 — Implement Ink! Problem Builder, Solution and Compiler -- **Estimated duration:** 8 weeks +- **Estimated duration:** 21 weeks (Completion by March 15, 2023) - **FTE:** 3 - **Costs:** 12,000 DAI This milestone will allow for the creation and use of Ink! coding problems. | Number | Deliverable | Specification | -| -----: |------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| 0a. | License | Apache 2.0 | -| 0b. | Documentation | We will provide the documentation for the repository code as well as a tutorial for publishing/designing a user-generated coding problem and test suites. | -| 0c. | Testing Guide | Best practices for developing test suites to run code against and a FAQ. | -| 0d. | Article | Announcement blog post explaining how LeetCoin can be used for upgrading web3 developer skills, improve security and help with properly vetting dev core-team candidates to minimize technical risks. | -| 1. | Design Document | Description of architecture and interface | -| 2. | User Authentication | Create a wallet based authentication system for problem builders as well as users with Web3 Onboard | -| 3. | Import/Export Data | Create tools to import and export problem data using multer, csv-express, fast-csv | -| 4. | Online Judge | Online judge that compiles Ink! contract code and runs it against test suites comparing the actual output with the expected ones based on the different test cases | -| 5. | Frontend problems list | A simple table that displays all available problems on the platform | -| 6. | Frontend code editor | Code editor for the problems | -| 7. | First Ink! Problem Set | Develop first 10 Ink! problems working with core teams of popular DeFi protocols | -| 8. | Database | Database to store all problem datasets (IPFS or MongoDB) | -| 9. | API | Create an API with express, express router, mongoose and CORS | -| 10. | Frontend user profile | User profile page where they can edit their information and see their progress | -| 11. | Logging | Server logging with morgan and winston | +|-------:|------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide the documentation for the repository code as well as a tutorial for publishing/designing a user-generated coding problem and test suites. | +| 0c. | Testing Guide | Best practices for developing test suites to run code against and a FAQ. | +| 0d. | Article | Announcement blog post explaining how LeetCoin can be used for upgrading web3 developer skills, improve security and help with properly vetting dev core-team candidates to minimize technical risks. | +| 1. | Design Document | Description of architecture and interface | +| 2. | User Authentication | Create a wallet based authentication system for problem builders as well as users with Web3 Onboard | +| 3. | Online Judge | Online judge that compiles Ink! contract code and runs it against test suites comparing the actual output with the expected ones based on the different test cases | +| 4. | Frontend problems list | A simple table that displays all available problems on the platform | +| 5. | Frontend code editor | Code editor for the problems | +| 6. | First Ink! Problem Set | Develop first 5 Ink! problems working with core teams of popular DeFi protocols | +| 7. | Database | Database to store all problem datasets (Postgres) | +| 8. | API | Create an API with express, express router, Postgres and CORS | +| 9. | Frontend user profile | User profile page where they can edit their information and see their progress | +| 10. | Logging | Server logging with morgan and winston | ### Milestone 2 — Educational Modules and Extension -- **Estimated Duration:** 6 weeks +- **Estimated Duration:** 8 weeks (Completion by May 15, 2023) - **FTE:** 3 - **Costs:** 10,000 DAI -This milestone will extend the problem compiler and problem sets as well as introduce new functionality related to different learning paths and in-depth analysis of hugely popular smart contracts. - -| Number | Deliverable | Specification | -| -----: | ----------- |-----------------------------------------------------------------------------------------------------------------------------------------------------------| -| 0a. | License | Apache 2.0 | -| 0b. | Documentation | We will provide the documentation for the repository code as well as a tutorial for publishing/designing a user-generated coding problem and test suites. | -| 0c. | Testing Guide | Best practices for developing problem sets, how to test them and a FAQ. | -| 0d. | Article | Announcement blog post explaining the new educational modules on the platform. | -| 1. | Set Creator | Implement problem set curation and creation | -| 2. | Problem Favouriting | Allow users to favourite specific problems to easily reference later | -| 3. | Expand Online Judge | Allow for problems written in Ink!, Rust and Go by extending compiler | -| 4. | Diversify Sets | Diversify problem sets to include security, testing etc. | -| 5. | Educational Modules (Learner) | A dashboard where learners can explore different popular smart contracts to delve deeply into | -| 6. | Educational Modules (Educator) | A builder where educators can add rich text and video media for courses | -| 7. | Badges | Award badges to specific users and educators that have hit specific achievements | +This milestone will extend the problem compiler and problem sets as well as introduce new functionality related to +different learning paths and in-depth analysis of hugely popular smart contracts. + +| Number | Deliverable | Specification | +|-------:|-------------------------------- |-----------------------------------------------------------------------------------------------------------------------------------------------------------| +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide the documentation for the repository code as well as a tutorial for publishing/designing a user-generated coding problem and test suites. | +| 0c. | Testing Guide | Best practices for developing problem sets, how to test them and a FAQ. | +| 0d. | Article | Announcement blog post explaining the new educational modules on the platform. | +| 1. | Set Creator | Implement problem set curation and creation | +| 2. | Problem Favouriting | Allow users to favourite specific problems to easily reference later | +| 3. | Expand Online Judge | Allow for problems written in Ink!, Rust and Go by extending compiler | +| 4. | Diversify Sets | Define and add more problems. | +| 5. | Badges | Award badges to specific users and educators that have hit specific achievements | +| 6. | Page with educational resources | List of awesome educational Ink! resources ### Milestone 3 — Hiring Module -- **Estimated Duration:** 6 weeks +- **Estimated Duration:** 8 weeks (Completion by July 15, 2023) - **FTE:** 3 - **Costs:** 7,999 DAI -This milestone will introduce functionality to allow hiring core teams to generate links of predefined problems to share with prospective applicants as well as receive feedback on the applicant’s performance. - -| Number | Deliverable | Specification | -| -----: | ----------- |-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| 0a. | License | Apache 2.0 | -| 0b. | Documentation | We will provide the documentation for the repository code as well as a tutorial for publishing/designing a user-generated coding problem and test suites. | -| 0c. | Testing Guide | Best practices for developing test suites to run code against and a FAQ. | -| 0d. | Article | Announcement blog post explaining LeetCoin's hiring tools to help vet the candidates. | -| 1. | Employer Problem Sets |
  • Allow employers to search through database of existing problems and add them to problem set
  • Implement problem set timer
  • Implement employer problem set one-time-use link generator
  • Allow employers to optionally specify ethereum address to solve problem
  • Allow employers to create custom problems to mix and match
| -| 2. | Applicant Authentication | Applicants must connect with their Polkadot wallet in order to start and view timed employer problem set | -| 3. | Mailing Notifier | Mailing system that notifies specified email upon completion of problem set with applicant’s answers | +This milestone will introduce functionality to allow hiring core teams to generate links of predefined problems to share +with prospective applicants as well as receive feedback on the applicant’s performance. + +| Number | Deliverable | Specification | +|-------:|--------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide the documentation for the repository code as well as a tutorial for publishing/designing a user-generated coding problem and test suites. | +| 0c. | Testing Guide | Best practices for developing test suites to run code against and a FAQ. | +| 0d. | Article | Announcement blog post explaining LeetCoin's hiring tools to help vet the candidates. | +| 1. | Employer Problem Sets |
  • Allow employers to search through database of existing problems and add them to problem set
  • Implement problem set timer
  • Implement employer problem set one-time-use link generator
  • Allow employers to optionally specify ethereum address to solve problem
  • Allow employers to create custom problems to mix and match
| +| 2. | Applicant Authentication | Applicants must connect with their Polkadot wallet in order to start and view timed employer problem set | +| 3. | Mailing Notifier | Mailing system that notifies specified email upon completion of problem set with applicant’s answers | ## Additional Information :heavy_plus_sign: From 59f50481c7db7227d1407a7ba64859c9f4db6826 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Mon, 6 Mar 2023 08:32:53 -0300 Subject: [PATCH 205/578] Update index.md (#1588) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 759f519493b..a7dd89787a9 100644 --- a/applications/index.md +++ b/applications/index.md @@ -27,7 +27,7 @@ Use this page for an overview of all public grants and their status. Use the sid | Team | Project | Link | Terminated | First Delivery | Completed | | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------------------------------- | :--------- | :------------: | :--------: | -| [Deep Ink Ventures GmbH](http://deep-ink.ventures/) | [GenesisDAO](GenesisDAO.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☐ | ☐ | +| [Deep Ink Ventures GmbH](http://deep-ink.ventures/) | [GenesisDAO](GenesisDAO.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☒ | ☐ | | [ArtZero](https://artzero.io/) | [ArtZero & InkWhale](ArtZero_InkWhale.md) | [GitHub](https://github.com/artzero-io) | ☐ | ☐ | ☐ | | EightFish | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☐ | ☐ | | [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☐ | ☐ | From 7de59d87dc32ad94fe79652923ffcaae3b0072de Mon Sep 17 00:00:00 2001 From: Jonathan Brown Date: Mon, 6 Mar 2023 19:59:16 +0700 Subject: [PATCH 206/578] Add Hybrid Explorer grant application. (#1582 * Create hybrid.md * Add technical details to the milestone tables. * Mention IPFS hosting. * Mention more block explorers. --- applications/hybrid.md | 237 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 237 insertions(+) create mode 100644 applications/hybrid.md diff --git a/applications/hybrid.md b/applications/hybrid.md new file mode 100644 index 00000000000..fdaaa6dd72e --- /dev/null +++ b/applications/hybrid.md @@ -0,0 +1,237 @@ +# Hybrid Block Explorer + +- **Team Name:** Jonathan Brown +- **Payment Address:** 0x36a7401F269555916a0243E586234D3Bbf5A0c36 (DAI) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + + +## Project Overview :page_facing_up: + +This application is in response to two RFPs: +- Multi-chain Block Explorer https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Under%20Development/multi-chain-block-explorer.md +- ink! smart contract block explorer. https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Under%20Development/ink_smart_contract_block_explorer.md + + +### Overview + +Hybrid takes a unique, partially decentralized approach that improves two major problems with current open source Substrate block explorers: centralization and huge hosting requirements. + +A fully centralized block explorer typically populates an SQL database with the entirety of an archive node and stores additional data to index everything. Operating such a database reliably requires huge system resources and expense. + +When querying block information, or the chain state at any block height, the Hybrid dapp will use the [Substrate Connect](https://substrate.io/developers/substrate-connect/) light client from within the browser. Alternatively, these queries can be made directly to an archive node via WSS. + +For event search functionality, the Hybrid indexer efficiently indexes events in all blocks so they can be found with a simple WSS query. For example, to find all events connected with a specific `AccountId`. + +This architecture has three main advantages: +- state queries are fully decentralized - you don't have to trust an RPC provider not to lie to you +- 100% availability - the light client doesn't depend on any centralized service that may not always be available +- the Hybrid indexer has significantly lower system requirements - it doesn't need to store all chain history + +Eventually, Hybrid will use this centralized / decentralized approach as the basis for an ink! contract explorer. + +Because Substrate is a federated platform, it will be possible browse multiple chains from the Hybrid dapp. + +### Project Details + +Hybrid will be a Substrate block explorer dapp. By default it will connect to major Substrate blockchains. Additionally it can be configured to connect to any Substrate chain. + +There are two types of queries that the explorer can perform: +- Decentralized - ideally using the Substrate Connect light client, or alternatively connecting to an archival node via WSS. For example, querying blocks or state storage. +- Centralized - the Hybrid indexer for the chain will be queried via WSS. This is for event searching and watching, such as finding all events across all chains that relate to a specific `AccountId`. + +![Hybrid Architecture](https://raw.githubusercontent.com/ethernomad/hybrid-diagram/main/hybrid.png) + +#### Indexer + +The Hybrid indexer will be written in Rust. It can be configured to connect to any Substrate chain. + +It will read events in all blocks using [subxt](https://github.com/paritytech/subxt) and index these events in a Key-value database using the [sled](http://sled.rs/) library. This is considerably more efficient than storing the index in an SQL database. + +All events in all pallets that have identifying parameters will be indexed. For example the Transfer event in the Balances pallet is identifiable by the `AccountId` of both `from` and `to`. + +Other examples of identifying event parameters are `assetId` in the Assets pallet, `code_hash` in the contracts pallet, `CollectionId` and `ItemId` in the NFTs pallet, and `MultiLocation` in the XCM pallet. + +Reading blocks and writing indexes will occur in separate threads with a queue from the read thread to the write thread. Enabling reading and writing simultaneously will maximize indexing throughput. + +WSS queries will be handled via the highly scalable [tokio_tungstenite](https://github.com/snapview/tokio-tungstenite) Rust library. + +In addition to the identifier being searched for, queries will be able to include start block, offset, and limit to control which events are returned. + +Consumers will be able to subscribe for new events that match a query. This will be handles by sled's powerful [watch_prefix](https://docs.rs/sled/latest/sled/struct.Tree.html#method.watch_prefix) functionality. + +The database keys will be constructed in such a way so that events can be found using iterators starting at a specific block number. For example, for for the AccountId keyspace: + +`AccountId/BlockNumber/EventIndex` + + +#### Dapp + +The Hybrid dapp will be a [Vue](https://vuejs.org/) dapp, using the [Vuetify](https://vuetifyjs.com) framework for the user interface. [pnpm](https://pnpm.io/) and [Vite](https://vitejs.dev/) will be used for the build. + +It will use [@polkadot/api](https://github.com/polkadot-js/api) to retrieve data from the chain, either via the Substrate Connect light client, or via an RPC connection to a full archival node. The Hybrid indexer will be queried via WSS. + +This grant will only include a basic dapp including: +- block browsing, showing transactions and events +- event searching, e.g. searching for all events connected to a specific `AccountId`. + +A subsequent grant application will be made to develop a richer dapp experience. + + +### Ecosystem Fit + +A major issue holding back the Substrate and Polkadot ecosystem is a high quality block explorer comparable to Etherscan. We need such a block explorer to be: +- non-proprietary +- as decentralized as possible +- not requiring massive system resources +- feature-rich + +The target audience is blockchain enthusiasts and developers. Eventually end-users should not need to know about block explorers, but this depends on dapps improving their user experience. + +The indexing component has value far beyond the Hybrid block explorer. Many Substrate applications will find a centralized event indexer extremely useful. + +#### Comparison to other Substrate explorers / indexers + +- [DotScan](https://dotscan.com/) - proprietary +- [Blockchair](https://blockchair.com/polkadot) - proprietary +- [Subscan](https://www.subscan.io/) - proprietary. Open source version is very basic with fully centralized database +- [Polkadot Apps](https://polkadot.js.org/apps/) - open source and fully decentralized, but non-indexing +- [Polkascan](https://explorer.polkascan.io/) - fully centralized database. +- [Blockcoders ink! Explorer](https://ink-explorer.blockcoders.io/) - fully centralized database, focused on contracts +- [Sirato ink! Explorer](https://github.com/web3labs/epirus-substrate) (previously Epirus) - fully centralized database, focused on contracts +- [SubSquid](https://www.subsquid.io/) - fully centralized database +- [SubQuery](https://subquery.network/) - fully centralized database +- [Substrate Archive](https://github.com/paritytech/substrate-archive) - fully centralized database, unmaintained + +There are no known block explorers in other ecosystems that are indexing, and either fully decentralized or have a hybrid design like this one. + + +## Team :busts_in_silhouette: + +### Team members + +- Jonathan Brown + +### Contact + +- **Contact Name:** Jonathan Brown +- **Contact Email:** jbrown@acuity.social +- **Website:** https://acuity.social + + +### Legal Structure + +- **Registered Address:** n/a +- **Registered Legal Entity:** n/a + + +### Team's experience + +Jonathan Brown has extensive relevant experience to build this software. + +He built a proof-of-concept centralized indexer for a cross-chain DEX that has a very similar architecture to the Hybrid indexer. It is written in Rust, indexes data from Substrate and Ethereum blockchains, writes it to RocksDB, and enables WSS queries via tokio_tungstenite. + +https://github.com/acuity-social/acuity-atomic-swap-offchain + +He is also very experienced building dapps with polakdot.js such as the [Acuity DEX](https://github.com/acuity-social/acuity-dex-app). + +Jonathan has also made some videos about Substrate development: https://www.youtube.com/watch?v=FMr2bNSmnfY + + +### Team Code Repos + +- https://github.com/ethernomad +- https://github.com/acuity-social + +### Team LinkedIn Profiles (if available) + +- n/a + + +## Development Status :open_book: + +Development has not started on the project, however the codebase will largely follow that of the [Acuity DEX offchain indexer](https://github.com/acuity-social/acuity-atomic-swap-offchain). + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 8 weeks +- **Full-Time Equivalent (FTE):** 1 +- **Total Costs:** 10,000 USD + +### Milestone 1 — Event Indexing component + +- **Estimated duration:** 4 weeks +- **FTE:** 1 +- **Costs:** 5,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can index a Substrate node and query events. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Connect to Substrate chains | The indexer will be written in Rust and configurable to connect to any Substrate chain using the subxt library. | +| 2. | Block syncing | As new blocks are produced, the indexer reads all events. Additionally, it will read events from existing blocks, starting at block 0. | +| 3. | Index writing | All identifying parameters in events will be indexed in the database using the sled library. | +| 4. | Status querying | It will be possible to query the current status of the indexer via WSS. This will include information about which chain is being indexed, indexing progress and last know block. Queries will be handled via tokio_tungstenite. | +| 5. | Index querying | It will be possible to search via WSS for events with an identifier. | +| 6. | Dapp | A rudimentary web interface will be developed to expose this functionality. This will be built using pnpm, vite, vue, vuetify & polkdadot.js .| + +### Milestone 2 — Event Subscribing + +- **Estimated duration:** 2 weeks +- **FTE:** 1 +- **Costs:** 2,500 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can witness live updates to event search results. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Event subscription API | The indexer will be updated to service subscription requests via WSS. | +| 2. | Live dapp | The dapp will be updated so that pages displaying results from event queries will be updated as soon as a new event appears on the chain. | + + +### Milestone 3 — Decentralized Component + +- **Estimated Duration:** 2 weeks +- **FTE:** 1 +- **Costs:** 2,500 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can use the rudimentary explorer dapp. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Video | We will publish a video that explains and demonstrates all aspects of the explorer. | +| 1. | Dapp | The dapp will be extended to query block and state via either the Substrate Connect light client, or via direct connect to a full node via WSS. | +| 2. | Cross-chain UI | When a Tx includes a XCM, it will be easy and intuitive to open the relevant block from the other chain(s). | + + +## Future Plans + +- hosting - The project needs to host indexes for all major Substrate chains. The frontend can be hosted as a traditional website and on IPFS. + +- improve dapp - explore how the event index can be used to better display the richness of the Polkadot ecosystem. + +- support for tokens and nfts + +- add support for ink! smart contracts with decentralized source code publishing + +- maintain Hybrid as the most decentralized Substrate block explorer + +- marketing + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Twitter + +* What work has been done so far? Development has not started yet. + +* Are there are any teams who have already contributed (financially) to the project? +No +* Have you applied for other grants so far? +No From 5432ac496f0d066353ab5880a81d0d7dd764b0a2 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 6 Mar 2023 14:06:07 +0100 Subject: [PATCH 207/578] Update index.md Hybrid Explorer --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index a7dd89787a9..3ea793e4852 100644 --- a/applications/index.md +++ b/applications/index.md @@ -58,6 +58,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [decentraDOT](https://decentradot.com/) | [Cyclops Validator Dashboard](cyclops.md) | [GitHub](https://github.com/ArthurHoeke?tab=repositories) | ☐ | ☒ | ☐ | | [Anwesh Nayak](https://github.com/muddlebee) | [Mempool Dashboard - Version 2](polkadot-mempool-explorer-v2.md) | [GitHub](https://github.com/muddlebee) | ☐ | ☐ | ☐ | | [Tellor Inc](https://tellor.io/) | [Tellor Oracle Protocol](Tellor.md) | [GitHub](https://github.com/tellor-io/) | ☐ | ☐ | ☐ | +| Jonathan Brown | [Hybrid Explorer](hybrid.md) | [GitHub](https://github.com/acuity-social) | ☐ | ☐ | ☐ | ## 2022 From ab08fddee6db6e0a096964fd8aedbedc7627aeb2 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Mon, 6 Mar 2023 10:49:16 -0300 Subject: [PATCH 208/578] Update index.md (#1591) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 3ea793e4852..f809db5e54a 100644 --- a/applications/index.md +++ b/applications/index.md @@ -94,7 +94,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Colorful Notion](https://github.com/colorfulnotion) | [Zombienet Explorer: Multi-Chain Substrate Block Explorer](Zombienet-Explorer.md) | [GitHub](https://github.com/colorfulnotion/zombienet-explorer) | ☐ | ☐ | ☐ | | [TwinP](https://github.com/herou) | [Decentralized Invoice](decentralized_invoice.md) | [GitHub](https://github.com/herou) | ☐ | ☒ | ☒ | | [Zondax](http://zondax.ch/) | [Hybrid node research grant](hybrid_node_research.md) | [GitHub](https://github.com/ZondaX) | ☐ | ☐ | ☐ | -| [Bright Inventions](https://brightinventions.pl/) | [ZK-Snarks Tutorial](ZK-Snarks%20tutorial.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☐ | +| [Bright Inventions](https://brightinventions.pl/) | [ZK-Snarks Tutorial](ZK-Snarks%20tutorial.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☒ | | [Common Orbit LLC](https://brson.github.io) | [wasm-opt-for-rust maintenance](maintenance/wasm-opt-for-rust.md) | [GitHub](https://github.com/brson/wasm-opt-rs) | ☐ | ☒ | ☐ | | [Salaheldin Soliman](https://github.com/salaheldinsoliman) | [Solang developer experience improvements](Solang_developer_experience_improvements.md) | [GitHub](https://github.com/hyperledger/solang) | ☐ | ☐ | ☐ | | [Optymalizacja AI Grzegorz Miebs](https://github.com/miepsik) | [Validator selection](validators_selection.md) | [GitHub](https://github.com/miepsik) | ☒ | ☐ | ☐ | From 4aac62d1614fca4e9c303eaed31b542baab7231e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Tue, 7 Mar 2023 11:41:55 +0100 Subject: [PATCH 209/578] Add RFP link to landing page --- src/components/HomepageFeatures.js | 2 +- src/pages/index.js | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/components/HomepageFeatures.js b/src/components/HomepageFeatures.js index 23ca143519b..c5823289807 100644 --- a/src/components/HomepageFeatures.js +++ b/src/components/HomepageFeatures.js @@ -22,7 +22,7 @@ const FeatureList = [ { title: 50, description: ( - <>in countries + <>countries ), }, diff --git a/src/pages/index.js b/src/pages/index.js index 7613602e3e2..9298b6fa208 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -21,6 +21,14 @@ function HomepageHeader() { to="./docs/Process/how-to-apply"> Apply + + Browse RFPs + From 8185af04b8ed60ea9ebe4d039f937f08d58a96dc Mon Sep 17 00:00:00 2001 From: Dusan Morhac <55763425+dudo50@users.noreply.github.com> Date: Wed, 8 Mar 2023 08:36:01 +0100 Subject: [PATCH 210/578] Create ParaSpell_follow-up2.md (#1589) * Create ParaSpell_follow-up2.md * Update outdated links - 3 links that were outdated were replaced. * Update applications/ParaSpell_follow-up2.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update applications/ParaSpell_follow-up2.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update applications/ParaSpell_follow-up2.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> --------- Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> --- applications/ParaSpell_follow-up2.md | 246 +++++++++++++++++++++++++++ 1 file changed, 246 insertions(+) create mode 100644 applications/ParaSpell_follow-up2.md diff --git a/applications/ParaSpell_follow-up2.md b/applications/ParaSpell_follow-up2.md new file mode 100644 index 00000000000..ae04a28df37 --- /dev/null +++ b/applications/ParaSpell_follow-up2.md @@ -0,0 +1,246 @@ +# ParaSpell + +- **Team Name:** ParaSpell✨ +- **Payment Address:** 0xB7d45Ef044fD9342e4c03e28D9e9bddA2d4Fe3e1 (USDC) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 🐣 + + +## Project Overview :page_facing_up: + +Previously completed grants: +- [Phase 1](https://github.com/w3f/Grants-Program/pull/1118) +- [Phase 2](https://github.com/w3f/Grants-Program/pull/1245) + +What is ParaSpell: +ParaSpell is XCM & XCMP Developer tool ment to ease integration of cross-chain functionality into dApps. As we have learnt by now, cross-chain experience between Parachains can be very diverse. ParaSpell means to unify this experience by doing all the research for developers. We have wrapped all XCM pallets from compatible nodes into simple patterns from which it is easy to create XCM call. As an example we provide image below. + + +![img1](https://user-images.githubusercontent.com/55763425/218987451-2bfc9526-8f2b-4477-8c42-8c70cbcb6ec4.jpg) + +In this image we can see, that ParaSpell saves much time to developers. Just one call can contain multiple lines of JSON which would otherwise have to be integrated manually by developer. ParaSpell does it in marginally less lines and hides complex logic of building message which ensures, that messages are constructed correctly. This call in the end results into following lengthy extrinsic: + +![img2](https://user-images.githubusercontent.com/55763425/218987583-f5fb10b2-2e0c-4f36-b01c-0d610deab1c6.jpg) + +Following extrinsic can be subscribed into and we can check for it's events on front end. ParaSpell provides front end for testing XCM transactions and XCM called [UI-V2](https://github.com/paraspell/ui-v2). This UI is also deployed on netlify so users only have to run local network to start testing. UI also provides ability to open or close HRMP channels or test out XYK pool functionality that was implemented in collaboration with HydraDX team. In the picture below we provide overview of the UI. +Screenshot 2023-02-15 at 10 36 01 + + +### Overview 🎨 + +ParaSpell is split into three main repositories at the moment: + +- [XCM SDK](https://github.com/paraspell/xcm-sdk): Meant to unify cross-chain experience on Substrate. Can serve any dApp developer that wishes to integrate XCM or other pallets support for they app. +- [UI-V2](https://github.com/paraspell/ui-v2): Allows for launching local network and testing XCM or HRMP channels across that local network +- [Docs](https://github.com/paraspell/docs): Extensive documentary for overview of ParaSpell, guide for SDK and UI + + +#### SDK +This SDK currently support 42 compatible XCM nodes. They can transfer XCM messages in three different scenarios. +- Parachain to Parachain - HRMP +- Parachain to Relay chain - UMP +- Relay chain to Parachain - DMP + +SDK contains many useful features that allow for easier inntegration: +- Builder pattern implementation, easy to construct XCM calls, much more used recently for simplicity of implementation. + +- Suggestions, SDK contains TYPES that help to guide developer through integration. For example he get's compatible nodes suggested. +![1_59xApnboumYhzuRHKx60TA](https://user-images.githubusercontent.com/55763425/219314223-79c31085-2e90-4dc7-ad51-da96de730ea0.png) + +- Console printouts, SDK allows for printing into console so developer can alway check if call they constructed is correct. +![1_2KT6Z1rxxprmE03XWYY-HA](https://user-images.githubusercontent.com/55763425/219314235-1da52511-b4e8-4a41-bdaa-04fa6a9e8a48.png) + +- Exporting registered assets for each compatible node in many useful functions + +- Exporting supported XCM pallets for each compatible node in useful functions + +And more.. + +#### UI-V2 +UI is used as testing tool for Parachain developers, they can simply add their node into network and test it with HRMP channels as well as XCM transfers. UI also allows dApp developers to test and learn XCM before integrating it from our SDK. + +UI is made to be as simple to use as possible. It is now also deployed on netlify so developers only have to start local network from configuration file provided by ParaSpell which starts network of Relay chain and 3 different Parachains (Bifrost,Karura & Pichiu) + +Below are some examples of UI with running network: +Screenshot 2023-02-16 at 13 31 06 + +Above we can see open/ close channel screen. It is simple to work with and intuitive. Nodes are pulled from relay chain by query so if network is not running you cannot see any nodes. + +Screenshot 2023-02-16 at 13 31 20 + +Above we can observe, that UI contains simple Wallet login with test accounts. + +Screenshot 2023-02-16 at 13 31 33 + +Above we can see XCM screen which is also very simple to navigate and nodes are pulled from relay chain by query. + +#### Docs +Docs contain important information regarding SDK, UI and other repositories that are in ParaSpell or ParaSpell contributed to / collaborated with. +The key areas are: +- Introduction +Screenshot 2023-02-16 at 13 44 58 +- Guide on importing SDK +Screenshot 2023-02-16 at 13 45 09 + +- Guide on launching local network and UI +Screenshot 2023-02-16 at 13 48 43 + + +- Guide on executing operations in UI +Screenshot 2023-02-16 at 13 45 24 + +- Guide on implementing SDK +Screenshot 2023-02-16 at 13 46 01 + + +- Important links +Screenshot 2023-02-16 at 13 45 30 + +#### Architecture 🏗️ +![screenFlow](https://user-images.githubusercontent.com/55763425/198412240-e031d877-c5d8-4952-9048-2e1256ba4469.svg) + +UI is purposely designed to be as simple as possible. This guarantees, that all tasks can be done quickly and without extended searching. All necessary screens also feature notifications which will as a milestone explain be callback reactive. The loading screen is only present on the first application & network startup, once accessing the same screen after the application was loaded it will be skipped automatically. The screen serves to register necessary assets in parachain nodes. This is only required to be run once per network startup. + +SDK currently handles transfers to 42 compatible Parachains (all XCM Palletts) ([ParaSpell SDK](https://github.com/paraspell/sdk/)) and also can transfer to both Relay chains. It is easy to construct calls as is but we want to make it even easier and more developer friendly. + +#### Technology Stack 💻️ +- Vue.js +- Node.js +- Typescript +- Polkadot api libraries +- Make +- Parachain launch +- Substrate compatible nodes (For now Rococo, Pichiu(Kylin network), Bifrost & Acala) + +### Ecosystem Fit 🌳 + +There are not many XCM & XCMP related development tools released currently. We aim to aid this mostly empty space and help developers to understand XCM & XCMP as the current state-of-the-art technology by providing documentation and a user interface in which they can do development tasks more easily and faster. + +In Polkadot and Kusama ecosystem, there are few XCM related tools in development. For example Moonbeam XCM SDK was released only recently. We bring comparison table that compares our ParaSpell SDK to Moonbeam SDK +| Features | ParaSpell XCM SDK | Moonbeam XCM SDK | +| -----: | ----------- | ------------- | +| Number of packages user has to install | User needs to install only 1 package | User needs to install 2 packages | +| Support for Parachains | Already integrated for every XCM compatible pallet Link to implementation [ParaSpell SDK](https://github.com/paraspell/sdk/) | Every new node has to be added manually | +| Build pattern | Integrated as intuitive as possible | Integrated, not as intuitive to implement however | +| Support for asset pallet operations | Integrated | Not integrated | +| Support for HRMP pallet operations | Integrated users can open & close HRMP channels on their local chain (Useful feature for devs) | Not integrated | +| Support for checking details that do not change | Integrated & also be covered with some error handling eg (too little ammount being sent, not sufficient for XCM transfer) | Integrated in form of small "map" for different Tokens & Node IDs | +| Support for Axelar GMP (General message passing) that will connect Substrate with EVM chains | Planned to be implemented in the future | No data | + + + +Unlike the already mentioned "Moonbeam XCM" platform ParaSpell provides UI enhancement that uses our XCM SDK and users can try/learn technology from it. ParaSpell also includes support for 42 Substrate Parachains ([ParaSpell SDK](https://github.com/paraspell/sdk/) that have XCM pallets compared to Moonbeam XCM to which users have to implement compatible nodes manually. ParaSpell SDK only needs one package compared to Moonbeam XCM which has total of two. Compared to Moonbeam XCM which contains only XCM calls ParaSpell also contains calls that can open or close HRMP channels. We also include support for Parachains that have template pallet for XCM called polkadotXCM this pallet is a little harder to work with than xTokens, even more for inexperienced developers. + +Another comparison worth mentioning is UI vs Morph which is also enhancement of XCM UI Transfer tool +| Features | ParaSpell XCM UI | Morph | +| -----: | ----------- | ------------- | +| Focus: | Developers & users that wish to try XCM locally first | Users | +| Wiki: | Comprehensive Wiki explaining XCM, how to add assets to UI & Nodes and more implemented | Not implemented | +| Support for transfers: | In three different scenarios | In two scenarios | +| Support for local network configuration: | Fully implemented example network configuration that uses maintained Parachain-launch library | Not implemented | +| Support for HRMP channel opening/closing: | Fully implemented | Not implemented | + +Unlike the already mentioned "Morph" platform ParaSpell focuses more on developers. ParaSpell features complete network install and startup configuration in one single command. This automatization ensures, that developers do not need to do any extra tasks when they wish to run development nodes locally. ParaSpell also allows developers to open and close HRMP channels between Parachains they connected. Like "Morph", ParaSpell can also transfer fungible tokens in three scenarios. From Parachains to Relay chain, from Relay chain to Parachains & from Parachains to Parachains. + +We are currently in talks with several Parachain teams that like the idea of unified SDK for XCM transfers as much as we do. SDK that unifies XCM can be very helpful for entire ecosystem in our opinion. + +Our target audiences are Web3 projects and starting/current blockchain developers. +## Team :busts_in_silhouette: + +### Team members + +Dušan Morháč - Student, project Founder & Core Dev. Faculty of Informatics and Information Technologies STU in Bratislava + +Michael Absolon - Student, SDK Core Dev. Faculty of Informatics and Information Technologies STU in Bratislava + +### Contact + +- **Contact Name:** Dušan Morháč +- **Contact Email:** dudo.morhac@gmail.com + + +### Legal Structure + +- **Registered Address:** Tomášovská 453/2, Kalinovo 98501, Slovak Republic +- **Registered Legal Entity:** Dušan Morháč ml. + +### Team's experience + +- Dušan is the founder & researcher behind this project and he has successfully presented it at the international conference ICECET2022 held in Prague from which there is an article regarding XCMP & ParaSpell project. It is published by [IEEE](https://ieeexplore.ieee.org/document/9872938). Dušan also studies Blockchain technology and had a bachelor's thesis about cross-blockchain sharing from which this idea was born. Dušan also continues research on this idea in his Master's thesis. He is actively working on [ParaSpell](https://github.com/paraspell) full-time & has also participated in other ecosystem projects. Recently he attended Polkadot Blockchain Academy 2023 in Buenos Aires which gave him a lot of insight into the ecosystem and he also graduated from the academy successfully. + + +- Michael is a dedicated TypeScript developer with 2 years of full-time experience in the Web2 sphere. Michael's expertise in this field was further solidified in 2019 when he won first place in the Junior Internet Web competition for his online multiplayer game, which was written in JavaScript. In addition to his professional background, Michael also achieved a bachelor's degree in the same computer science University as Dušan and he is currently pursuing a master's degree which focuses on Blockchain. His passion for technology led him to explore Blockchain technology in his free time. He was recently offered the opportunity to work on ParaSpell XCM SDK with Dušan and he delivered many of the key features SDK now offers. + +### Team Code Repos + +- https://github.com/paraspell/xcm-sdk +- https://github.com/paraspell/ui-v2 +- https://github.com/paraspell/docs + +### Team Github Profiles 🧑‍🎓 + +- https://github.com/dudo50 Dušan Morháč +- https://github.com/michaeldev5 Michael Absolon + +### Team LinkedIn Profiles 🧑‍🎓 + +- https://www.linkedin.com/in/dudo50/ +- https://www.linkedin.com/in/michael--absolon/ + +## Development Status :open_book: + +[SDK](https://github.com/paraspell/xcm-sdk) is currently released into main and is in version that is fully operable. There are still some tweaks we plan to add and make, they are mentioned below. [UI-V2](https://github.com/paraspell/ui-v2) currently runs on state-of-the-art technology version VueJS 3 and newest version of Nuxt. It deprecated V1 and introduced much smoother interface and modules brought from subscaffold template ParaSpell contributed to. [Docs](https://github.com/paraspell/docs) are currently in ready state but there is still some tweaking to do. + +Sidenote: We have recently developed article about Polkadot & Paraspell called Enhancing XCMP Interoperability Across Polkadot Paraverse and it was accepted to International IEEE ICBC 2023 conference held in Dubai. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 2 months +- **Full-Time Equivalent (FTE):** 1 FTE +- **Total Costs:** 10,000 USD + +### Milestone 1 - Phase 3, make XCM SDK more efficient, add new nodes & rework Localhost network in UI + +- **Estimated duration:** 2 months ⌛️ +- **FTE:** 1 +- **Costs:** 10,000 USD 💰️ + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | MIT | +| 0b. | Documentation | We will provide both **inline documentation** of the code and a usage explanation in readme.md | +| 0c. | Testing and Testing Guide | SDK Core UNIT tests will be provided for xTokens Pallet, HRMP pallet, polkadotXCM pallet| +| 0d. | Docker | Docker file that allows to test ParaSpell SDK through ParaSpell UI will be provided. | +| 0e. | Create Medium article about development of Phase 3 ParaSpell | Add article covering new features & improvements brought in Phase3 | +| 1. | Merge currencyId & currency in XCM Transfers | Merge currency ID and currency symbol into one so user do not need to enther both. Raised in issue: https://github.com/paraspell/xcm-sdk/issues/16 | +| 2.a | Add support for new compatible nodes in DMP Scenario (Downwards message passing) | Check for new Parachain support & update Parachains, that have new compatibility with other Parachains in DMP Scenario & Update list of [compatible Parachains](https://github.com/paraspell/xcm-sdk/blob/main/docs/supportedNodes.md) accordingly | +| 2.b | Add support for new compatible nodes in UMP Scenario (Upwards message passing) | Check for new Parachain support & update Parachains, that have new compatibility with other Parachains in UMP Scenario & Update list of [compatible Parachains](https://github.com/paraspell/xcm-sdk/blob/main/docs/supportedNodes.md) accordingly | +| 2.c | Add support for new compatible nodes in HRMP Scenario (Horizontall message passing) | Check for new Parachain support & update Parachains, that have new compatibility with other Parachains in HRMP Scenario & Update list of [compatible Parachains](https://github.com/paraspell/xcm-sdk/blob/main/docs/supportedNodes.md) accordingly| +| 3. | Rework Utils.ts to remove huge switch that constructs message | Rework construct XCM message function to not have switch and be more efficient in construction - [link](https://github.com/paraspell/xcm-sdk/blob/main/src/utils.ts#L344) | +| 4.a | Deprecate Parachain-launch & replace it with Zombienet I | Replace network startup configuration from Parachain-launch library into state of the art technology called Zombienet [link1](https://github.com/paraspell/ui-v2/blob/main/Makefile#L5), [link2](https://github.com/paraspell/ui-v2/blob/main/paraspell-network-config.yml)| +| 4.b | Deprecate Parachain-launch & replace it with Zombienet II | Update ParaSpell Docs | +| 5. | Add suggestions we received in our previous grant evaluations (If not added already) | Add suggestions from our phase1 and phase2 proposal evaluations if they were not added already | + +## Future Plans 🔭 + +Once everything will be implemented according to the proposed plan application will still be under constant improvement as technology will progress. For example, once the XCMP protocol will be released we wish to deprecate the HRMP protocol we currently use for channels. + +In a long run, we also want to improve design of the UI, add new features that can be useful for developers and support for new nodes. + +Project goal is that SDK will serve dApp developers and UI will teach new substrate developers to use XCM and will serve to existing substrate developers to test their freshly baked Parachains. + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Personal recommendation + +##### Project achievements in chronological order ⌛️ + +- 📙 Article about project created & presented on international conference ICECET2022 held in Prague (450 out of 1000+ articles accepted) Link to IEEE publication - [IEEE Sharing Fungible Assets Across Polkadot Paraverse](https://ieeexplore.ieee.org/document/9872938/) +- 🥈 2nd Prize, Build a XCM related Tool for Moonbeam - Polkadot North America Hackathon [Hackathon entry](https://devpost.com/software/polkachange-cross-blockchain-transfer-tool) +- 🥉 3rd Prize, EVM+ DApp for aUSD yield - Polkadot North America Hackathon [Hackathon entry](https://devpost.com/software/polkachange-cross-blockchain-transfer-tool) +- 🎈 Web 3 Foundation base grant [Application](https://github.com/w3f/Grants-Program/pull/1118), [Delivery](https://github.com/w3f/Grant-Milestone-Delivery/pull/584) +- 🐍 [Basilisk](https://bsx.fi/) treasury proposal 2/2 Approved [link](https://basilisk.subsquare.io/treasury/proposal/2), [link2](https://basilisk.subsquare.io/treasury/proposal/4) +- ⭐️ [Astar](https://astar.network/) XCM bounty Polkadot hackathon Latam Bounty [link](https://github.com/AstarNetwork/AstarBounties/pull/17) +- 🔭 Web 3 Foundation phase 2 grant Milestone 3 / 3 delivered [Application](https://github.com/w3f/Grants-Program/pull/1245), [Delivery1](https://github.com/w3f/Grant-Milestone-Delivery/pull/670), [Delivery 2 & 3](https://github.com/w3f/Grant-Milestone-Delivery/pull/715) +- 📕 Article about Polkadot & ParaSpell created & accepted to be presented at international cross-chain conference IEEE ICBC 2023 [links TBA] From ff6332d17333bad4ddf50731e69fba14e62a3d75 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 8 Mar 2023 08:48:40 +0100 Subject: [PATCH 211/578] Update index.md ParaSpell_Follow Up 2 --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index f809db5e54a..2ac6034500b 100644 --- a/applications/index.md +++ b/applications/index.md @@ -59,6 +59,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Anwesh Nayak](https://github.com/muddlebee) | [Mempool Dashboard - Version 2](polkadot-mempool-explorer-v2.md) | [GitHub](https://github.com/muddlebee) | ☐ | ☐ | ☐ | | [Tellor Inc](https://tellor.io/) | [Tellor Oracle Protocol](Tellor.md) | [GitHub](https://github.com/tellor-io/) | ☐ | ☐ | ☐ | | Jonathan Brown | [Hybrid Explorer](hybrid.md) | [GitHub](https://github.com/acuity-social) | ☐ | ☐ | ☐ | +| [ParaSpell](https://github.com/paraspell) | [ParaSpell_Follow Up 2](ParaSpell_follow-up2.md) | [GitHub](https://github.com/paraspell) | ☐ | ☐ | ☐ | ## 2022 From 6614127cf1d60f731a7895273ac7900ad294bbcc Mon Sep 17 00:00:00 2001 From: Noc2 Date: Wed, 8 Mar 2023 09:06:35 +0100 Subject: [PATCH 212/578] fix paraspell --- applications/ParaSpell_follow-up2.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/applications/ParaSpell_follow-up2.md b/applications/ParaSpell_follow-up2.md index ae04a28df37..9057ea6acae 100644 --- a/applications/ParaSpell_follow-up2.md +++ b/applications/ParaSpell_follow-up2.md @@ -22,7 +22,7 @@ In this image we can see, that ParaSpell saves much time to developers. Just one ![img2](https://user-images.githubusercontent.com/55763425/218987583-f5fb10b2-2e0c-4f36-b01c-0d610deab1c6.jpg) Following extrinsic can be subscribed into and we can check for it's events on front end. ParaSpell provides front end for testing XCM transactions and XCM called [UI-V2](https://github.com/paraspell/ui-v2). This UI is also deployed on netlify so users only have to run local network to start testing. UI also provides ability to open or close HRMP channels or test out XYK pool functionality that was implemented in collaboration with HydraDX team. In the picture below we provide overview of the UI. -Screenshot 2023-02-15 at 10 36 01 +![img3](https://user-images.githubusercontent.com/55763425/218989950-acb681e3-b511-452b-bc3a-c9e5049f7dce.png") ### Overview 🎨 @@ -61,15 +61,15 @@ UI is used as testing tool for Parachain developers, they can simply add their n UI is made to be as simple to use as possible. It is now also deployed on netlify so developers only have to start local network from configuration file provided by ParaSpell which starts network of Relay chain and 3 different Parachains (Bifrost,Karura & Pichiu) Below are some examples of UI with running network: -Screenshot 2023-02-16 at 13 31 06 +![img4](https://user-images.githubusercontent.com/55763425/219366458-8873418e-9487-4762-8327-56c3294accdd.png) Above we can see open/ close channel screen. It is simple to work with and intuitive. Nodes are pulled from relay chain by query so if network is not running you cannot see any nodes. -Screenshot 2023-02-16 at 13 31 20 +![img5](https://user-images.githubusercontent.com/55763425/219366638-38ebcdd7-5ff6-4507-8209-fc7f3ccac348.png) Above we can observe, that UI contains simple Wallet login with test accounts. -Screenshot 2023-02-16 at 13 31 33 +![img6](https://user-images.githubusercontent.com/55763425/219366771-be566565-8bf1-477b-b7c8-3eacec6f63a0.png) Above we can see XCM screen which is also very simple to navigate and nodes are pulled from relay chain by query. @@ -77,23 +77,23 @@ Above we can see XCM screen which is also very simple to navigate and nodes are Docs contain important information regarding SDK, UI and other repositories that are in ParaSpell or ParaSpell contributed to / collaborated with. The key areas are: - Introduction -Screenshot 2023-02-16 at 13 44 58 +![img7](https://user-images.githubusercontent.com/55763425/219368826-2bb5474f-a76f-4828-be15-c3274d9ae10a.png) - Guide on importing SDK -Screenshot 2023-02-16 at 13 45 09 +![img8](https://user-images.githubusercontent.com/55763425/219368879-8bd4fd5a-a1f5-4417-8620-d8b279c99733.png) - Guide on launching local network and UI -Screenshot 2023-02-16 at 13 48 43 +![img10](https://user-images.githubusercontent.com/55763425/219369125-ce0756d7-49ef-437e-98b0-2336aa250137.png) - Guide on executing operations in UI -Screenshot 2023-02-16 at 13 45 24 +![img11](https://user-images.githubusercontent.com/55763425/219368943-4115808b-1322-4551-b03a-b693bec285a2.png) - Guide on implementing SDK -Screenshot 2023-02-16 at 13 46 01 +![img12](https://user-images.githubusercontent.com/55763425/219369060-1c0c1076-65e5-4997-a1c6-b99da9f33bac.png) - Important links -Screenshot 2023-02-16 at 13 45 30 +![img13](https://user-images.githubusercontent.com/55763425/219369013-e147d239-28a2-4701-9c16-2614b975d210.png) #### Architecture 🏗️ ![screenFlow](https://user-images.githubusercontent.com/55763425/198412240-e031d877-c5d8-4952-9048-2e1256ba4469.svg) @@ -166,7 +166,7 @@ Michael Absolon - Student, SDK Core Dev. Faculty of Informatics and Information ### Team's experience - Dušan is the founder & researcher behind this project and he has successfully presented it at the international conference ICECET2022 held in Prague from which there is an article regarding XCMP & ParaSpell project. It is published by [IEEE](https://ieeexplore.ieee.org/document/9872938). Dušan also studies Blockchain technology and had a bachelor's thesis about cross-blockchain sharing from which this idea was born. Dušan also continues research on this idea in his Master's thesis. He is actively working on [ParaSpell](https://github.com/paraspell) full-time & has also participated in other ecosystem projects. Recently he attended Polkadot Blockchain Academy 2023 in Buenos Aires which gave him a lot of insight into the ecosystem and he also graduated from the academy successfully. - +![img14](https://user-images.githubusercontent.com/55763425/223093342-7d947a57-b114-4260-8999-fd4506adc76e.jpg" width="380" height="280") - Michael is a dedicated TypeScript developer with 2 years of full-time experience in the Web2 sphere. Michael's expertise in this field was further solidified in 2019 when he won first place in the Junior Internet Web competition for his online multiplayer game, which was written in JavaScript. In addition to his professional background, Michael also achieved a bachelor's degree in the same computer science University as Dušan and he is currently pursuing a master's degree which focuses on Blockchain. His passion for technology led him to explore Blockchain technology in his free time. He was recently offered the opportunity to work on ParaSpell XCM SDK with Dušan and he delivered many of the key features SDK now offers. From be8f81a8afc6da7deebb91b5fc3081321102f7b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mert=20K=C3=B6kl=C3=BC?= <37740842+justmert@users.noreply.github.com> Date: Wed, 8 Mar 2023 13:00:12 +0300 Subject: [PATCH 213/578] PolkaFlow Grant Proposal (#1586) * Create polkaflow.md * Update polkaflow.md * Update polkaflow.md * Update polkaflow.md --- applications/polkaflow.md | 177 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 applications/polkaflow.md diff --git a/applications/polkaflow.md b/applications/polkaflow.md new file mode 100644 index 00000000000..67af9018025 --- /dev/null +++ b/applications/polkaflow.md @@ -0,0 +1,177 @@ +# PolkaFlow + +- **Team Name:** justmert +- **Payment Address:** [0xf5412558d977915D56d8B4d3773871142d379E74](https://etherscan.io/address/0xf5412558d977915D56d8B4d3773871142d379E74) (USDC, Ethereum (ERC20)) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + +## Project Overview :page_facing_up: + +### Overview + +The DOT open source developer community is expanding rapidly, yet there is currently no way to easily monitor development progress across various projects that integrates with the DOT ecosystem. Keeping track of development progress across various projects and monitoring developer contributions can provide valuable insights into the evolution of DOT ecosystem. With data dispersed throughout Github, including contributors, commits, issues, repositories, and PRs, it can be challenging to grasp the overall progress of the DOT ecosystem. + +I am presenting PolkaFlow to the DOT community as the ultimate solution for visualizing and analyzing open source projects within the ecosystem. It offers a comprehensive view of activities of projects and insights into the ecosystem's trends. The project will allow users to gain insights into the development activity, code contributions, issue resolution, and community engagement of the DOT ecosystem through open source projects. This information will be displayed through various visualizations and charts, which will be accessible through a web-based application named **PolkaFlow**. + + +### Project Details + +**PolkaFlow Website:** https://polkaflow.vercel.app/ + +**Mockups** + +| Dashboard Page | Project List Page | Project Detail Page | +| ----- | ----------- | ------------- | +|![Screenshot 2023-03-06 at 01-03-22 PolkaPulse](https://user-images.githubusercontent.com/37740842/222989193-91da2e3d-53f1-4d5f-b0bb-bd66600a173e.png) |![Screenshot 2023-03-06 at 01-29-06 Projects](https://user-images.githubusercontent.com/37740842/222989551-75347c96-cc80-45bc-b4d0-e6cabbe3e294.png)|![Screenshot 2023-03-06 at 01-03-48 Project Page](https://user-images.githubusercontent.com/37740842/222989225-7bc5fe13-e158-4fb4-9b00-9f925630d9c9.png)| + +**Technical Scheme** + +| Scheme | +| -----: | +|![polkaflow-technical-scheme](https://user-images.githubusercontent.com/37740842/222989229-071e08e4-cb4e-4f94-8e47-cee99fa69ade.png)| + + +**Technical Stack** + +- Frontend: ReactJS, Tailwind CSS, Apache ECharts +- Backend: Python +- Database: Firebase Firestore +- Additional Integrations: Typeform (for submitting project), Algolia (for search functionality) + + +### Ecosystem Fit + +**Target audience** + +The target audience for PolkaFlow can include developers, researchers, and enthusiasts who are interested in monitoring the development and activity of open-source projects on the DOT ecosystem. The platform's analytical tools and visualizations can provide valuable insights into the performance of various projects, making it useful for those who want to gain a better understanding of the ecosystem's progress and the direction it's headed in. + +Besides, by tracking the activity of commits history, and issue resolution PolkaFlow can help developers identify areas where they can improve and streamline their own development processes. By offering detailed analytics, PolkaFlow can become an essential tool for anyone who is interested in the development and progress of the DOT ecosystem. + +**Evidence for the need** + +* **Increased Interest in DOT Ecosystem:** The growth of the DOT ecosystem and the increasing number of open-source projects being developed on the protocol highlight the need for a tool that can monitor and analyze the performance of these open-source projects. PolkaFlow can provide valuable insights for the projects within the ecosystem. + +* **Lack of Comprehensive Analytics:** There is a lack of reliable and user-friendly tools that can provide detailed analytics and visualizations for open-source projects on DOT ecosystem. Besides, the demand for better analytical tools in the blockchain space is increasing, and developers and stakeholders are seeking tools that can help them monitor and analyze the performance of the projects. PolkaFlow fills this gap for the DOT ecosystem. + +* **Historical and Trend Data:**: PolkaFlow can provide a historical and trend data of the Github activity in the DOT ecosystem, allowing developers and project managers to see first hand how the ecosystem is growing, evolving, and changing over time. This data can be used to identify patterns, trends, and areas of improvement, leading to more informed decision making and better outcomes for the projects within the ecosystem. + +**Impact** + +* **Improve Project Visibility**: By providing detailed analytics and visualizations for DOT projects, PolkaFlow can help increase the visibility of these projects, making it easier for developers and users to find and contribute to them. + +* **Enhance Developer Productivity**: With the ability to quickly access important data and metrics, developers can more easily identify areas of the project that need attention. This can lead to faster issue resolution and more efficient development cycles. + +* **Encourage Community Engagement**: By providing a centralized location for viewing project activity and contributions, PolkaFlow can encourage community engagement and collaboration. Users can easily identify areas where they can contribute to the project and engage with other developers and users. + +* **See Ecosystem Evolution**: PolkaFlow can help show the evolution of DOT projects over time by providing historical data and visualizations of key metrics, enabling developers to better understand the project's development trajectory and identify areas where protocol gains trends. + +* **Stands Out**: Currently, there is no project that provides a comprehensive analytics dashboard for open-source projects in the DOT ecosystem. PolkaFlow fills this gap and provides value by enabling developers and stakeholders to easily gain insights into the activity and performance of DOT projects. + + +## Team :busts_in_silhouette: + +### Team members + +- Mert Köklü - Project Owner + +### Contact + +- **Contact Name:** Mert Köklü +- **Contact Email:** kklumert@gmail.com +- **Website:** https://github.com/justmert + +### Legal Structure + +- **Registered Address:** N/A +- **Registered Legal Entity:** Individual + +### Team's experience + +**Mert Köklü** + +Served as the founding vice-chair of ACM Student Chapter and acted as an ambassador of many organizations including Microsoft and NVIDIA as Certified Instructor. In the Web3 space, he co-manage the AAVE Turkey Community and advocate for The Graph. Was working with AI video pipelines at an NVIDIA distributor company in Turkey before getting involved with blockchain. + +Develops ecosystem tools and applications with various tech stacks. AAVE and Filecoin grantee with an already accepted 3 projects and now developing open-source, user-friendly applications that add value to the DOT ecosystem. + + +### Team Code Repos + +- https://github.com/justmert/aave-graphql-doc (Aave GraphQL Documentation Website - https://www.aaveql.org/ ) +- https://github.com/justmert/aave-graphql-editor (Aave GraphQL Editor Website) +- https://github.com/justmert/peer-cli (Peer CLI: Swiss Army Knife for the IPFS) +- https://github.com/justmert/Aave-API-Telegram-Bot (Aave API Telegram Bot) +- https://github.com/justmert/chainweb.py (Kadena Chainweb Python Bindings) + +**Github Account** +- https://github.com/justmert + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/mertkoklu/ + +## Development Status :open_book: + +PolkaFlow is already deployed on Vercel and can be accessed via `polkaflow.vercel.app`. The project is currently in the MVP stage with Milestone 1 completed. Initially 17 repositories are added to the platform because of the demo purposes. After the approve, the project will have more repositories curated by me (or requests from the DOT Team) and the more can be added by the DOT community via Submit button in the app. + +- **Website:** https://polkaflow.vercel.app/ +- **Github (Frontend):** https://github.com/justmert/eco-flow-frontend +- **Github (Backend):** https://github.com/justmert/eco-flow-backend + + +## Development Roadmap :nut_and_bolt: +### Overview + +- **Total Estimated Duration:** 2 months +- **Full-Time Equivalent (FTE):** 1 FTE +- **Total Costs:** 10,000 USD + +### Milestone 1 - MVP + +- **Estimated duration:** 2 month +- **FTE:** 1 FTE +- **Costs:** 10,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | MIT | +| **0b.** | Documentation | I will provide both **inline documentation** of the code and a basic **how-to page** that explains how the user can interact with the platform. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | Not applicable. | +| 1. | Database | Set up a Firebase project and Firestore database for storing chart data and project metadata | +| 2. | Python Backend | Implement functionality that can fetch data from Github Rest and GraphQL APIs for all DOT projects. | +| 3. | Frontend: Dashboard Page
Backend: Data Process | Implement Star Count for displaying the number of stars for DOT projects. | +| 4. | Frontend: Dashboard/Project Pages
Backend: Data Process | Implement Commit History By Weeks (Line Chart) for visualizing commit activity over time. | +| 5. | Frontend: Dashboard/Project Pages
Backend: Data Process | Implement Code Frequency (Stack Line Chart) for visualizing code changes over time. | +| 6. | Frontend: Dashboard/Project Pages
Backend: Data Process | Implement Top Contributors (List) for displaying top contributors to the project. | +| 7. | Frontend: Dashboard/Project Pages
Backend: Data Process | Implement Issue Activity (Line Chart) for visualizing issue activity over time. | +| 8. | Frontend: Dashboard/Project Pages
Backend: Data Process | Implement Issue Count (Pie Chart) for displaying the distribution of issue types. | +| 9. | Frontend: Dashboard/Project Pages
Backend: Data Process | Implement Recent Issues (List) for displaying the most recent issues. | +| 10. | Frontend: Dashboard/Project Pages
Backend: Data Process | Implement Recent Commits (List) for displaying the most recent commits. | +| 11. | Frontend: Dashboard/Project Pages
Backend: Data Process | Implement Pull Request Count (Pie Chart) for displaying the distribution of pull request types. | +| 12. | Frontend: Project Page
Backend: Data Process | Implement Pull Request Activity (Bar Chart) for visualizing pull request activity over time. | +| 13. | Frontend: Project Page
Backend: Data Process | Implement Project Info Card for displaying project information. | +| 14. | Frontend: Project Page
Backend: Data Process | Implement Recent Stargazing Activity (Line Chart) for visualizing recent stargazing activity over time. | +| 15. | Frontend: Project List Page | Create the Project List page that lists the DOT ecosystem projects in order of their respective stargazing counts. | +| 16. | Integrate: Algolia | Enhance the search functionality of the platform. | +| 17. | Frontend: Categorization | The projects will be categorized on their underlying protocol, such as Polkadot, Substrate, Kusama, etc., as well as further categories like DeFi, DEX, and others. | +| 18. | Integrate: Typeform | Allow ecosystem users to suggest new projects for PolkaFLow | +| 19. | Integrate: Google Analytics | Track user engagement and adapt and improve the platform accordingly. | +| 20. | Backend: Schedule | Implement scheduling mechanism to fetch and update every project data from the Github APIs on a regular basis (e.g. every 30 minutes). | +| 21. | Frontend: UX & UI | Improve the UX and UI of the platform. Increase responsiveness, add animations, enhance user interaction, etc. | + +## Future Plans + +In the short term, we intend to use PolkaFlow to provide a comprehensive and user-friendly platform for developers and ecosystem users to track and analyze projects in the DOT ecosystem. We will continuously enhance and update the platform to ensure that it is the go-to resource for up-to-date information on DOT projects. + +In the long term, our team's plan is to continue supporting and improving PolkaFlow to meet the evolving needs of the DOT community. This includes incorporating additional metrics and data sources to provide more detailed insights into projects. Besides, if the platform is well-received by the community, and gains traction, we are going to open a Twitter account for PolkaFlow to engage with the community and promote top open-source projects on the DOT ecosystem. + + +## Referral Program (optional) :moneybag: + +- **Referrer:** - +- **Payment Address:** - + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** + +Web3 Foundation Website From 1e3b693818d4e345d42a0617fd56f6bbeb8b7529 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 8 Mar 2023 11:16:50 +0100 Subject: [PATCH 214/578] Update index.md Add PolkaFlow --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 2ac6034500b..3128391876c 100644 --- a/applications/index.md +++ b/applications/index.md @@ -60,6 +60,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Tellor Inc](https://tellor.io/) | [Tellor Oracle Protocol](Tellor.md) | [GitHub](https://github.com/tellor-io/) | ☐ | ☐ | ☐ | | Jonathan Brown | [Hybrid Explorer](hybrid.md) | [GitHub](https://github.com/acuity-social) | ☐ | ☐ | ☐ | | [ParaSpell](https://github.com/paraspell) | [ParaSpell_Follow Up 2](ParaSpell_follow-up2.md) | [GitHub](https://github.com/paraspell) | ☐ | ☐ | ☐ | +| [justmert](https://github.com/justmert) | [PolkaFlow](polkaflow.md) | [GitHub](https://github.com/justmert) | ☐ | ☐ | ☐ | ## 2022 From fedfb2b6a718d16cffa02ba5679a378039e1f9e1 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Wed, 8 Mar 2023 03:57:23 -0800 Subject: [PATCH 215/578] Update index.md (#1595) TREX -> first delivery, completed --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 3128391876c..186644de554 100644 --- a/applications/index.md +++ b/applications/index.md @@ -73,7 +73,7 @@ Use this page for an overview of all public grants and their status. Use the sid | :----------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------- | :--------- | :------------: | :-------: | | [CrossChain Labs](https://github.com/CrossChainLabs) | [DotPulse](DotPulse.md) | [GitHub](https://github.com/CrossChainLabs) | ☐ | ☒ | ☒ | | [Jett Hays](https://github.com/jettblu) | [Distributed Key Management](DistributedKeyManagement.md) | [GitHub](https://github.com/KryptikApp) | ☐ | ☒ | ☐ | -| [NexToken Technology](https://github.com/NexTokenTech) | [TREX - Timed Release Encryption Xing chains](TREX_Network.md) | [GitHub](https://github.com/NexTokenTech/TREX) | ☐ | ☐ | ☐ | +| [NexToken Technology](https://github.com/NexTokenTech) | [TREX - Timed Release Encryption Xing chains](TREX_Network.md) | [GitHub](https://github.com/NexTokenTech/TREX) | ☐ | ☒ | ☒ | | [Blockcoders](http://blockcoders.io/) | [Cross-Consensus Messaging Software Development Kit](xcm-sdk.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☒ | | [Keystone Wallet](https://keyst.one/) | [Polkadot Snap](PolkadotSnap.md) | [GitHub](https://github.com/KeystoneHQ) | ☐ | ☐ | ☐ | | [LeetCoin](https://www.leetcoin.co/) | [LeetCoin](leetcoin.md) | [GitHub](https://github.com/nashhq/leetcoin) | ☐ | ☐ | ☐ | From 345142ef117972b124681d7134ace95b3e59afff Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Wed, 8 Mar 2023 09:26:59 -0300 Subject: [PATCH 216/578] Update index.md (#1597) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 186644de554..e9ca9799dbf 100644 --- a/applications/index.md +++ b/applications/index.md @@ -44,7 +44,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☐ | ☐ | | [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | | [Aviraj Khare](https://github.com/avirajkhare00) | [Polkasearch](polkasearch.md) | [GitHub](https://github.com/avirajkhare00) | ☐ | ☐ | ☐ | -| [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib Follow up](php-rpc-lib-follow-up.md) | [GitHub](https://github.com/gmajor-encrypt/php-substrate-api) | ☐ | ☐ | ☐ | +| [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib Follow up](php-rpc-lib-follow-up.md) | [GitHub](https://github.com/gmajor-encrypt/php-substrate-api) | ☐ | ☒ | ☒ | | [CoinFabrik](https://www.coinfabrik.com/) | [Scout - Security Analysis Tool](ScoutCoinFabrik.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | | [727.ventures](https://727.ventures/) | [Typechain-Polkadot Follow-up-2](typechain-polkadot-follow-up-2.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☒ | ☒ | | [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☐ | ☐ | From 4c62f04a19ac22b4131ca761acabe18fa8651b81 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Wed, 8 Mar 2023 04:27:25 -0800 Subject: [PATCH 217/578] Update index.md (#1596) Substats -> completed --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index e9ca9799dbf..340aeb2f6dc 100644 --- a/applications/index.md +++ b/applications/index.md @@ -151,7 +151,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Uke](https://github.com/Uke-Messaging) | [Uke Protocol PoC & App (revised)](./uke-protocol.md) | [GitHub](https://github.com/Uke-Messaging) | ☐ | ☒ | ☒ | | [727.ventures](https://727.ventures/) | [Typechain Phase 2](./typechain-polkadot-follow-up.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☒ | ☒ | | [QSTN](https://qstn.us/) | [QSTN](./QSTN.md) | [GitHub](https://github.com/qstnus) | ☐ | ☐ | ☐ | -| [CESS LAB](https://www.cess.cloud/) | [Substats (The framework of lightweight block explorer)](./substats.md) | [GitHub](https://github.com/CESSProject) | ☐ | ☒ | ☐ | +| [CESS LAB](https://www.cess.cloud/) | [Substats (The framework of lightweight block explorer)](./substats.md) | [GitHub](https://github.com/CESSProject) | ☐ | ☒ | ☒ | | [Polket](https://toearn.fun) | [ToEarnFun](./polket_toearnfun.md) | [GitHub](https://github.com/polketio/polket-node) | ☐ | ☒ | ☐ | | ALPHA LABS | [Binary merkle tree](./binary_merkle_tree.md) | [GitHub](https://github.com/frisitano) | ☐ | ☐ | ☐ | | [Standard Protocol](https://standard.tech/) | [New Order - a full onchain orderbook dex with indexers](./Standard_Protocol.md) | [GitHub](https://github.com/standardweb3) | ☐ | ☐ | ☐ | From d8f1ca7a9d399b1a2ffc292b8f044935b2099a29 Mon Sep 17 00:00:00 2001 From: Nabil Abdellaoui Date: Thu, 9 Mar 2023 02:24:49 -0500 Subject: [PATCH 218/578] Update applications index (#1599) Grant completed. (note that there was an error before and application was marked as terminated instead of first delivery) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 340aeb2f6dc..869d45294db 100644 --- a/applications/index.md +++ b/applications/index.md @@ -99,7 +99,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Bright Inventions](https://brightinventions.pl/) | [ZK-Snarks Tutorial](ZK-Snarks%20tutorial.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☒ | | [Common Orbit LLC](https://brson.github.io) | [wasm-opt-for-rust maintenance](maintenance/wasm-opt-for-rust.md) | [GitHub](https://github.com/brson/wasm-opt-rs) | ☐ | ☒ | ☐ | | [Salaheldin Soliman](https://github.com/salaheldinsoliman) | [Solang developer experience improvements](Solang_developer_experience_improvements.md) | [GitHub](https://github.com/hyperledger/solang) | ☐ | ☐ | ☐ | -| [Optymalizacja AI Grzegorz Miebs](https://github.com/miepsik) | [Validator selection](validators_selection.md) | [GitHub](https://github.com/miepsik) | ☒ | ☐ | ☐ | +| [Optymalizacja AI Grzegorz Miebs](https://github.com/miepsik) | [Validator selection](validators_selection.md) | [GitHub](https://github.com/miepsik) | ☐ | ☒ | ☒ | | [Applied Blockchain Ltd](https://appliedblockchain.com/) | [Silent Data](project_silentdata.md) | [GitHub](https://github.com/appliedblockchain) | ☐ | ☐ | ☐ | | [Web3Box Labs](https://github.com/web3box-labs) | [Web3Box](Web3Box.md) | [GitHub](https://github.com/web3box-labs) | ☐ | ☒ | ☒ | | [LimeChain](https://limechain.tech/) | [Research feasibility of Polkadot Host in Java](research-feasibiliy-java-host.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☒ | ☒ | From 56a98fbddfa617a7819f7763cae62f48c165a375 Mon Sep 17 00:00:00 2001 From: Nabil Abdellaoui Date: Thu, 9 Mar 2023 02:42:52 -0500 Subject: [PATCH 219/578] Grant Management Webapp RFP (#1575) * Grant Management App RFP * Additional note * typo Co-authored-by: Matteo Casonato * typo Co-authored-by: Matteo Casonato * typo Co-authored-by: Matteo Casonato * Additional notes * Additional notes * Update docs/RFPs/Open/grant_management_webapp.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update docs/RFPs/Open/grant_management_webapp.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update docs/RFPs/Open/grant_management_webapp.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update docs/RFPs/Open/grant_management_webapp.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update docs/RFPs/Open/grant_management_webapp.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update docs/RFPs/Open/grant_management_webapp.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update grant_management_webapp.md --------- Co-authored-by: Matteo Casonato Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> --- docs/RFPs/Open/grant_management_webapp.md | 110 ++++++++++++++++++++++ docs/RFPs/Open/img/grants_details.png | Bin 0 -> 198066 bytes docs/RFPs/Open/img/grants_page.png | Bin 0 -> 336802 bytes 3 files changed, 110 insertions(+) create mode 100644 docs/RFPs/Open/grant_management_webapp.md create mode 100644 docs/RFPs/Open/img/grants_details.png create mode 100644 docs/RFPs/Open/img/grants_page.png diff --git a/docs/RFPs/Open/grant_management_webapp.md b/docs/RFPs/Open/grant_management_webapp.md new file mode 100644 index 00000000000..0f71c53ff0b --- /dev/null +++ b/docs/RFPs/Open/grant_management_webapp.md @@ -0,0 +1,110 @@ +# Grant Management Web Application + +* **Status:** Open +* **Proposer:** [randombishop](https://github.com/randombishop) + + +## Context + +Web3 Foundation manages grant applications and deliveries in two github repositories: +* [Grants](https://github.com/w3f/Grants-Program) +* [Deliveries](https://github.com/w3f/Grant-Milestone-Delivery) + +All the grant applications, approvals, deliveries and evaluations are pushed into github as PRs and documents, +so that all processes are public and transparent. + +You can find all the details about how applications and deliveries are submitted in the [Grants Program Website](https://w3f.github.io/Grants-Program/), +or by browsing the two repositories above. + + +## Project Description :page_facing_up: + +The objective of this RFP is a web application that publishes all the information contained in +the W3F grants repositories in a way that facilitates easier navigation for the grants committee. Though the software would initially be used for the W3F Grants Program, any interested third parties would ideally be able to utilize the application for their own grants program. + +By providing an API, it will also allow for pulling the data in a structured way in order to make it easy to calculate statistics or track different metrics. + +The Web3 Foundation Grants Program is unique in that everything is openly and transparently published on GitHub. As a result of this RFP, we hope the W3F Grants Program can set an example of how other grant programs can leverage a simple yet powerful process to manage their grants. +Therefore, the web application and the structure of our repositories can be re-used by other grant programs. + + +## Existing prototype + +A quick and dirty prototype already exists for the application: +- [Backend](https://github.com/w3f/w3f_grants_backend) +- [Frontend](https://github.com/w3f/w3f_grants_frontend) + +These examples are just an initial experiment to test how the app could work, and are completely undocumented, +but please feel free to contact [us](grants@web3.foundation) if you need help trying them out or simply discuss. + +Also, these are just an option, and the RFP doesn't require building from these. Proposers are free to propose the framework and approach of their choice. + + +## Deliverables :nut_and_bolt: + +### Grants Page + +- Lists grants and their status. +- Search +- Filter + +For example: + +![screenshot_grants_page](./img/grants_page.png) + + +### Grants details + +- Shows the grant information +- Overview of the grant project +- Milestones details and status +- All documents related to the grant and links to their pull requests (application, deliveries and evaluations) + +For example: +![screenshot_grants_details](./img/grants_details.png) + + +### Teams + +- Provide a view at the team level. +- Contact information. +- Grants and applications, and their current status. + + +### Applications + +- Current grant applications. +- Links to the PR on github, link to the team page to check their history. +- Status of the application, date opened, number of approvals so far and how many remaining. + + +### Deliveries + +- Shows current deliveries pending evaluation. +- Links to all relevant information and history. +- Status of the delivery, submission date, evaluator, and if it's on stale. + +### Stats + +- Number of applications approved by month, with the corresponding total amount, and paid so far. +- Map of applications by country of origin. +- Chart of applications by status (Not yet delivered / delivered first milestone / completed / terminated) + + +### API + +- The web app should ideally separate frontend from backend logic, and publish an API to fetch the structured data. + + + +## Additional Notes + +- The features proposed above represent an opinion on what the grant management webapp should do and look like, +but are neither exhaustive nor strict requirements. Teams are welcome to propose their own design and vision for this product. + +- Web3 Foundation's grants program should be just an example/first step. +Ideally, the tool (combining GitHub + website) can benefit other grant programs and on-chain treasuries. + +- Long term goals: + * Oracles/pallets for treasury integration. + * Using a decentralized alternative instead of github. diff --git a/docs/RFPs/Open/img/grants_details.png b/docs/RFPs/Open/img/grants_details.png new file mode 100644 index 0000000000000000000000000000000000000000..c18ac90f08e062452e2b1897ef3f1cdb9c1054e9 GIT binary patch literal 198066 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%0D4%dQVlQxT@e;Xzc%F)lDq7+T4~*8 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

y@3Lw@in{tGVC{6J0r`=1}A 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 literal 0 HcmV?d00001 diff --git a/docs/RFPs/Open/img/grants_page.png b/docs/RFPs/Open/img/grants_page.png new file mode 100644 index 0000000000000000000000000000000000000000..c376cd444b61dd3e93e398b62eeefa5210110b10 GIT binary patch literal 336802 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 z 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

|;jW z0fCybHsWRY*Y#lbqne1b>+PN-4CejPGUEz!fQgHFh6cOvM>#K*b!OFE5Grn1{U0S4^W*Av9+bATj}DV>T?*avv)!7H^H}RAp=Dj zr6IfkP7-DA&PJ1rgW-8HUsiPMxRtY{AE6r7gliLac<;)g{b&c<$1jKC!sOvGsssB2 zSa6rQf?CKn4Vm$X;fk0de-nN6anw*R#PhUU7Fz{0yR-&ZFuUp{hdF->+NcK?6Gh4Jq?XxkNwB_8d}r9E^$+ORLR~H(K~C{ZOnCeWz7A?TN7JZBgek@ z1||}7338(3`~uU!x>r9|=&QdoNoO4?xkS))S## zOKark8VJ6nC2$CFt7~!@#sse&@U+j8mhJfdF;vB#xW?zGjk~>Tc;hv;I8`jsjed$r zILeITz~znjTv(*RS-j+UvFoMEpEhQJ#8ko^lNbG_5;~YLr!fXxgbGU_o#Y8DlW0<7t zz(ieBe-kX3>eKy=oN5Q76EjH$<3N|v#qTn{q#sD&F6e!iFDes-{Y!n_qgvE|)OXw| z6-*7VzlI9;?18o1(Av)u=%25TUFk|+5~;V}-Cm^}C|e*_vEd~&c`U{byfFBld0go0 zOX4^Qa59b~qR9L){q+X*o9;Z3&K2|hNfv!?bZlzKrGqnInyl9_FIc$!QH?{J44p>` z&Np31nsK8Xt@GkU*r&eLEFCMuVD4F{WIp@3X~2*7XMZv5whn?1B~xr|ne4fWc`qxe z9w8a~n}5*8X^^dy?h@nc2BkMoX>8Q>k(ZB7#AGui$nF7CJ_(g zH)=e@M}bY{6v<6Y%Fy&Rxq^7k8Tr&^zHu_pzDivq_sk$kLQ9XT=cXAjo+GC>L8LpChzrNy0>X*DaLZ+3Xo(wKUU6aKs;O7`eBJ(&%-+N;%Y0Gk z)ceC^OzW4g{A}m<{s8(Mq=HA7c?!d}1mij>>tx!ykTK=KyJSxI;d@FBt3{fkeg*eh zREBVF3lD+Ef6f+L>AbT(I{LYWzndMUQ#6sDF_EuM z4Krq(sq#%nrEhcMj`Bp_^Pc(2F#QE;bwQw(wWJHhyB$zJT%izYOr@M;$~!*%QV*1K z8UjV&sEImbavRm0$))npQD4-RB>L{G>eVzgH<6~J!)rE|-8;3zjn!qN#-Z-8$dL4N zWqd%%U?^Cta?+USQEUDqH2H7f4G{L$(8uqX~D z&$|psXQW3}*;qtg_5@&LO2Cli6q;IuFryiQT8_d360wrbnVko08SL)QJ4^!Yd znYiNrHd6%gIUDj7H=I%F{Q?u!`t4)heeDE0%c}+8zUIq^*AyFgN~Uf;u3Qi`cThxF zAV*9Rok~qWO7&7DN-@Y}L55>+1w3F@<=?vHMn|^Mu3dxA81%4I;RShGwW=+sQc-Y> zPRcZ!I=Bz7tPLEQAGmdTI?o24x%}Im|L=MS<$xM?j#MRF>Y2)EkC&|zoj{#1-oS&* zh$B89kYC+qgD$J_Ws8p*itL}hPUMJ)gNeCl+{ZCI;&E04%&vicg2}K;Y@JNu^)T6h z$p6B?532)HtLU-l6!{`3l)|!Y5U(8=wTs7%Z>~paSmwe*j*=L*$9&?H9%AkaP9l|n z4pIq_vebtSdxmPko1C;f=yB`KS!>$eY|I4hAi(X%`i7IuLRLA&AQu zfVf+>P7F++^P;1iPKXM8V`G}Xus*UJO!JrQ@G>h7M!#R6?dn#GVM|{Q# z0vj*x_|*3o7g%xK{?^L))Yt&2?l(x9Yz{0jklb-2Lz#K@7uQY{jb@c%NawFa|my+fk+RSGVn8wY3u|C_qdK-er&dzd&Am7lEXvNrh4f7}e|Y%yrSUf3bec9zyMO-qTP@6WTC z7qRLPX>Jsa z^&1vkx_`d=mhh>htXhYm%?dE+P%Mv5RxbdLXTyC;xMNbf=fZwF^gA=py7_WLn)k-M zbpp0Iz3`c$r*j#3ieyhKk`fH8V~rq$ZB;*#L+MIM-N;s*3TiruU-?HkjAy9mO{e1JmZ;eB!-^M0Hi+hDMuo|D^>$#MCMunEH_`S0p*vkY&QrTu}?GvRin#fA+{`Ka4KO0B|{?exig75hKiXDSi&23pp z@2($b4@7r=`zrnOg~w8%Y=)lS!7Wc0Qz)bV_u<|98LSF zd+_tk`_|q$6aDGUx6dJOraAIS=p=i6+rc`XpD(<90YQLA_>YgSHmdwSO~RFILzdcA z-u-C58VC-L$uyx~Z~p6N=jieGku^-e{mIDHNkS|3F5$-Qd>6SZIH3!Uzsz4%?0e0= zCKoF7<757?TBpV&5CFBIge!3ZbzfI0@7J6E{@E#P@>e+*JVN&OOMQw8wm$&*{kfkd zkHDnw9RHs$q*6pq1ss(1?S-~KEcJuSyL&BpUi^J!hF5SiuIax&lX{t2fY5Wh}HDB7yZvs{^uzFbCmx*eExHk|H;br|77L=l{5ay%KsrN??||< z?&G5LX%%pC2CyLeu#uRUShuDIBO zw~V>?+@_L!F=E#4^1ohNt8zwNvP}v%f2q9J?Eif2f4!aTpC9ng3jDJI|G!=V*2NBZ zTG1&GiUO^{@%TjcvDYVUV-U6%l6zQelDqCu)>bq=W zQACr-${+r1Tlqg6dNL|yZ=LxhRNuCFJAa7DUlTAk zO!N)-74E<|m19_{JIX&JnfKt4;JHO;w0#1ECuc9xw%-s565(6$XdZWx+||*}divTI zljrV{rTQN)sTld@FP!~v$sz1L;pGaft|k*kTA4L~IKsW9kVyQmD{}_!xC&Z#)iL8* zo%NW#B~ut7o;&~BYx;Gampzd++j0}q(iR9w8(N(QHt#WKcImsdHe9TwDT#`-1f}}k zHQlD#&wO4NgoB!Np)RA)x8R37X_z|HJQ`I;)|GyC)^OKk6^zw)%m!u+SD zf2{yH%wVqkT z^B?ldjhEucvTv-sq&5>mmVF7h$9HShLOtdx^P&H}A{4JDOJ8K1HDzpl8${fh`lr=J zmc5NBnA1~LX*xFd7P1uT4hP`rhgCJ?Ka<)^mK&We7m*8RJ!$wKe;74#qdtFmogD!; z3ZKb&TPug=zkU$6cX3nW-o|pF;{4;yhJW~cs-9fJ^r?(T9_*?_3*CLKe(l!3?gyFi z;Wh`oruI{UAs?$W{?jcmev06L^8ynYDZUtTi^(HVx86MU|MkU}%F{up2)T)DCU*2J~!M*V{P^KcmqKlonK$9wcjBw(oRrH!DxZ+*1yA$|HcEzpJL9! z0=FFt*f2F=RFUo}-j5^C7##Zb#a~GNb*Dm~<@~3E@Z}hCh2)t%hWjj z>x5nQj<~ElIUBKoZ&F)HKWOEmAnY{C~F0zqZjoTjo!P`=2fIuRZd=4%RZj7 zyR&JaKg43KEmgeTD(67IzEOyDC76Ba96>XF`{n9U?m5pHN@T+3Gi3Z$%{_3`PR>F1 z0*@0pYgrjgh`exVV=U=O5413djyDV5{eVBzb?#09Raz_D}1PEMx+7Ml@iYfwNQeg@ljFS5hX%(1Jd*+#t@z90f&aNET zSt&R?8(P0qNm*`PY1TR~8A=k3Ob>eo{wYze;<3cg)5pz3Fsa1~D*+zK=6Hh4AXrI9 zRn8N*GZ=3hkAo@f&Taj?)7SMkSt(w)?@DdEXhV zl-=-*)KC0(U`&Ad?xhn-;E0h>@Hv|aJw12eA%(+lC(j!&%)*sl{uJy5rKOe47Qf`t z+?RZY{?guej(kztfohWbZ39daI?DwEMUIv>9mQ)SUV{VuOyy#3D^n|z$5>H^biUQV z;6DCKi_y*I6?-$Ru6miTFHRruNW6Rx!JeN=1Z`u_L(!pr6OgdJV2czhPcq`3%VIct zuAycMOej={ht;46akI&3X>)m4M%434F*e|IE)Nj&8~6JKIo0iNf{I!SXXrWjJP~{a^>*)F9wwyp;gBk#x3Nn zE(7F^fdJ34Z^vd(zy2gQv7D`=)u5w<-jtBH>JFRZ{BM|V}y0n#Zj&s z6?$HxNVCyna8{aoHwU|WfK#|Y|NfjmGG=6Z@gS}FDbKYkhI}v9jyP7cNQnWxFKkDQ zD4-r{DAi^vxQJ9|EC97P)sn6=s_0NA@gsg3Z_<4uNZ;pIaG4JEh_9gdLefqKTOqX$ z)0uzOZn&L8D5t^T7h-)*VF9j;t;m1^3=5rf0kmjRUraRWm0#kS=7_UaHNNf(o%x@CftrMl6p)d-SCj&}TJm5f5E~HDfoYDfz{y zZ!wZ~u1>W=7ZshecyuK^bPMsoI)-ZY-hIk^n^A?BmH+to?FKxJOv?H!%n+D^DH1%F zcGiYH3J~MjGsD1(_lzu0aH)S4fAg;1c(<23B<+QL*vx^C?R&!>BmG84q>`h9>#NP> z7Dt#>KXMrCthWs`qLymS9*yd>x*5xvq5Gr_AuG zJs*$i-{>e<=~0~*ciQAzVyIeM=J48{)c>2(4Kd%|{@Pc3B;foGL|+4yej>_Xqgj46 zx}+=1v>bU&QaBAtny_QKqQ-ZwU)f&@gX_K|s|(h**|sIjmJiGmvia!@kL6*nRLmv~ z6tlX0dM6gx&T(rye|i(5x5ux#aow#!V(0065VO$^F8f^rN9!}K;RrTSMwOx?WixZ^ zyxN`3N%8g7OC+LGZzbJUi(-8*Kal>PMQ;qd^^fTLPhq;fmv_VYfJWGZI@mQyYfCL>blW{&<0Vv zzQ=OAKg<&x|1@MtP}+u|#*CP4=UEucDELA?O5tKo=Df--?`0E=K7Q)&^#Pce5rPTB zpETni_%_DX${pfM)q`{jzOUaHSwQCRdb4vi-eqOwN7LMUArmCUI?>bPnFob)LDqxu{j?lqeC<-Kij3elr}WQ5bIri$L4w|S@4cz5HO*MZ_r6c`ORYR6 zwFfsQvw2CL!OW~e#`)CkR~@7@)W@dlhW9L8HEj+UmjY-rB-8BI5pd#QZhir0wniJ7 z$&m9|v2mWJbqFD2Y8(+K)%zzGeb2ubd(CO*r-VZ$6rKe8zD>^QAKEEjd<;*x@ZS}N z(Mv0)QA%qW`rD@S=NBVMZ?JxN`pMwPV&v?*MxL6*^j*};+G&`l#4hvE&tZ_cxn{~= zZz<7$CeCs)MXxO=@W}pR=6yEaUN94gq8XXUqxdz_a`H};22Ws@@Jh%-PKTFM&`@>< zTIqP=Q+JWBqngpRev=1$3TFluA??v3-RTEJq^L&Dya6`noSjL&_Z3_g=4gUX+n@OxnSUKP7)M9Qca2OaI+= zn()9bbopptRfUX6)N)X}Dv%RVzjES?FQ%9M(?#Y87)>c*-T%XlySc3CqCkAm@WMp~ zlgR2t)}EB@FVpVfxq3F*j{Bt#|If$~MZJG-B*;=iP1!4nIkjw8H9~^4K8?qtrK6`I zmkk2Y!1_NyAdNd%j?H&Jk>UtIx$eKV`RooeKRS`fqc$fyG@LiD?dISkhOOIQ0V?@> zDrN1CevVbgzKCVD&fz-G{^g|AN2c41p}rWGK>VQj2+Y4af%HE4(N+%A6s37UZadoS z(qy;aMgn(uYd*+}t{eiE5)~?N6@EbJW!su_$t zxv?G0C?uy`8lM~)ePOh-D6yOC9PPg&c~T5tDz|xGWIu$sgq7w{j|J!+Ns*(O6ciTu zC?JZLx#>JEuTK-zSf~@F6cH+PSeBW4uZhbuuu(xM#Mdy2-L;sUi|^V|JD!9uH0`hG zR23r!H{Cy*>5m7m0Xt2Voq$*^OyYk+_qh77{BN&8npvnYrwVv!a)==WyE2EUY~H+ge|7$0(~+Lw_#^qSGo)xZ#^b6bPSmRo}7mC}u4}{F_*AjXHA>oLY)iFmSX611wDk+WpxGFsbI);wc26tM zi8G&9W7j#x0P_Q;na^~5_!uLr$U~$|o#G?07KXG-4AU*6LwpGgYn}!-$(Dy7Uw;(Q z^uY5;vrPfTCPmQw{mB?HxeucB(|%Zw=g$(!75U6Tj|W~{d8bf zX-)b3MXbr#ZTY_w3?HCk<#35-NsiW?I?mz0|A>InnH_pgw%aF)*?=zJ`aI0=F@B4- zAZ?_Wg@1lKTr{u9_}<3fN4)9)91jd#+(l-Hb38YZSjh<@Kiq5o18Ky+Gh4Q5$y-I* z!S0v3>~N3 zK6LL5H6FdxVz~xAn)2}$%e&?!f@8OnOJRouVl?5oH? zX87g*t+xnBJ`jHwS^Ax2x`Ds@3Y~QMw!y+nfu% z7g2PP%*%?Yqxx%C-HV*J0K}08icGv_ymM}ad{L&9)upRZj{<2OQd&DE;XZAqf0TK+ z`YHqOVM(3X?Kci~Tu(gJWtfl$DENEoS?*w;cq(ipMYERB`P4lk1Qh=8-LBLru=$(| zjq2pW9=4&^3$6}uZs%gd7_twHgXcJQKnJUsplBlN#nNdQ%1yM}a9A$12=$DxJ{}bG zBt&gYBH+noQ`g~Uq#bU^_4%aUhUvJ3&lB3PYfY~z`djpGNBLsZHvhWdS!Bbx-8c00 zN1pAgX67>ANbwUJ{jL1%1IJ0DZ`Kezng)iKX8#hLUR`}cJ2JlN_k_0gnmb42m5q80 zN*ke#kH{!g#X?lbs?W)tIY#I<1?= z+hm(oQisSV#Z*q))db!1>r`E>0;RxquY57&0E}^<@_-T73mt>Y{+&=r?i7;9jVMNl zt@h>?1}lUMe2Ye8PcQUmOypUf0mIO9m4LZZZE*MpoZbN9vSz^4xtbD#7;1YgdeRV zW|LH`WoAPO@F&jOvdt8?R~oU@{6)5SU+7#CBcnpCqtbGHF*ul|MIyZ^G$TVApow`=OM2~+4+w7VDU?R-YYLaBl`0HvG-O{RjuzIuOcdqgaRVnNQ06BD$N1}l#&i9>26W!l4jA; zAkxyIba$tK#G>CC;U`^(mPkz311lM#1V~BSpWTi3}6FU>{ zd7N#}E~kcUR02B&A@O7{+YPW=%x8K>*WXRzOKDk+Z@wfo@IArpq^6*|g9}Hg&%9c8 zr0GhXEUBf(r0&zlE!|uF@}tEE#2#PJ8{3ua%sV4***zIFZtgFgFxCuz0wX18)gZ;B z?$YNo#(YE&t#>zzi@{4izx%=r10ymEI~y=4x*JElBU`zK1h32y z0mU}wDuq3Z2tB-N$uQD$#X`&6bgK`K-ML}<{yC}Vt-{wQ*Y2RRQ|QX%k4y8dhi@jORz=!H;D9Zd>2`aP)*y z&beDU93dek6}}B-pfONVJ2+hcX+a+sE|D`!m}yb2?9@O!-OG+85%<2_EZ_ddDowWp zF+;P1Lgkf%pzLNOWlmPX1Ki@ zD9~^nlP-8Kgo2=!`g%HzjQ*Tmkpj^MYt5CQj_|FgmO=HcLWq0mRz#$dq_a=Lbx!Hy zJImv!qcp*Kq9*+I1`m%83D==Ai1h0Py9`mfz!Wh&-!-Z)c$5Ii&G?$ou-A8Xg2`>& zH@QPx#wLV*Fl0(qRu=VVHcQw9kqKxH-x~v7MbW&8i;8J&G>vye>9xOmOn(l`UxIFS z>f8LB&TgC3fK7>fFc|dR-1#2+XDlpyjt^BNb-6z8`O$)|APpEx;=xsfzRi76qvDK2 zC*e|GQzXnrttz2tT6MkTGSAvgZZpa40i_EARDZ@cfXAZ#!+J@T$(F0R6vi9sS7ldj zBm?ce34F!I+-^`fqkv~=*)ef32pp(Ou6*!$lz{C9Tb3q%?|D=8EB(e1 z!2+!kF#eK_%GpA#*?SVgZ`a3A2jw~r{}LTB%DCeB=tNf9V5YWA^@CP2 zZ&#Nht4$_a-9@hSxs1Lpvbvb3uU9h7w+?qNVagdDHNtHFS`R7kPOGh&R}}@H;@+M~ zO)vY(h6}%exK<8a4cg9D;eulbQ}q5~Zzm#j;rm5$9WgD(zMz=c!qg>DT42P**K?yi zJ)~ioL0A#G>4RV;-NZI;>0?)~xCO~rO4WCxicIlOB^)Vdn*?*S`g2>r;G`nqZU#^_ z473pS7{+HhcJs#a(4BuWPU$begZtix=m4PQ{HOtWQ1-l#NqFr;<98Lp7a?&n1NK-} z#y4WM-(VlGn>}R%z~^-tYm5{Dl>?n1fGZv8{s^V>_pl ze)WE|n#fIu1Hhv)m58TEtx_+~qO5o?q>ZuJLH6h(%kDnc`&Rr+%ePX+W-c@wRxPMw zxe0>G)iGx+WOf_sqi1K+Et4ru2l#T?6f z>Nm^S8mZXaMh(J1O?>GS(x)d@;?3mgT9kNnN*PsfU0?q0227~H z+TWMJMe|O`d*zEz^)@GNnOu@{3!R+@Kh!&%`0k988uNROR7m^?_WC}9^#==JY)AA? z!rZoinykM6YUZAsp^ebn)6kf3d@?Wbp2~E*0T?fyj7$i`{hTn08?UfN*V^wuM{I9#(pF5$hZ|0 zYg;2tD>TI}t+)XV<7T|K`E&S|4pHy5pWFqKp-i)UCeDK5VYN?i>XzCE8-=+?wR&4X7K==BhX z>UlE{>yr6gA;QVCk9ELa8=NF|eTg64#A}v`7oEm$$_nw;B^9!fYyk7S{$N>=8fKOE zv8E}PzvQV=4^C=w?+tzY^3goP#{0uM|7|Ze1BY5dUAJ84fJPM2TW%3}1MRCThcHR4(T79K4GhsHRNm)W}mH81m_`ZV(;DYn1?cI zNB5TAsz_uksK<31ce_yIG-aZE zHyND%29g=N<%i?q^JlStt zQ@zPuk~Wal+avKvZwzRGOmL?)kF-C2l-DtbNya^8tB4abU&((b%)Ni?8cI17*GXby zmIm>FlgIN}_^*9J(NAP9Nmk!EVL0yGRkBL+mGy%y$QO)q=h0O70fQ`BPn)ZDabCpp zF&?~qWCplDS(w}po8m%_;Eqy!L*!JOjoCN+)^AA!7b|0&RDC;u=|9ogL*Hf=6ZT6N zc=5v3tte!nZe9^VMU@vJtJ8M;c0c3Xs&fZNPjoPd7;hl%dPm*U109(I;`qb`@M<_c zsa=m}1@0R5N`|w+o4gMDFS>L>T17D8D;u9&vJ^I`_&y3V!k>Rrofu3mIvKh9ifNBR zakJ!>c-m&v6CtKLpF*Li5#P9$1H7eoJXzN^<$1)z&j?Q4oPr#A)?-V0qmpHC&^ZbE zd`K=2q9+9Qm^t~hU>tKcjmiTv4_4ZYURd!7%yk2SKeb7bWv(er-p6r2=)=I^1*-f^RWbdtZ;#xETEGT~C!a@+$I}_V zwO+z3cI)H2H%}VU2H4vRziB+jScU0D@_lb8jIn1d2nIhJxDtBf{V|LQ6shr2FtIeG z`oXfjdu|(L2%ow1TyJ2L&hw`CI6dOd^Mi$-cb9X%55?32aZ)S!=E7ctdQ(?47 zS=Gq$*9m#&+F&0nZ&P;Vc?k9S-zftbQCBhlAN^4i#Fn| zZqw(Xndltw<{acZ6_}zg#66f&R~r=`gk}ruSY|pm+eMSHR|7f3aaQ10C7Iu3@9=|l ziV1%xUXvtaYLQ@C=<}Li6}*tv?iI;+3|2lWw-p5RTbByeCJ-N)qh&Skq`4wT!Onaz zu)7PavD^j`T70p(2yrvLH27Y5cIC~6WhyG7cVirL+ma;ZW5FT{!7omR%dHBPnK}h? zb7m&@SY{YP{bF?DHKQ(6=2{~_Dzt1WQ<8&tb11U4u|i1Z#@v~Vda-NbkID8xrovvI z4tfRr6N`>*r5nrIgD$}fAcyT*-^pu5g3zlIp~aOSxcbDX42pHYl>6K@H~3%S(}_u^ zMBu^sXs+zIv@N?^iO>kPEE{dVdU=vGe}&>KIP86EmW=U7nb2kjRWdW0cDCw%vj@jc zpsX@H$Xnh4BqJF?4dS|T5Lc)%$AIhpOR~*OKN!ZN>KXS_yE8(+2iqZo5M{Rjq}1)z zS=>ScgjjMVzx%<wT40|Ng#9V(|Ay4OXk?WGjzTO&AS&K_-Z>Gg8Vj z7Kd7JCp2X5vlw5FJg+emEr%7|bLal`s(u#qJ!$=vcT^;@l^rI0wUfrkbhR!l<>e@w z&zFt9SNYTRf%S}V(A3n5Z53(h0!7>H0r*03t%IRW1hHmE4p9t zJq&v#QRFB2#7bkkP>WLWE`4B*Bku_uC`qOmU=wY}OI)Le{GI*2bd1@6T9XhrBOTan{&v zHfTP#`n66|guWq0m1Spm+(=-%in4inClt7gxp@AhL_@gInvvdi!#XDozP7B z6NG5RONEpYIr7fMR#DkI!e#lg&lT4A7rlTVBB_UwAc^62iC_x z1w;gBGC69HOLZ&qs%X#~rpI*2u=r?6Q32FUO@6 zPxsL_YktxXW~>n-XCL%nSi)rdlmRo!)=}Quj9Q-gh6V3qj&bBRAck6^z|KXvnpsSZ zB|gR)YP>o8++oUF5|nBm9?n;xbyEMXgPsSO-3oq^i>TdeOV=|*v~9)sViCD4ARC3( zfYJg&o*lKIQUMEU7dSQ8xREl|o6UBYvO%lm$s8L&PJ|}7jVWg5mrfsrS#~*v1i#ww z5Adqe>_1R+tr=P!W~Ib4hn`1=_*Z9+a7P-bLz>86^M+Wf3 z9Z39--@Ijd0ww&}>SdV%Et@xA@axjFmQXzIo$-8(*oS%}-9|z` z)RD+m5vIt>7t9D0M-ao<^3}@lYf2cF%!SuYOg@W?0w+W+KdtO`h2}byn2*%NEySiP z^rt#k(r|=+6`>q>j>dj?#4nIF^1M{YKdJ4u(A_4t9#uN9!c0bf9()LxehNG8Wov)0 z-_;s(yT#~ebWt>i5538Lkexf>i<$ITOhGDK1=7HDz*K7Hvvaw}73#Nd?FmZ_zClc- zXjf@UKP9+Z)=Uvxkxc1JEWIH@>&+hsuTvLhmzjAk9jo5ldWX8vu6@sdXW6kO%nznG zbYO!P82#%2>$8&6PuXQ9$+0gIw*ZEHMGvo!JtN{nb9E9{+e^*FhqBcT?+;~p7b5I+ z&GW%MC`#K_O}&3`A9lZmH|pUnf-i-=)4DD%{1b#DF->v0C@~uX30EB z3nah%mKJLc%ySdi=Q|xB+|@oJ8~9q7EijGT{07BGT_Aet`-v&fz*&Y_d}f7sddvG@ zXMqkZpLXt8%T(#i&|B@R=|VBaL4+hpq1n2KhhdVL*~ZHR39oh3EZ1~Z%_|oC^$TR( zlAyp;k-yvWStsTrV_di&ENf8lhK&B*5^VB~7sq^w3|>6us70J{NM30)NK3}h(Pam3 zjqnfN*xiXxX$+88(CkUE)d#u;ya>dbYgk6u z_c)9w@%$zbB{n6B%h8E2isrbBDWXPGjtSFx4$v|oQ;=0042APR%LFLS8-TYqiVgtg zwZ`+%@GAuGYT6-HSPZKc4p>kufC%I7C-Y&o1G86+(Qs<-rXcA{QcGJTGdz&u$#)KcTlTai`Imd%bRI+shxKB)f z#@|kW(~83`V?FmamZG3z0Z^e?H@syw*%seA0yQDlJL|w?xz6P9t+}4W#+cHO#+Z6;U`-?tMou*m6_k&KT;wVA)dA`bW&-ca8C6Iel3DcJn6+h(ld$REU z*-2)9-J$WikIOh3n0QPHiQ6#h=k_{$=QaL%O^&<`_Yr8WAWZfnL4y5!`J~p%kJy9~vtavoM+E;kczpk zeh;WPYywja4=%-Xk@W_N9^{lwy` z;=I}ECX{%q$%%v9cS@U3=&9)<(G`!_yZRw+nR~!y^tr@opNziAF2=d!F~3~q2E4QR z#`-mhGI`l@J!IMp|1<%Fq#Wa`g6~HX9gt(vA(HXjwj?RD&3rJT9K9_MF%wXJlUgML z?;&gTR(%1e4!j+Jks1=1*3a|d%6)@pNVuW{3Z&V=b$+k}q5wA)`4pm%DO@;D5_`hE zCEf12J*)mq*;&^Pi7-1_jzW?fGvv+EI`1jO9x}D$^B(xtHSd73<1aBXzA@aWp zfWuvQG$nPpSY%PsqFc|fNX!zZO8K}cVN;iMg`N+ z%5vzJN1$JaJ4=0d@E7!ks_H;lH3{fBOa&D(vvL4zy>G`jJ9mR4hc0%-o6Nnr? zo=RkOkKI|jddq-UOhKPHeP7HHL_Z64u4>{Sz!Ztjxstx<6py7a&O|ei6|Hna(w#K z2>rY+`k`850U(4Tszo`1s!p8d$(lhcDc;6P$FZ%+SMy-xK2)GK@eCH-)kRcjDN~;% z3X+@3uG!@`AUxve1$+ti2v>S2d!aowurqq?53(Hu!o$~!Z+`pT-zww%Hqi6_k4-Cc!)e9X)U1nxtAt*3#qVl5+C$F)D_9DX5J z3csc*ceIAeqa+UCz>2?zVYna?|oLKb-;vW*h`orNR5#lNHqfkoGrW@phXQnYy znQ?^DWD9%iM1_>kCSotlUJ;!Zq&(*&t)k(OcM0>U=;L5UJkPeH;~)X`aZTF? z*Z=84A!PNPA@bb&c*pI|=X&wUM^r7MLnt_s$mfNypDPWS0&A} z;W`5yhW9mU-xgD=X&IIidi}Ry^brrk920~}1Ih7;r67?oB!cgQ(G05PpZw5m!(L?x z*%_GkmV6lMM)j#Tl8O(MXqIWP2 z2`D8jp^@}sI4K`^cb@kB=}k%X8&6q=EkkDbsl?b;@Q3voZE&gK49vEHjnvFymvi-r z=lYkD>Uu{{yp8k|&Qj;S*33#1Xdi{9|C~*geMqA49x=jx&SpbOXH*<*pCUU?kwT)2 zUG$@8zs1Ih?CREo>-aI6zqi}j`VX=t*^9o9Un`<^hhR(#Rjr_U512xhX;hg4L&Qtb zU>frYDf~A1nN7dox=Q|#+5CzCmXKiu+agQJDAwGAunmceV6~(DIraJ&!RUw#?nMa+kg4)9u~Fi)X2_QBafjc3P&sV&Q;lZEtQ5~_ZT zH~MC)jNqDnfd`i$m%{s4-u6zgnncavyd}G;V>QivPs93i!vhuP^QTF3$^bMz_o}m; zY){pC{RIoMDjdyAzrY&WYOC~eHOiV6Wl0q*3$YK@uNkP~!7KeRFPwQpjf+gF*@G_h z+aWXRA!^aUrUpwR#^JvOg%q2yT8PKM-enz>LWH05*};y|AqY z{EEWf3!OCj;BSP{ftxt<`pJQ#V!Fu1wz29_6TsTMR=fxb3K>H5>s5RcG%def7kx=x zD^{;viLs6{PE;~GH<%pQ-Z(Q=GWEF1;Ik4Lm)A^ONsV|Cm)pR$TNJo|@K$w_aSte% z8*Pn!nnqn*Lmm>ao6miT&~a?C<348xt+5E%cf&KF;N|VFf){YhXOVdnROr1I6Jw%Y z?7bybta^N{gI*$#`WXu_-Bc2fpR}RLY*OmBYK58f3+=p)W*WBchfUJ@F`eniu^Ls7 z!#rN8%I2uYM58Ck`5-U4Z3Jrv_cMB}TTw2}(cY1LrjHCD{O5Qp4NWI;(|Z}$y#;^R z*a5rW`3?z=F-4z0o*fg6pryBO@WGv0hqqaX!mom%7()n`CF)M2m&QwIGYk&*n>OJ| z6-KGyw24gc)X45=h?w4#A*1g<^Ckq1{??!7R0Lh9-@F$(Gv7&nK)vI=^bm~I4wA|R z{WZv`euonwad)LG2vV$XLXkF3!B0wp88Ti)7kd>*Q18kTB}_Fix7kuoW zQ8RirXC&m2@?(~Rr2S76ZUK`fxrpshP92^c*wX}Rdsh4z4|9>8{>+Y*5`MKrhCFG4mL_a7rNi!&Gl=( z6WWZtVhd8}-%RJIr`ms}*zLkex<>pySqdii7;`LL3uB9U{BAx=kqDgr$mn4&X%!{t zXD1)$(lHbc6;ix|*#Zkzdd)dF;#e*<0T=Q-?X;Oq>2PqR@{0Zey( zCHNYQ<$_Pcb=wmP1>I9EdQBG`)nHoqfvth$X}(jJ>78==kd8)iF-P4;#t+S1Ljn}U zBIkY#Wn1>oBR9s66oRG-2KT6N27=-R5yol5B*J~a(0dZMR-Ug&=+B*gZ*&1wie=oY zviftF8LjiOdFFIB-leoop9iWtt(q|4ozLBkY295zdaRTQTd@5U)sdUi9&jAPGoy4V z74dfgvm@otSnUo-R(D$ZFr|{)nGjgA&=ww3ksV98=+`^OZ}Y%KXruJrORq&41UvY%!KuY^=FTlyZdvK zM_qFQo4A~mR#y3-!l|<@;6B`+3221ZV38w?eF4s5P*Q@wbm{ zwdPJsl8ms~IpxM>?}N;`fEoSpQx1pBx5TIc2>LUt3h*w4f@1snCj1xM)#@=%uzGkz zwN5UQH4&AuXP~?(t4*vSs|pl*-2O>zXf9#t7Nw=b4h!OGv&2;aEoJ^5R_%r6xAmQn z9P!1*5w_8=GbWEM3((Oqhs_@nh$NDN{;g_9Lv)*SiWGh~D2;X_cNUvf@xT&idi@Ez z1~wgqpm;M+5`$rIX2*d`H|kaHi$YoN`Ik`pi_VR)Is`qBjb~TF6WC|5n_~Br3f0M0 zI{hBnt8BTk)nD@*YQtw~m%vE1dUt*1I%YTzlaBh$hQ}QKcr)0muS_08c5$!dudc`C zavBc16D*rLZ(fJ^4?G-b_w!w>W`DR zrkHugMyobK--O1`7P8y;h7wJ0pGa0{CMN|mC>*(}mCNep@J`cx%RF4kTV9f7R z`iON#HO4=z$H6}KxF%=N20yy%-vYOvRf3vXG-*P!3;B(IK~9Q(Q$^An-gu}NY=xlT zVEHat{v|N#E6`C<3>+jhZHmaoXfXY2jpY9YOMjJ2ZbR6TyVzYDE+BpC5Er~T2tvf= zg+xbl5Gfl&yd^JP(Yx!bhF$c}02c?!A0QJ3uz0@H#>@qYy!Jkq@!7Zl^6v_;Pi)^; z&i|lt{N;xH^RDC)fdCv7_rAOs09HoHPXI@1VStw7tk*1P#t@Ug1n_&B>b-PUv$a|k zD=4hyi6Hm`H8QYA_VnCjYiiS-`yLSPLT9pvnu?w}ux@#?{ zc99G;6(%(hFVcN*x9kYS{Ioi+cb_E}RR5t2bIr`tH|)tR&$cJ_!96M%xrBaWxAxM$UfqjPa~yk0Y= z8^Bx->~@knYDOOqOa*^UP;$32lHqh>>%U1z<=IV}k zJRG=U9s2EH8DH&il_uIOsg5HXy&&N5x ze`oJcN{nK@#mM2m57wVCQ)rs|aG<4_@F+1c7FaTUHQ2%T*xG8q z_JO3FnLyL`ZK3tK-ytD3CeNE>u56Ivln#irWB0f&a{7E3*M0O8BZ#?gYGd%%;L)F^ z@$csfn?XFnFYCfjm0nXSHnExjrB%pm)Bzo}IzTun=g9a^dY%qyCkQY?@2E5MLKzdZ zdJ+wr1nmC=RB{dGcSSP%`=|f)CBL9TEXmSqn5u=qZLQ0?N$NMD>{aFO z#DDwV!bqUJs*&4_>|v)^>6nkmnh^?GLYI00hh8;UnBqb zuX8B@^flLrFD&SsGWYL%QhGK@XvQI@hNhIC5Ls_=AbLhx2O?dI)AG{&o<2A;4u&>xS&h2VgBfbmsm8WSPnc zCIxt9S)^Bo{|=djA43m8N~}K39|FL{{9!^>%kKyFii42=5O6`Q_doeM|MTylqJ%zy zvWnkqi0$8|Lip#7Om#+9Vf`EL_nCGI(0OZ|>d^4}C)je3ex9H~D>&LU|KqCub)5J?(}`Ec=Pm?q z1sz!xE`JQA8}iScxUwsHRQh|B{I}Eop9S&9f%ngX__aR%IU#;;*?$(qKMUfI!{O(- z{Lg~;|L%e~X|p&25{}~K$BS|N?%Dvlr~?XHu{)TGVJ(L@-L^sW8yo5rLYhzou$S>q z^8|bO9_OYiK-|$}!rn!XYUc;QPGOwA1g=a2ptK24ekr>9bJp#C$&x&8DO=+EYf9(e z!%?2IkV%VKx7eiy+OjZ@Y9$EyzQ4KVJZuYymFT9qg<_*lO9>4Cjy7X6#%M7Os9CcG z4Or;Fc{AbxHKF5V=Kyd<2I+Mc0N};@1pD#q^Ani+4q$AN$2%>;XF(5uyJMTQCP%o# zkeecSezWE;W2aDP5cyB@>_5!~Pw$^V@%O2vCV&YlHs9x1fld}5Wh^4u05)@bLip!`J7)C3H+yF zrC6N-WXU;XUa-tBfre8M%oh?^H0P!LVfC8&mi2GjZH98_YX?_2Rdzs>R@Mgq>z1Hn#+LPCR z+D>;5sk+X8=_CBt_w~&9Ij+B1OVMk$M)*PN&_gGnZtC+Ci#ILCBp3%y2+vmE0QKHm zaWiMMfa}CO`|Tzf#%gY{tO}^OZ4e_i!v{Xw1D$PiKNzIS{5?9N2g+E?0)8bHXx}IE zN6sOrJ8Hrk#_@oFq~!pj(|{|@grj*>PtY74(86d}3G_Yd)1x)j23D5AgVu zS83w7a9@j8r-pmlQLh{-N^~qCkj@@U6V#WB>YUZI0! z*hY2cZ(J|W>(Er*ncQ)#0p$kQYBw4EU~An_krQR1ArP^}_91m%e*dT%Xo~pD$B}{z zJ!<}L1B6v90GL%DQG#>jXL(?40YUg<%Ev~a3jzi71SpbAB4YG{8HSx2am3$e3M??7 z=UxJIknRzv8YC_S-Emth%5|0J?n8X%pw1q&LR9iW= z@K4JN7}_$11w&BKJKvfQn$_eahMfU+h17o9X=!g^?pTyS<9TjePo}|-9`5IVumGU= z28aP*5~y2x`oS0id%(fsNd!4Re4urcTiwd#D2b{Eb42rCDOmg#>J$FD9imwp3s+f{ zZH5k8^;eaeu0vui-gSaUMx*;o|E+-M(<^bmmeJ3g0wcx$-HuND4~c*F!=TlcO^ho4yGeP_hynS=iVDTf(D| zPWUKgVP#vyW1&k({{-|-=M(zAQCS37!?glHb$m}JFpC;K=1RD?8$Rxf&XD{ykO0a@ zZhvsI2OVyL!l_&Kpo3Wq>!jPE7VnOh>-H8x&ZDvhJus%RClJ=?D*<#=46LjTe|%Jw z<)xVfO_e%;kcM&do~7_9XE-RRyhbfE1!xj`sz2x!A~Uhl94%L$wO zdSL0Y?4iaBk;*KkExrnY7)|ujf$<`|=X(PI$e9p77wVOpHI{QxOUB~rtvz42AfQr$ zx!gz=hyX&#%@QUB=P8N7VMaGlxoFo z(Am*&OxX`;)e~T!TNS$GKQi(un9h(RUC9GlFwbR`GyZedxTM}ZzB+xr;czny-tMI` z3KpUw#+?FyK#ZPYaews;>D7B3+K7@{Hq;-NfrdNl4Kj%t=_KqEr@0u6EK86MP5Z<= z7mrbC3A*`M*j8bc-;-$Tg-t(kh?rL|5J zw!NU$;;Bzs6fbl(i|qphuD`^%o3)TQ#BX_pH#SNp>L&nZZf@(>SDs*t3LSmJ_Lu)a z8004p@3#iGj1PoH^hC^zVj1Mv`GX2HJ)n6_e?XUjyUFTtEX@Pd>>HrYfGq$66k_9e zp+{E1&7Ak19hQ2s#(wngqZ|b%>E+)*BreCpk=o8 zrx!o%HMU~tqA;{RO&`FqYWaNVb)IxsH=7Tm8j+G6KipdKW=<+|cj>!4ZMpP%`4aV! z7T;RDWfSYt?fm?TZ&I@{o9BiquiM(DREIQGW#odLCJyUUv4u1TU6z#1`AR-_)|j|E z9tPB^ufVghC$sELMwYY9vfISCBs zdEyxr>idxnYtUH_p}ruMpMWw#qc>M?5R$(+qV(#6$H*A?(L~X^%U%-i?alxkuD_#} z`VvIGZX{*}jZaW$mVmWx!!G|N`9q>;GC;0*1ZvLTApMN7RFwi#ga;{ymIG=4nZ-*w z5-BvKUdk<~M{CM@0u*x${a+h#L=7}1N!-c|kj8V$q2>SwlSWe(4B0?ZiPD%M3edAz z)Pb(jtO2Wws^j!-qH=ZTvV>x`B1~WHbzzhL+A5vkwx1Pe)BIuG<+-j@1*ioSs0PTp z*ez0_55oJ2ht+i7E5Vt1yFvB>G*>W%#S*&jWTgf(hSjx`odE#1rhY8ob4G0&Lh-sq zR1k&=21j-@mJnV1{+EvW6gd^1doII*Izju&YmQqVUiD3`ZKge0C57IlwagZ?2=+<~>R;syZ09!-4U)ku4TQv2B(aNwl-l7#K; zL2VB;*Y>nHs@fo-rOuQiaGG*ul z1OID~>>OCoCE{!(Xq?xcYO&Vk}-!<@}BS2Mvi`B2+6}_S4jd zX}m#J$5r9=v24LkT^UjZ+lrTaCxrUth1GUff=s8J5MIZrroBS>L6MM;OquF^*R3DQ z`;$$kEEkH7m!w*(QDbg(pOFSW@89?EI3sJqw>ytoJ-C?nICW9c@9S>3+WA;^A=7Ppdaj@?RWZTU1r5cR~^ zZHtJBz!$gDUG6BWUSK8>at7q__lk0lK#OiLUoF(B^yBvTl!*7kl~Ukx0rhD$i$qCS z*ps`Kjt8=<-cRdx{1dgvDrS8)?W`TYPm9+#zs$p#wrsTFXYtt2w?Gv-9=@%!F|^z8 z*`u1DsiIR?=QE}cxAofvHwjAbFqYe!?AA4a;e=4V0xMXFK`Kmw9!ZotlQnTO~`m zqz@r4UgfnO$O$Vl+e59Yd@)jpIGVE?%&KdY|w~ZKQ*CA(;#hJ7F34(65_v5>` zG>SFn!wr%+joyWqB}TK}`HEzzVffVdQ^i9{FV0V^RP(EMq@t*AUe^#DJBabVf&^#2 z1r*3%-H*d*jp*UjZVn_Websfh4793)S4}kMDLSH`an0kK(0$Cw!BFYg7Dlu2#0|*O zmG3hQ&4G@R*I!JAtQiQ4&8W@aA|>PZrs8saFrIG?vOnJ+sS3osb`#51l@r*;liEPADeZhx05b7%n9_g7Uc6a9}#n#$5-L-AANr}C8L`AWHK6POLU~S z?!8Nzd$oQ0D)KF1a{a5<&*&SHyxBFX9SbMaywGk>s;ud}=F1`OgQ4qJZbvMc9XJGh z?%YUUo4r&w8d`ncc{n>!Y8MwowBvEGlbSR!%-qJQJItRPyYE(BJY=jwGhq*i6z|Sc zd*TkJ-miaqI>zXTSE=O^VOO=-%2eDfxJ7o*aw22DL&Lm2cd=g7IS{g)T3d|c;HK?i zJ|1tDNE>h8G&`KC^>VYTV7++B>9L%fEMaJgc~xG}`ihTiVAttIv6KDCbv+n7Qz3HE zY;}TJE-8_@7~d0?-53*m1qp@x&A)tEt40Edp-AAFb*Pn@o2`^dE8SsI(KZ9GQOt!a zb%uV){Ib-xM<1Jijm-t1!^4<2GLH9Sxs2z+n2&CsBaT%C1%;)k+Ky7&j#dwZ=2tbq zRZ*yqxjnF3TwUibh$DQ()6p~QBxJ4(?l*&~-`*mB$jNT(8+QZqZh5Epv5HJ00V-~5 zS{!E3%}*)Bm_p=|k6~!{6h4G`dvut7ebFmSYjy}XOe~ZPryVoSOjz`GP_)nNPnVtm zR`9ZSg(6AhSt&!Aa0XqHYd^Sd_{%o8xnE9{#hz`l)*jWT*W}8ldNZUd7NrbE;?c== zDvM?4uj<`}#zFW3nQJe$SzmeUwF(@bQi;=5B1~(*>3p8eI^~(KlAdcodwVP(x#tWsSv(aiAGE)( zNLh+$pj-K|Ln4mTz~x3uX(ow2^Z2Hr%g`sIfW_Prg3E3A%N~{{`@$-*B(tEGBYwIp3;tI`IH)dovcG>4sTDsx_r6BczW`V_hA3jX3|;B!NiCglYhuftIj@E=46ZR zWvx-rL>_ITH9|+}@J)_Vs_b>sQCAnGtQQ@_s`>VERpdF0F6*;zKOSr!9QFjonH~IS zdWd+Jv^F8PSZSB&(!f6aMcMRl>M}r>R_m=CSoK$+rT>>No{m>B=?;55E(Z2VR+>Bv zgcMZEEp?c9-+D(3^jc^8bMU(Dw9&DA`xdQb?s1{qy8yBKRi1^NEJNhn=W!0K)#jrG z-}oFhUWW*tWPJiZp=cgRghKwI4@rKX%z&$?Y!{j1y1=#J&o2!XGiB|h8FExSAL~R{ z-{3GCFKNT1$<(H`TVo8;-JWaG*d3fb1(GEVZpzxB-XYRVazf`N3{XlT}u3&HUhW z1@)YS?W@|?ZeSFEfJ8_BhM)lyV5oXcuCL$zqyZZYh_(+3eT;E?1cUiR5HWYD^+Nk? z6aHUICL^fs(zq<)T$kxhtB?`eL%vb;J0^oEQ4e;I988Au?{%pB81cJQ|6-e<(YGi` z(3qN>yy|1y_VE3rp~Z#vyL_jCh>GlvbmsMxiHq*UG$-tR(j}#_F=BTXt5Lq|m>SNF z&j?WLY@@HORkl<%K1^c#AZb=vw60ic+@LkQIQUMTHeDltAb>fOwZX!p2NOMW6T5o4 z;qJpv+4*^$38kHRj}WSdZeMMtVBb`?7Y3|2UvCXf3>XUSBW{lssTvFAZ|=ksQ|2Ss zPe)0590IiBKQ0s*ZC(4fWdQ!!s_qGTQ)5nQ0M_{?fh(8$nWN7~o#m7LRf2bL0jDB} zq`YwmGVi(<^lXJ_R$6&A2Wl=rPGItuth)V%+pP{`mfK$B zEaA77*sUtPta1K=-qSi;Skc@QhW4!T{9r=H9ANH( zNkEvcuq&rQ1!t7Z{pcgjD=mes$hQStSe8IC_4D&=1#@2JRCc?_$5LLxv@Kt?z^U>T ziy%hGqn7v;OJFWce#-Zi8hNBhTU z=lr8B`DY?^4r?{hwGQ8;scOsH8I@#6Roo9n^DAGAqtQDXEbc3%{KzxE9ZmM2Gm2S# z{;j9CyRB*|IsFTT-Vbkm7+*|GC7xH7)fr3QZv9~>pfHgXZ|N1uPge*UTgylt+K`hoA`4BH?tf$La4>r^zdyC1>cH0NJ2S z2GcPAlY94{XK7#8(4^`$!Y7ObyLQlIXgslEQbywFlU_?OOF*4iKZtfXOisRKNh&~f zrv$f@EP2jFDr|}N1H*Tsqdbn zueQg21BS!;Qj&-L)57f9B3cHQFs&WD)-(exm-PprnB;KM1b;96Yl=RN zkXbwP2g!+J(C^Y2Qf@w+3m^KV+_QeThZr!Mu6AP4mj0#$e!(GERXU2P5a>|Mhwxb zQya(D;~rDe8r69^loYv8tQfLrfBY3oHABO0%@VM682QhR&es=bGY#Pcm-Fd9LdDT! z$CEM&TfuJ~hjY)Sx-BkZ;_SguQ1e=vu7wr%wAT69IZnu?;&kfBx3W+>^SLLCp!A+@ z-GxIaZ5pGl&38@kJ&GW#*m%WTZc_ytpJizHqui@4}SS5juE` z#4X>POM0DRqQh|Ej5j{6bB%r(vf}CVFbqbt@*Dx>5HR1R&&G-jG;XAWD}OYYcae}_ zAwD-T13@b5{%VI=ob&bN`2MM&tY!`ysN2yK!2tcitzhuO2SNAo-nH&ziN2 zGenavx|^VU$-}%crsZK?SbTEN*zoXCdw$fqP5(`swT*z5N(7pt!uNq(3y;D$S(k4z zt5%A{{56K3UUw{TQK*uKb1>QQYZtuCE#wxNe*C$}@Z;VH?|H!Whjw#Fhr2^#+$wET zrP$ZvM}%qDF9le?nt+S_U`Eu`?3mTGTFBJwTkh?HrHpm#BozIfFUKPPIkmSWXp@)1 z>Ml+`xzy%dp{^Osw+0q?^U0y$@ejPJ<&=QQJ&LE^qacQ`TuXPl3aW?fQ{#-LL0sXp zh##&}@521MR9cx>{mA>uvZcn{pMk}gx2ecl9ZXVn?xg)VTCRfq6|k|y(7`bt(bqcN zjn|65g>h7Oc`8%}qS5zoEZb5PHMr^S(%H|}du14{GQP-(>6Z|@9TN$o%zbEl8L=ep+yScqprt_lAP#Jz;G<44Ay!)5MhP zaQ^8-q}HzMr_}=Ue9^a!kLSMF8?Sye|E7s;Uo>C&K(ZFsVr4E#S+%EhVg|WtZe#xQ zyi?cz!`^#FMU{0?fP!EsMNvTnM8QM`EfEAHiHPJ3l0_(Tkf?w}6%-{XNkB3bIp>Tb zN=9-95y=!e$2pJI?$58od^2li&6>6PPd9eUt5^5Ed(J+4?{jXikB#@DLoKuAM%C36 z+n#m$Kq>a~%G52rVVM=1V@(Qck4xWAhTHr>E8;F-VrWCGTuwPI%l-hX*OEZk)P#J{f=L#=%Yb zorgHSMkyQ8v*b=0ZAS8K-}VOC^>;LR%{bnvA*HX7D{INq(=5b=tEUJRIp8X;$l)?5 zw{ZcsUo}USD@Jl;S;CEPX98%xGhzARfReg$__CSG)vl;6Z0I9L%bt|F<$L43_(2*@ z6JnIMGoMYVE{c)n?LFGlvmw`G*qWf9Ln)t8vXWx#J+SEIa9P)*Em5;8Z1p(+5SOcX zKflEvV6=)FkH@~Xc7p-Nu^4&Tr@j({pITykQ{GSu-E{qzoaUkNxv2a%~V*^qX-;XZ_O!HhNN2Ilz*) zp;iJJ$VyxM)*hEvWJqXgiL6H6+yhA!Z1=9l|16=x`0sWM$D7`|O7An?_L;UjUf@Kp z?Z&JVOQyq-vYUGu1ChEm7$y;5hAT!4vKkqV*)L zzZAv+sTtbOK$ttAI6#JEF(@}RKN?l}NgXnXl4o)qA<7AvZK0k(y?9Mgrx{qL9B1-m7 zfYwGe5B!qj`v=|6nkFfxSOkUcJ9=g+k<@Cf+LyKmIJd!eYj9t7g8cBtcwu?So3HyI z?YpldJhSC{+aVsWltk3h_MJL$jGualFlvIY#!4SQ2tN!@%lhp;<9%&E?y~&HzSh4) zh<4c8K3z2W1~=3aZn@QDqdU{7qriAz0}#YqJnH zixwY~M#nyGMOp~Hx*EL`2UQEca~Rpx@!EV|=tJ^b@gz|Y$HPxfDZzQHaVy58A)!#P z`R#<5X4d>4kTgb)`fqoOc<*uFBf{a9>s@8dIaAsSGvl*O^YI(TweIciy=jwJZT}%5fudB+OBfOrn0HRc<8KCfpZK}qF$R& z6t_KNwz?%%wER)eq`Fu$;qj(2RY}7yAo(&JxXO?1 z3FmGJ&P$kS%uMSK(O%Ig*&er;p4IFRP_2Jo}l>3z)%WyX0r-{cZO1I?9*ckd$<^JPa z1qN9T99m&SXJ^A|AH>x3rEzx`s&75qM@z`5?$~-+&L-AF;bC5na99u~zR)^}qmxIVKsewICLnhTDrX-l|8DGm~~3f*fdWqF&^!w)SNIsnW*DH)u) z-rDZDU6ffbmnwm}P-y*e94l28&wSLDJnCefhE|ah zor!meeTG8n_QQ~D)=>_p)|>=6Z(WVAZ379VN{@oVSmw~Y3HpzU_itN=RZ9)0@#Wx%yGS_Ii?Q=9nOpI&7+ZmkzknRI2w^1w-s zxuaoDWzKP0U2tR&JDGEgC~|tM@pX=^_SpxaT-KRT)#kqvezK3qqKq^<+o0uA5e)S) zSsZIhG%T@S$t`u*D4f~WBvf|<%YJ)-r5;(je2U67O0>@NYi9ku_CXKGR0}L(L6g8N zga4zbK7lGlWh)d<{luZd;VeU} z@lT=I2nyld?pS0RHS;f7PB+Y9?DVKC>zc1LGU;hI$ylS+Y;IBlI{2QKjWHyJDno>2Sh6Oh&u zpXkq^{$a$nqLf}*^kNtBqXhgQd8cpOSvW1$1ETNmq9U5Pk~$LZiH)Y@u4M%jiHmo) z*H=j8oy0A-ol~y4M*Av#?P_3=0mgTu?NvYgSau;#DM(1=c@xAO%CVo`CUk^UDR`;5?&30mMkkvOwjzK-jE3<;CYo_+U9G2DmM5#ne%yIjgDi!A51jiIxPnp58*63!9FYjAz@4i{H4O|D& z_Jx&%at6XHIh?qA9P(!LDJin8_(nBM$VmUypf(`IMt$`474I_~ zIT+^C22Rt~Ti0@*+WMIsVMQS!+31>v_|@ z%=(j?`5$T(7n7Lh&?mQY*N^tJP#T&@ncZc>kR{4+*rrQ;dr^j2P}~@fQ&`R-Yt3%1 z9h0{ls8P(*B25}3JY=As-|L~#ElcSboLg5LC0}RQnxtcIKPlZFy?GMX!)mG2)oUPD zGC0?+Txr;^YACUs$wid-y|Bj9X%izhYVV?~VK-HBV=v}~2P;LCxrFI}tOi{rg&)H?~b_yO0-V8xwJbFsE!xefI+dbiAMYaxW zI!5NAioJUc-y=D|(=_djZBLzaH4KOE#L$3p^FSH|*kd2$7gxVto z_j5xGJ)yV2EkS^qH)E2pd98a=%SF>^tIe-cA3B+G?UoFa)QfV98pg^NY>7(0SWmzy zr@7&d>(%OdRu0W}^C~EKJvRZ`)5y`tlXOz>Md7 z=6TczqTF~=T&n>+A~aCwzBS5jhD`MsoNt1l@k}a)D9Up{3Ar5n8$izK^Wwy*U!m?- zGZ!E*RDrLULXH<0I5AY3kY)2FLI7$0uawx@NW#~fF5NJt(P@fYLU;_}Ggz%Yj zzFChucJ?#A)oXaisf^v=Q^_&JfJexAl5IJz(kZbIG4~lik6g8d+Mx(J(6znjp;?c0 z$7UH@lyxbX(U!kHIa+vRb=8FK`FP#c#%vh>dbPuu(TS7L4^qvit;fJd84oyQ9mSjO zAev7&vMt71(h6L7ph<>$aiAiIrl%)6(lo>HTQ*5wkzf7996ew$)svUT_p*`g7~NP| z23waz@C(R%B;+ox{glJj!kZf}P^1iQt(cdd6mW5>FR8X+)<`~(`|1+SA1KyG8NWuS6#!2l z=8k=8@+oMHOE-uQ@5<6Esv{3hrG7hD;SO&aZt<$(;!Xg}vJ5SO0Y9d}uFsBeekbk$ z#8GyL}dO_zn|7t4;S66)}kh$JO0Z(dY@`btq)kEbV2EdPO$$**gzHww`h& zSQ~KoM%h%%a(Slefz<}{->a4Jy-0eawOr;^H5}J4MKIg_{!7Lu&%5Wrn9=D*)Z>1b z52pE>lsn^PaB(^mfX!*Dl1$S|0mbMuzR<{*2dv?Z_A`VL<9Ab)vp!)G*P&SHUH;B( zGj+GcN4&s4+-bW@l6OsKA@HIPJx4|qM_I(qCy)L!P3HipMd%+QS?s5)>gQRgyJ`c^ zup8!HPP;ZNWEu<1Y|Up9O+2MVR{W8@&lw|x!Zb(y_4|5I=Nnu9YkUGU?v6t)96R-s zVJ#oPhcjusJx^WvATib)`*M|e`ndHwgV8MS9aj_fCri?I#H4%(AEjxi=wiE|C3xMmpB z67aMVj?@2R+gkdh?aL|tPBr)8D;8lE+s%a8@MceJrJ=uWsWhA$$ zecd>lFWZH%o1ig~Z=T@?Y(_a>#-ucVabn0+w86gfSeBrQ-ky_D#}BeN&KSG^@g`Y+ z`dG?MC{a9ekqF^BrQVUM4s(IZau95d9KL*mSp{D58zxUhBX>1}?jteP9tU+$k0L%y zTqf!~ocN;zbEYM3x8_8|TUc`)pphnB91GD#lmR;sC{&>BOW|QB>5c8#NPA7Jw=` z!9g-s+8A{8vlrj?qm`|1FIjWJc-IENOzb@?xaG=H#DmZ*)YUWka^;?`FXc5rVl>9P zxozinMYLoz5$o&Bws zfCF5jn5DniM^oF!i3b+0G?#RyYgNo=>my+z`xwJB1|&?xbHColNDE;?;2*-oudE_k zl^>58Wi0dJD6yz~6R{~puDB4n=jPYw)vuvI!8c(D@2Dx34NX?+9h!G%m-$lPnjj~) zudR4{eG<#h=)d|(8dWUI9uKMJbLO!EQFAByLvLIk$dfq7@+VUd!!d@LN2s{+g%B#J zC0yrXsm6VqgcQ}hZq~BRH<&BdyoRSv`F{X*+5M<9ukt#SKSf96N2i(YT(39FrY0;6^RzoyXJ6qbrFLvtyJ#X!f27W1ns*AH^1G_ z80g00r^w3^(TwU|S`!mcLWMO;n*q+URQ7)(FUBb%z_;!5kV0b`oPVOqE9HBSW&?AU zAGt#Ez+X;=xCL~ouZc(`RAYOp4jU8){$hy&1E>5DQGbR?FNgaWOzQe~Un#ZAEs&3< zbx&0J#rvHpi(cgjICDJvIPBBsw<97}Zrhp+7g|sDE@?EbUVAkS`2BU9&>_2-z&KB7 zdU*s{-|TzAc9#>%n4_|Hsjzq<0@jeWkf1k9@S%`J*!sLE^@+GEzvr9X%)@VrkE&~$ zwOkmfx2*6-m=MfplLe36Vmd-g5uP)+o+U37stdZjc~%;zyOSW6B_?)Zjh+WIgmU*l z#x#JeVTH$@;3m=XA+Zc<>6S0_s82HX3T%hfff4Fmp>`so;%WsqJ5AnmH~*Gd#6lnl z9+NuEbI2?5iH4?jTKmz%`58O)r?2XY*YO8Y`n{*gpt~pTq79#x2lCVBnn2c>M2KK? zISZRd*3FDZyDXOpkO=nJg>Krj)v(W3KVFIOF5{QN%VLr%j?W6H+Wq;EHJR@y4Ar9t z!tqS)UzZzx{FfxPf2`AwTFK=d0f}D=;GGRHN2=!_+uS;Mt#-8{h`xLbj93e_dK+q4 zx}NaG>m+_6j;@IdArXi7c5m1CGpgUdNVp&BR|e&_&TNpD8{tJfzLCNTE$T1TVUVaY zc6jM?$x6RbLH0XS{JG=P7-jHxLY3O#x5dhg9m${quoFe*gAx=DOsqrb{5)2&0H ze6HMOFYcXX!yGNy>eW2^GJG>SPdTWDp#aRd3nqxey5>N`@& zTFP%oaoRy>OfM6mKne7SOc%LTLBdkY6zXNea0YW(C$^=icJQu`Mf)wWolkQS2cwr& zSNxk4aY4KhzfjRyI$y<|?JX0~8BIw^85OfZ_*1S8V9rXG?U5Os1Zn!aYiaht+%tac zBhSSh4Id}%@v@aEJov7}K>DxTo?})VsRp!FG-zD5`t48>0D;Y^#}18?C7Pv*4L5&_ z=aKAOL`t_|DW9DD-Z;uW^CO}2B?nQ`{1awcHo~rCXVc%o`UjX8ODoYLT039 z-Bnv=7}JWIP4fr$IVlE65i*0ABp?ptrOg7wtg~dRey1M!V%|SJyS~$h)MhtKl% z>ejs-G(-+-Hyv2i27$I61huCZ^LFHyVPI_dO3uL zPUcU^ZO_jw43&*u^AQoagBlZ6Wb=FF<|m@qo~CIAy(VuB;;-|?PXchvh0A{?Y6{GM zgi6(9SukC-*85`;Hvno(}*J_nJ^TljyDWX`M+bz-Ps8RC~UFnIeu9F`Wm zG}*z5ne}ork{gLMY)cH{dN1p*oTaNACmGsnOjxG|#amZmLpa|6lJWqe28YDGxlmii~9qH2py_WyuOP!74~`NQfL_|~ zr4lCG$g9}2J`j*GVQJRn*%rgmOa@~`I+ZiT%nFHqB|w&72iJ}t0>SXy_zHJ2yl1om zFA=}oECFhvpH6|1^d8Jh>x)K+#e~FRE*`!W$AVNpR3sv)lB|1?%n=a-jlbvFU(@&m zXmg7H5+CmHlfO(YoM2GRe-OD>1{;O=#o14*F~mZ9R2Ph#AZ1j}j8PR%)M_BPVFi_E ze%lRbSTKECxN6Pt=(Y=mm;fES~gLt8AyL&rB#vC?DO+*mO!W(TeE?bB>IRZQPh@$&KK-AUH~DVH2f~kZ_TKoK zY*Rh($m6%lNS)+rNC!N!$28q1H)bOCs4Vv z*k?M!AmL?$HT->jGcVmK#<({f{MdKxudmO*0RZL|)dq#GP2juqtK`Zk-RU{1Gw(FI zB==qg)g47*;<5>dwcB23au>1EOP^Y~&4~*-d%8bDV6Qzmb1V{rEi?qCw`5cO$Y1Z) zSzSj+n~09V5|#h&OQipn1MpUDL%d8h6j8diw}XJHf<4pFrnK)O5n*659q}DJfttIE zKrVhtOx7&x_u^T;D@W|_W(<8J9mycWWUO&I$k6s`xl@fK>fhno5>fcZP3k{*2T#tH zxyHf@c&l!xOndbbnIutT%{CsSjJjY+RHzwT-Nc==q4s?YX;z$!80(w}i`AP`IiMjK zE*8j=Gh7=uDqjg^LF1l$^XNlgCi+W?l8T_aP8F$y)VzYY6(gv3KG_)8b|J*QPZ&O7 z2}g}d+D!3+Bt*SYq`4)R*J1s;BG34yYwyNIb($0BNfFMfIh4Vb@;n0W|Aw{p2J#Shzz zqLE=KUA-T;Ww5zA$MU5*JTR~kQftwkXuG9}pa52xs9U*}+1}9S_lA;PN2Y^(*L%t(wI5#^_e%A-Bl@+hzg z)FSziLlaLDCBMGZp_y{?8EP3SQQhkNMd0Ov@t?@^@s`u)&R@_BW;cPTrC@0ZmUL}U z{wxPnbB)I{iE&^{&xmE~g;RR^bO#1J!Wra^v;R{X7xT$|qlYN(%exF+b> z3nV+fo)SOSe*nSxlK*RV1eN2-{-e2Y0>e4t56{Rn^tU!v8Z%$Hz9zXm7zhEP6DkX1 zaL}2)!H-3}^npRuY0-_T>P7n+d`QBNiByz^TDL1_@Lx=kBYy#_Hk_MsSR^sJIYEw= zZ0x(^_n|Z>5}UJUAceemLtXVTsBj}{j}bZ1 z150NbQjgYruY@qe0R{<G?gj#ZHm8)5AjnW%E->Z8BN&0+HmyHv)|+quYp5Xea7MBjH-@w zX9D!_qvy?zSl4OP5a1)h^u65j_u%ibbjsnSptkG8AYOVNy4mKGb?t(_BnC`V?DosX zaw9jk@{|RzHHt0qGUtJYw~>4q?8?7Ht3a=q{I>SeTSG^UxLTyog56==O3pc@JB~(X zrN@jIdwQk!TnyRvoUJQs{NfnM022>}1;!)4&hf zEL>-jiF(=xQxj|;c72wTT;J-_3(o;Xnzhy^yoNa5SRASqOQ+39Dacwl*Gx77212NP zt0a&TuD3fQs}bRmjve`Hy7?-PkBC_X6Y%Ri-@jbmL-K2_3)k7Ldg*SsK)mWMw#^EK zRv&hVKXQAd!8Vm5?0rTtQ>XfFG*n#3-pzV_UbxU$0vr!HpoG*f1K)g?%HhRP9mGSO zf|OPxj4cC@>WxS0g0PW7OH49CF5(nug^J;ej7XFfbTSA-<4>%BN$4KXmYxbq>Hcn~ zwxExF+)bq|O9T@rJHmjN{d|0pV8@w5b7BO+9CUwYUO812v;PR380G4DhNl}^S%~c! z6M><&0ncH+RSW1!-87?lXB5XGMIrX$z#ra8V{#`)CU!eOwI|mE2i&8i0(0#mOslBc z-dvDEkS-2R;j2ccU3OA~HY*mPH5eN(>e`I5?6Xzw0G<+qFo-x{0;XvcH3I1GQ1NUw z3ueE6vR@Ux;Gs;0fd8VJkrlp4N;k!iog4bB3Py7EkeRX_M{W=jBJagF(8y{6~TN|`XWc9B7`A=;fgbZBMpyb z%k~&&%7noV9m1|jBGGWT)lK}ZFucFfr~mr>1&eyiS*OjxGZz5uAD!N01_=S4MSZM= zMwz3-)VorMUO1Q&=(*)JQ5)^eYq)L+#X%?V2#2zjOZ=B%&AI`;hm4j-zhjTjt3af* z(Kz>8w)BrMU)_Gr0wAJbONY=|i-36ii1|!$$BEORzvY4zDum78jY6s#CtniX7qlHU z5FXS>W0py8zPYVR2Q1F?4gdblF#GB17PMpR)rRX8$o4fWUBglVpx)L&x{Q9lx<6T) zbF|W(F5*Xd7JU%D32K$$Otit>0(lI)wJg^~8VN$K8R;VEM)ukrYTuKs>DEY-w|zf+ zapn!EWSPu2wk;{!I+nBhdTW57K4sJcZNFwcGOWrY?UEzso%x#(=W@LM6wb?t5YjKM z;&0Rj=sIcPVid}9H3y7A!R;N$r2Ng*eetB9t5}%r2)R)UR>IhkMAI*79nLk)hJ>Or z+7NmuTZCtEtgk39$F#2-pq@g6wSg9XknD*OS|0(mVVYAzk~_Ih#Lg`#vIo+FZ>%BoSTR3_=>z$% zCe~8}TiEK}X)dZYI&sQ2k}lm~W)<3q9GsJ9lMl;$Cx^fidE}*v?RLb9BZ21i-vt_a z2sHQTwHp9`;=s85pu+hg_lu?3K_JjF;auJ7#mnc_q4;g0;=~V%%F-44)4ls>;6J0P zLU39)w4sg@hdugsaI!N)yHo(I{A`vZ;@lw3^s#$`X24(ZfA33iie*&EdB#-^Hn&jmqw><_2afCWmVvZ$izawAlQG_4xfPnQJkA>Xj- z#O*+x8h0-PW28QU1)7grwPd^{t_QAZYM0)UZ?4Vpv zFY6D%xPWH-B(utQua^^s`Ro|c8l!_0Rcub%kMlI4k_)ppnuQnoL64X?WoiU>C@TdD z@k`m19kT<1V@^@(!r6c=^1|xuI>B**jg*Gs~_3arh zx+hW^9_XPl91C+=b`!2A@8MC#MH~M!@90jAfJT~$Nb$83Y^htIZue5&MG

T^I+~ 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

IrCU{%|+PW9P; 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 Ob5mCFYN5<+zyAdynS5jb literal 0 HcmV?d00001 From 527d33b2ebd23cbde518540a09349e1685820b68 Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Thu, 9 Mar 2023 10:57:05 +0100 Subject: [PATCH 220/578] Update index.md --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 869d45294db..c367e9a5f43 100644 --- a/applications/index.md +++ b/applications/index.md @@ -222,7 +222,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Pendulum](https://pendulumchain.org/) | [Spacewalk: a Stellar bridge](./spacewalk-bridge.md) | [GitHub](https://github.com/pendulum-chain) | ☐ | ☒ | ☐ | | [Dmitrii Koshelev](https://github.com/dishport) | [Implementation of the new hash function to BLS12 curves](./new_bls12_hash_function.md) | [GitHub](https://github.com/dishport) | ☐ | ☒ | ☒ | | [Hamster](https://github.com/orgs/hamster-shared) | [Hamster - A decentralized computing network](./hamster.md) | [GitHub](https://github.com/orgs/hamster-shared) | ☐ | ☒ | ☒ | -| [Papers GmbH](https://papers.ch/en/) | Zaturn - A Generic Attestable Oracle parachain Phase 1 | [GitHub](https://github.com/airgap-it) | ☐ | ☐ | ☐ | +| [Papers GmbH](https://papers.ch/en/) | Zaturn - A Generic Attestable Oracle parachain Phase 1 | [GitHub](https://github.com/airgap-it) | ☐ | ☒ | ☒ | | [Slonigiraf](https://www.slonigiraf.org/) | [SLON - a recommendation letter system](./slonigiraf.md) | [GitHub](https://github.com/slonigiraf) | ☐ | ☒ | ☒ | | [Helixstreet](https://helixstreet.io/) | [Helixstreet Module](./helixstreet.md) | [GitHub](https://github.com/helixstreet) | ☐ | ☐ | ☐ | | [Cryptoviet](https://team.cryptoviet.com/) | [Gafi Network - The Network of Game Finance](./Gafi.md) | [GitHub](https://github.com/cryptoviet/gafi) | ☐ | ☒ | ☒ | From 6f307ee624eeac8e9ab2d818018784f12086f60f Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 9 Mar 2023 14:45:47 +0100 Subject: [PATCH 221/578] Update rfps.md Add grant_management_webapp.md --- docs/rfps.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/rfps.md b/docs/rfps.md index 7a8268fbe18..8365b7012e6 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -39,6 +39,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [decentralized-security-marketplace.md](RFPs/Open/decentralized-security-marketplace.md) | 🟢 | 23.01.2023 | | [epassport-zk-validation.md](RFPs/Open/epassport-zk-validation.md) | 🟢 | 29.11.2021 | | [formal_guarantees_for_grandpa.md](RFPs/Open/formal_guarantees_for_grandpa.md) | 🟢 | 07.10.2022 | +| [grant_management_webapp.md](RFPs/Open/grant_management_webapp.md) | 🟢 | 09.03.2023 | | [identity-directory.md](RFPs/Under%20Development/identity-directory.md) | 🟡 | 30.05.2022 | | [implementation-benchmarking.md](RFPs/Open/implementation-benchmarking.md) | 🟢 | 20.07.2021 | | [ink!_smart_contract_block_explorer.md](RFPs/Under%20Development/ink_smart_contract_block_explorer.md) | 🟡 | 05.07.2021 | From d43ef9bb31c5f39392b5461065b58311de6d6b28 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Thu, 9 Mar 2023 14:51:51 +0100 Subject: [PATCH 222/578] Update wallet aggregator library --- docs/RFPs/{Open => Implemented}/wallet-aggregator-library.md | 2 +- docs/rfps.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename docs/RFPs/{Open => Implemented}/wallet-aggregator-library.md (92%) diff --git a/docs/RFPs/Open/wallet-aggregator-library.md b/docs/RFPs/Implemented/wallet-aggregator-library.md similarity index 92% rename from docs/RFPs/Open/wallet-aggregator-library.md rename to docs/RFPs/Implemented/wallet-aggregator-library.md index 0f3cb2d8c45..15d0437bf09 100644 --- a/docs/RFPs/Open/wallet-aggregator-library.md +++ b/docs/RFPs/Implemented/wallet-aggregator-library.md @@ -1,6 +1,6 @@ # Wallet Aggregator Library -* **Status:** Open +* **Status:** [Implemented: SubConnect](https://github.com/Koniverse/SubConnect), [Implemented: talisman-connect](https://github.com/TalismanSociety/talisman-connect) * **Proposer:** [Matteo Casonato](https://github.com/0xCaso) ## Project Description :page_facing_up: diff --git a/docs/rfps.md b/docs/rfps.md index 8365b7012e6..7cc0f95d13c 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -65,7 +65,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [user-account-access-analysis.md](RFPs/Open/user-account-access-analysis.md) | 🟢 | 07.01.2023 | | [validator-setup-maintenance.md](RFPs/Open/validator-setup-maintenance.md) | 🟢 | 23.11.2021 | | [validator-selection-algorithm.md](RFPs/Under%20Development/validator-selection-algorithm.md) | 🟡 | 07.12.2022 | -| [wallet-aggregator-library.md](RFPs/Open/wallet-aggregator-library.md) | 🟢 | 23.01.2023 | +| [wallet-aggregator-library.md](RFPs/Implemented/wallet-aggregator-library.md) | 🔴 | 09.03.2023 | | [xcm-tool.md](RFPs/Open/xcm-tool.md) | 🟢 | 20.07.2021 | | [alternative-polkadot-js-api-console.md](RFPs/Open/alternative-polkadot-js-api-console.md) | 🟢 | 16.02.2023 | From 826ba1f6d38ea759e97de47ffcd4834fb4fb2314 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Thu, 9 Mar 2023 14:18:53 -0500 Subject: [PATCH 223/578] Update index.md (#1602) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index c367e9a5f43..a103b2904dc 100644 --- a/applications/index.md +++ b/applications/index.md @@ -38,7 +38,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [OmniBTC](https://omnibtc.finance/) | [Polkadot Smart Chain](psc.md) | [GitHub](https://github.com/OmniBTC/PSC) | ☐ | ☒ | ☒ | | [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☒ | ☒ | | [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | -| [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☐ | ☐ | ☐ | +| [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☐ | ☒ | ☐ | | [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | | [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☐ | | [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☐ | ☐ | From 2f6ed4939280358972d8f27fd5906bf9faf20da4 Mon Sep 17 00:00:00 2001 From: BelSoft Dev DOO <126072104+beoblock@users.noreply.github.com> Date: Fri, 10 Mar 2023 08:16:01 +0100 Subject: [PATCH 224/578] Create Diffy_chat.md (#1560) * Create Diffy_chat.md * Update Diffy_chat.md * Update Diffy_chat.md --- applications/Diffy_chat.md | 135 +++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 applications/Diffy_chat.md diff --git a/applications/Diffy_chat.md b/applications/Diffy_chat.md new file mode 100644 index 00000000000..2999e71e599 --- /dev/null +++ b/applications/Diffy_chat.md @@ -0,0 +1,135 @@ +# Diffy messenger + +- **Team Name:** BelSoft +- **Payment Address:** Polkadot (Statemint): 14nQH1ZTDkRxLWdCWbSZjRGrBJpXgj4m2RRZDtQZExPP73K (USDT) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: +This application complies with a potentially interesting project “Private instant messenger that uses on-chain identity” mentioned in [Open Source Polkadot Stack](https://wiki.polkadot.network/docs/build-open-source) page in the “Social Networking” section. + +## Project Overview :page_facing_up: + +A lot of sensitive data is meant to be transferred between parties in a secure way, but most of the centralized messengers and mail agents, even secured ones, have a common point of vulnerability - a centralized database/backend that stores all the data and manages connections. Meanwhile, some entities or even industries as a whole have demand for secured private channels for exchanging messages, e.g. medical institutions, that exchange sensitive data with patients or with other market players. + +The aim of this project is to develop a secured decentralized messenger that doesn’t store data on a centralized backend and uses personal Polkadot wallet credentials for chatting initiation and messaging. + +### Project Details + +P2p channels between users will be set using WebRTC. We will develop a Substrate pallet for exchanging [SDP offers](https://datatracker.ietf.org/doc/html/rfc2327). For address discovery of NAT users we will use any public [STUN server](https://datatracker.ietf.org/doc/html/rfc8445). +All messages between users will be encrypted with user’s public keys, so only receiving user could decrypt his messages using his private key of his Polkadot wallet. +Also, the pallet will include a “contacts” feature: a user will be able to tie names to wallet addresses and organize his contacts in a common way. + +![image](https://user-images.githubusercontent.com/126072104/220610232-0b9a4033-97cc-44ba-8948-a610b2b0c4bf.png) + +### Ecosystem Fit + +The Diffy chat dapp is very in demand in areas where it is crucial to protect personal and other critical data from unauthorized access during interaction or communication between counterparties. The target audience is very wide: from medical institutions providing telemedicine services to remote financial services and corporate channels for transmitting sensitive information between remote divisions. + +In the [Open Source Polkadot Stack](https://wiki.polkadot.network/docs/build-open-source) we see the [Uke Protocol Pallet](https://github.com/Uke-Messaging/uke-pallet) project, that provides functionality to perform basic messaging and identity assignment to users on a given Substrate chain. Unlike Uke Protocol, Diffy chat dapp won’t use a blockchain for sending and storing entire messages as in case of mass use this feature will dramatically clog the blockchain with unnecessary information like "hello" messages. Our dapp will use a blockchain just for authorization purposes, p2p connection initiation and for personal encryption keys. History backup feature can be available on later stages of the project by storing files locally or in IPFS with putting just a hash sum in a blockchain. + +## Team :busts_in_silhouette: + +### Team members + +- Max Remov, managing partner at BelSoft Dev d.o.o +- Alexey Vexin, CEO at BelSoft Dev d.o.o +- Dmitrii Shevchenko, CTO at BelSoft Dev d.o.o +- Nikita Orlov, Teamlead at BelSoft Dev d.o.o +- Alexander Plekhanov, Middle full stack developer at BelSoft Dev d.o.o +- Valeriy Tetevin, Senior full stack developer at BelSoft Dev d.o.o + +### Contact + +- **Contact Name:** Alexey Vexin +- **Contact Email:** vexin@belsoft.rs +- **Website:** https://www.belsoft.rs + +### Legal Structure + +- **Registered Address:** Kneza Mihaila 33, sprat 2 , Stari Grad , 11000 Beograd , Srbija +- **Registered Legal Entity:** Belsoft Dev DOO Beograd + +### Team's experience + +Max Remov is a business and personality transformation expert, executive and visionary, innovation instigator across telecom, retail, chemistry, pharma. Participates in several crypto initiatives. + +Alexey Vexin is product owner and project manager with 10+ years of experience in managing complicated telecoms and IT projects in Telco, Utilities and Governmental sectors with deep focus on business process management. Led dozens of federal scaled projects for IT systems implementation and industry scaled technology development, standardization and implementation. + +Dmitrii Shevchenko is a TechLead engineer with 10+ years of experience in developing and integrating IT, networking, security and blockchain solutions. Involved in implementation of highly reliable industrial solutions and development of FinTech and DeFi applications. + +Nikita Orlov, ETH Waterloo 2019 hackathon prize-winner, is a TechLead engineer with over 8 years of experience in development and integration of fault-tolerant high-loaded SaaS IT solutions including relevant experience in blockchain solutions. + +Alexander Plekhanov is a full stack software developer with over 5 years of experience including blockchain-based projects, enterprise solutions for fintech, call-centers, government services. Recent time mostly focused on smart-contracts development. + +Valeriy Tetevin is a programming engineer with over 8 years of experience in cloud-native applications. He also has strong knowledge of microservices architecture and back-end development for high-loaded applications. + +### Team Code Repos + +- https://github.com/1db1 +- https://github.com/StringNick +- https://github.com/SealTV + +### Team LinkedIn Profiles (if available) + +- [Max Remov](https://www.linkedin.com/in/remov) +- [Alexey Vexin](https://www.linkedin.com/in/alexey-vexin-800a4068/) +- [Nikita Orlov](https://www.linkedin.com/in/nikita-orlov-aa6910186/) +- [Alexander Plekhanov](https://www.linkedin.com/in/alexander-plekhanov/) +- [Valeriy Tetevin](https://www.linkedin.com/in/sealtv/) + +## Development Roadmap :nut_and_bolt: + +We plan to execute 3 deliverables in two milestones: +- a Substrate pallet for chat initiation; +- a DOTRTC library for p2p transport implementation with test html pages for message passing; +- a web-messenger dapp MVP with polkadot wallets authorisation. + +The project will be supported by a team of 2 developers, 1 UI/UX designer, 1 DevOps engineer and 1 QA. + +### Overview + +- **Total Estimated Duration:** 3 months +- **Full-Time Equivalent (FTE):** 3,5 FTE +- **Total Costs:** 30,000 USDT + +### Milestone 1 — Design and development of a pallet and a DOTRTC library + +- **Estimated duration:** 1,5 months +- **FTE:** 2 +- **Costs:** 16,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how the developed features work. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure new functionality and robustness. In the guide, we will describe how to run these tests. | +| 1. | Diffy chat pallet | We will develop a pallet (using Rust) which will include event handling to send and approve WebRTC offers for chat initiation. | +| 2. | DOTRTC library | We will develop a DOTRTC library (with JS) for p2p transport implementation using a parachain with Diffy chat pallet. This library will include an API for organizing p2p communication, methods for splitting packets into chunks (and reassemble on the receiver’s end). For secure messaging between two participants a e2e encryption using the rs25519 algorithm will be implemented in the DOTRTC library (a sender will encrypt outgoing messages with recipient’s public key so only the recipient could decrypt them with his private key). | +| 3. | HTML test page | We will deliver an HTML test page for DOTRTC library testing (setting a p2p channel between 2 users using the DOTRTC library). | + +### Milestone 2 — A web messenger MVP development + +- **Estimated duration:** 1,5 months +- **FTE:** 1,5 +- **Costs:** 14,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how the new dapp works. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Article | We will publish an **article** that explains what was achieved, how to use the new Dapp and what benefits what are the benefits of using the system | +| 1. | Contacts list feature | We will develop a contact list feature allowing users to tie real names to contact’s wallet addresses and store them encrypted in a blockchain. Encryption and decryption will be carried out on the frontend. | +| 2. | Web messenger dapp MVP | A web messenger dapp (written on JS) with authorization via Polkadot.js keys, p2p messaging using developed DOTRTC library and contacts list: a user will be able to start a conversation with someone on his contacts list. A web dapp MVP mockup is shouwn below and the basic user logic is as follows. To establish a chat User A sends a short 1st message to User B (limited to 50 symbols as it is written into the blockchain). This message is sent with the connection request. When User B is on-line he receives this message with connection request and accepts it: automatically for users on his contact list and manually for requests from unknown users (connection request can be declined as well).| + +![Diffy_chat mockup](https://user-images.githubusercontent.com/126072104/223709096-ccec2425-f3ac-4c8f-853f-d3656a8c29c5.jpg) + +## Future Plans + +In the next stages of the project we plan to implement new fundamental features like: +- offline messaging; +- group chats (p2mp); +- sending/receiving files; +- chats backup feature. + +These should be developed under later stages of the project. From bc640e865562fc376dc925ee245dd18ccd3ee617 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 10 Mar 2023 08:17:55 +0100 Subject: [PATCH 225/578] Update index.md Add Diffy messenger --- applications/index.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/applications/index.md b/applications/index.md index a103b2904dc..54357478660 100644 --- a/applications/index.md +++ b/applications/index.md @@ -61,6 +61,8 @@ Use this page for an overview of all public grants and their status. Use the sid | Jonathan Brown | [Hybrid Explorer](hybrid.md) | [GitHub](https://github.com/acuity-social) | ☐ | ☐ | ☐ | | [ParaSpell](https://github.com/paraspell) | [ParaSpell_Follow Up 2](ParaSpell_follow-up2.md) | [GitHub](https://github.com/paraspell) | ☐ | ☐ | ☐ | | [justmert](https://github.com/justmert) | [PolkaFlow](polkaflow.md) | [GitHub](https://github.com/justmert) | ☐ | ☐ | ☐ | +| [BelSoft](https://www.belsoft.rs) | [Diffy messenger](Diffy_chat.md) | [GitHub](https://github.com/1db1) | ☐ | ☐ | ☐ | + ## 2022 From 90683c4bd014a679a27b19adc7aede66ae2b32f7 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Fri, 10 Mar 2023 03:06:37 -0500 Subject: [PATCH 226/578] Terminate tdot.md (#1604) --- applications/tdot.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/tdot.md b/applications/tdot.md index 10f751ca9f5..64019734fe5 100644 --- a/applications/tdot.md +++ b/applications/tdot.md @@ -3,6 +3,7 @@ - **Team Name:** NUTS Finance - **Payment Address:** 0x679824d755B054a2a50358008472a6F400740319(DAI) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 +- **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/872#issuecomment-1424407082) ## Project Overview :page_facing_up: From 29c9e7a7f43a1891233c9272554792c1ab042fd9 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Fri, 10 Mar 2023 18:12:54 -0500 Subject: [PATCH 227/578] Update index.md (#1606) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 54357478660..98cf6ec9672 100644 --- a/applications/index.md +++ b/applications/index.md @@ -238,7 +238,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Hashed Systems](https://hashed.io) | [Native Bitcoin Vaults (NBV)](./native-bitcoin-vaults.md) | [GitHub](https://github.com/hashed-io) | ☐ | ☒ | ☒ | | [Setheum](https://setheum.xyz/) | [Setheum HighEnd LaunchPad Crowdsales Module](./setheum.md) | [GitHub](https://github.com/Setheum-Labs) | ☐ | ☐ | ☐ | | [SaaS3 Lab](https://www.saas3.io) | [SaaS3](./SaaS3.md) | [GitHub](https://github.com/SaaS3Lab) | ☐ | ☒ | ☐ | -| [NUTS Finance](https://nuts.finance) | [DOT-pegged derivative built on top of the stable asset protocol](./stable-asset.md) | [GitHub](https://github.com/nutsfinance/) | ☐ | ☒ | ☒ | +| [NUTS Finance](https://nuts.finance) | [DOT-pegged derivative built on top of the stable asset protocol](./tdot.md) | [GitHub](https://github.com/nutsfinance/) | ☒ | ☒ | ☐ | | [Strategy Object](https://strategyobject.com/) | [Substrate Client for Java](./substrate_client_java.md) | [GitHub](https://github.com/strategyobject/substrate-client-java) | ☐ | ☒ | ☐ | ## 2021 From cb2e0c3fa8b89498055917c7ac4ef3f88f1babbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Sat, 11 Mar 2023 00:19:01 +0100 Subject: [PATCH 228/578] Add icons to sidebar --- docs/contribute.md | 2 +- docs/faq.md | 2 +- docs/funding.md | 2 +- docs/help.md | 2 +- docs/maintenance.md | 2 +- docs/referral-program.md | 2 +- docs/suggesting.md | 2 +- sidebars.js | 38 +++++++++++++++++++++++--------------- src/css/custom.css | 7 +++++++ 9 files changed, 37 insertions(+), 22 deletions(-) diff --git a/docs/contribute.md b/docs/contribute.md index 615bedfc735..1faf54fc2a3 100644 --- a/docs/contribute.md +++ b/docs/contribute.md @@ -1,6 +1,6 @@ --- sidebar_position: 9 -title: Contribute +title: ➕ Contribute --- The W3F Grants Program aims to be as open and accessible as possible. If you are interested in contributing or getting involved, there are several ways you can do that: diff --git a/docs/faq.md b/docs/faq.md index d427a34747b..6d54fbfd1b1 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -1,6 +1,6 @@ --- sidebar_position: 11 -title: FAQ +title: 🙋 FAQ --- # Frequently Asked Questions diff --git a/docs/funding.md b/docs/funding.md index 9ce7e8be6be..6067e9a2e6f 100644 --- a/docs/funding.md +++ b/docs/funding.md @@ -1,6 +1,6 @@ --- sidebar_position: 8 -title: Alternative Funding +title: 🪙 Alternative Funding --- Some funding sources might be more and some less suitable for your project throughout its various stages. We encourage you to explore alternative funding options listed below. Please note, however, that you should not seek to fund the **same scope of work** from multiple sources and that any team found doing so will have its Web3 Foundation support terminated. diff --git a/docs/help.md b/docs/help.md index 66d04a20bfe..971d657f453 100644 --- a/docs/help.md +++ b/docs/help.md @@ -1,6 +1,6 @@ --- sidebar_position: 7 -title: Help +title: 💡 Help --- diff --git a/docs/maintenance.md b/docs/maintenance.md index 600b04eba53..353195a10f1 100644 --- a/docs/maintenance.md +++ b/docs/maintenance.md @@ -1,6 +1,6 @@ --- sidebar_position: 6 -title: Maintenance Grants +title: 🛠️ Maintenance Grants --- diff --git a/docs/referral-program.md b/docs/referral-program.md index dc030b2a613..702aae8b2b2 100644 --- a/docs/referral-program.md +++ b/docs/referral-program.md @@ -1,6 +1,6 @@ --- sidebar_position: 7 -title: Referral Program +title: 💰 Referral Program --- We give away 500 USD to each referral of a successful grant application by _anyone having previously worked on a Web3 Foundation grant_ or _a [Polkadot Ambassador](https://wiki.polkadot.network/docs/ambassadors)_. Web3 Foundation and Parity employees do not qualify for the program, even if they previously worked on a grant. diff --git a/docs/suggesting.md b/docs/suggesting.md index 90a4f0c934d..89c29f840e3 100644 --- a/docs/suggesting.md +++ b/docs/suggesting.md @@ -1,6 +1,6 @@ --- sidebar_position: 5 -title: Suggesting a Project +title: 📬 Suggesting a Project --- diff --git a/sidebars.js b/sidebars.js index f420e567c68..e45d9572f5a 100644 --- a/sidebars.js +++ b/sidebars.js @@ -15,23 +15,23 @@ const sidebars = { docs: [ { type: 'category', - label: 'Introduction', + label: '👋 Introduction', link: {type:'doc', id:'docs/introduction'}, items: [{type: 'autogenerated', dirName: 'docs/Introduction'}] }, { type: 'category', - label: 'Application Process', + label: '📝 Application Process', link: {type:'doc', id:'docs/process'}, items: [{type: 'autogenerated', dirName: 'docs/Process'}] }, { type: 'doc', - id:'docs/suggesting' + id:'docs/maintenance' }, { - type: 'doc', - id:'docs/maintenance' + type: 'html', + value: '', }, { type: 'doc', @@ -39,36 +39,44 @@ const sidebars = { }, { type: 'doc', - id:'docs/referral-program' + id:'docs/faq' }, { type: 'doc', - id:'docs/funding' + id:'docs/suggesting' }, { type: 'doc', - id:'docs/contribute' + id:'docs/referral-program' + }, + { + type: 'html', + value: '', }, { type: 'doc', - id:'docs/faq' + id:'docs/funding' }, { type: 'doc', - label: 'List of Grants', - id:'applications/index' + id:'docs/contribute' }, { - type: 'category', - label: 'Support Docs', - items: [{type: 'autogenerated', dirName: 'docs/Support Docs'}] + type: 'doc', + label: '📜 List of Grants', + id:'applications/index' }, { type: 'category', - label: 'Requests for Proposal', + label: '🪧 Requests for Proposal', link: {type:'doc', id:'docs/rfps'}, items: [{type: 'autogenerated', dirName: 'docs/RFPs'}] }, + { + type: 'category', + label: '🦮 Supporting Documents', + items: [{type: 'autogenerated', dirName: 'docs/Support Docs'}] + }, ] }; diff --git a/src/css/custom.css b/src/css/custom.css index 9347a5a8dd9..33ef2e6e0ea 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -75,3 +75,10 @@ a { .button, .menu__link, .navbar__brand, .navbar__item, .pagination-nav__link, .table-of-contents__link { text-decoration: none; } + +/* Divider for sidebar */ +.sidebar-divider { + border-top: 1px solid var(--ifm-color-gray-200); + display: block; + margin: 0.5rem 0 0.25rem 1rem; +} \ No newline at end of file From 74f9ac226543067e3309368d5d8b427b147a2236 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Sat, 11 Mar 2023 00:36:30 +0100 Subject: [PATCH 229/578] Fix icons in rfps and add link in suggesting --- docs/rfps.md | 8 ++++---- docs/suggesting.md | 4 +++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/docs/rfps.md b/docs/rfps.md index 7cc0f95d13c..479c3ba22b6 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -6,11 +6,11 @@ title: Requests for Proposals

-- [:grey\_question: What is an RFP?](#grey_question-what-is-an-rfp) +- [❔ What is an RFP?](#-what-is-an-rfp) - [📜 List of RFPs](#-list-of-rfps) -- [:mailbox\_with\_mail: Suggest an RFP](#mailbox_with_mail-suggest-an-rfp) +- [📬 Suggest an RFP](#-suggest-an-rfp) -## :grey_question: What is an RFP? +## ❔ What is an RFP? An RFP (Request for Proposals) is a declaration of interest for others to submit a grant or a treasury application regarding a specific project. They usually revolve around issues that the author (often someone from our team, but [anyone can suggest one](suggesting.md)) deems useful and missing or unsolved in our ecosystem. @@ -69,6 +69,6 @@ If you find an open RFP here that you think you can address, feel free to [submi | [xcm-tool.md](RFPs/Open/xcm-tool.md) | 🟢 | 20.07.2021 | | [alternative-polkadot-js-api-console.md](RFPs/Open/alternative-polkadot-js-api-console.md) | 🟢 | 16.02.2023 | -## :mailbox_with_mail: Suggest an RFP +## 📬 Suggest an RFP If you think that we should support the development of certain tools or projects (related to **Polkadot, Kusama or Substrate**) that aren't in the Polkadot/Kusama [tech stack](https://wiki.polkadot.network/docs/build-open-source), please submit a suggestion using the process described in our [Grants program README](suggesting.md). We are particularly interested in supporting projects that could be leveraged by other builders in our ecosystem. diff --git a/docs/suggesting.md b/docs/suggesting.md index 89c29f840e3..b545e6b72d3 100644 --- a/docs/suggesting.md +++ b/docs/suggesting.md @@ -5,7 +5,9 @@ title: 📬 Suggesting a Project -If you think that we should support the development of certain tools or projects that aren't in the Polkadot/Kusama [tech stack](https://wiki.polkadot.network/docs/build-open-source), feel free to submit a suggestion using the process described below. We are particularly interested in supporting projects that could be leveraged by other builders in our ecosystem. +If you think that we should support the development of certain tools or projects that aren't in the Polkadot/Kusama [tech stack](https://wiki.polkadot.network/docs/build-open-source), feel free to submit a suggestion ("Request for Proposal") using the process described below. We are particularly interested in supporting projects that could be leveraged by other builders in our ecosystem. + +For a list of previous Requests for Proposal and their status, see our [separate RFP page below](./rfps.md). **Submit an idea:** From e9dc6a3999c28607fb070637960b8b06999c1e8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Sat, 11 Mar 2023 00:36:42 +0100 Subject: [PATCH 230/578] change contribute icon --- docs/contribute.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/contribute.md b/docs/contribute.md index 1faf54fc2a3..602699a8651 100644 --- a/docs/contribute.md +++ b/docs/contribute.md @@ -1,6 +1,6 @@ --- sidebar_position: 9 -title: ➕ Contribute +title: 🫶 Contribute --- The W3F Grants Program aims to be as open and accessible as possible. If you are interested in contributing or getting involved, there are several ways you can do that: From 9f5fb231d9effd2ca090d4a67dc9c811b843ba46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Sat, 11 Mar 2023 00:37:01 +0100 Subject: [PATCH 231/578] sidebar eye candy --- sidebars.js | 18 ++++++++++++++++++ src/css/custom.css | 9 +++++++++ 2 files changed, 27 insertions(+) diff --git a/sidebars.js b/sidebars.js index e45d9572f5a..3abb05bbfb2 100644 --- a/sidebars.js +++ b/sidebars.js @@ -13,6 +13,12 @@ const sidebars = { docs: [ + { + type: 'html', + className: 'sidebar-title', + value: 'Basic Information', + defaultStyle: true, + }, { type: 'category', label: '👋 Introduction', @@ -33,6 +39,12 @@ const sidebars = { type: 'html', value: '', }, + { + type: 'html', + className: 'sidebar-title', + value: 'In Depth', + defaultStyle: true, + }, { type: 'doc', id:'docs/help' @@ -53,6 +65,12 @@ const sidebars = { type: 'html', value: '', }, + { + type: 'html', + className: 'sidebar-title', + value: 'Beyond', + defaultStyle: true, + }, { type: 'doc', id:'docs/funding' diff --git a/src/css/custom.css b/src/css/custom.css index 33ef2e6e0ea..01e15bc5939 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -81,4 +81,13 @@ a { border-top: 1px solid var(--ifm-color-gray-200); display: block; margin: 0.5rem 0 0.25rem 1rem; +} + +/* Title for sidebar */ +.sidebar-title { + font-size: 0.8rem; + letter-spacing: 0.05rem; + text-transform: uppercase; + font-weight: 600; + color: var(--ifm-color-gray-600); } \ No newline at end of file From a0be826593ae68963bb82cf06cea31806cd4a5f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Sat, 11 Mar 2023 00:43:23 +0100 Subject: [PATCH 232/578] Update index.md Ajuna Follow-up completed --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 98cf6ec9672..d6930b7d261 100644 --- a/applications/index.md +++ b/applications/index.md @@ -333,7 +333,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Perun Network](https://perun.network/) | [Perun Channels](./perun_channels.md) | [GitHub](https://github.com/perun-network/) | ☐ | ☒ | ☒ | | [NewOmega](https://github.com/WiktorStarczewski/newomega.trinity ) | [A blockchain game that cannot be shut down (Milestone 3 and 4)](./newomega-m3m4.md) | [GitHub](https://github.com/WiktorStarczewski/newomega.trinity ) | ☐ | ☒ | ☒ | | [Webb Tech](https://www.webb.tools/) | [Webb Mixer Extended](./MIXERv2.md) | [GitHub](https://github.com/webb-tools) | ☐ | ☒ | ☒ | -| [Ajuna](https://ajuna.io/) | [UnitySDK for Substrate](./ajuna_network_follow_up.md) | [GitHub](https://github.com/JetonNetwork) | ☐ | ☒ | ☐ | +| [Ajuna](https://ajuna.io/) | [UnitySDK for Substrate](./ajuna_network_follow_up.md) | [GitHub](https://github.com/JetonNetwork) | ☐ | ☒ | ☒ | | [Canyon Labs](https://canyon-network.io) | Permanent decentralized storage | [GitHub](https://github.com/canyon-network) | ☐ | ☒ | ☒ | | [ZeroDAO Network](https://zerodao.net/) | [Decentralised reputation systems and social networks](./ZeroDAO_Network.md) | [GitHub](https://github.com/ZeroDAO) | ☐ | ☒ | ☒ | | [Stake Technologies](https://stake.co.jp/) | [ZK Plonk Pallet](./zk-plonk.md) | [GitHub](https://github.com/PlasmNetwork) | ☐ | ☒ | ☒ | From c3071b42f0753494ca04268100c9d8e05d56f810 Mon Sep 17 00:00:00 2001 From: VegeBun Date: Tue, 14 Mar 2023 03:05:36 +0800 Subject: [PATCH 233/578] Add Zkverse application (#1563) * add some web3 grant info * add paln info * Update zkverse.md * Update zkverse.md * add Entity * complete zkverse * update project name * update * update * add some education * delete some doc * delete some doc * delete * update * update * update * update * Update * update --- applications/zkverse.md | 123 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 applications/zkverse.md diff --git a/applications/zkverse.md b/applications/zkverse.md new file mode 100644 index 00000000000..5c3ffcdcf95 --- /dev/null +++ b/applications/zkverse.md @@ -0,0 +1,123 @@ +# Zkverse + +- **Team Name:** Zkverse +- **Payment Address:** 0x8554fff69177C2cf470fA276b0C65dB58b5EfEE5(DAI) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +### Overview + +At present, ZKP technology is constantly developing and innovating in the scaling and expansion track in Ethereum, especially some zk rollup projects, such as zksync, scroll, starknit, etc. So the main goal of this project is to introduce ZKP technology into the Polkadot/Substrate ecosystem. Polkadot/Substrate natively does not support ZKP, so this project(Zkverse, which means zk universe) will provide zk-related pallets to support substrate and more efficient zk proof generation ways. + +### Project Details + +There are three main goals for project: +- Integrate some zkp libray(like bellman, plonk library and eg...) into substrate pallet +- Maximize the efficiency and convenience of zk proof generation(The proof is not generated on the chain, but through some developer friendly libraries(like snarkjs) which will be adapted to the zk lib on substrate-based chain.). This is very important and convenient for scaling. It can realize rollup for app-specific Dapps and greatly increase the throughput of the substrated-based chain. It can be said "Off-chain execution and on-chain verification". +- Publish some tutorial blogs/demos to let more substrate community developers enjoy the convenience of the above zkp development kits. + +Meanwhile, We know that snakjs and circom are excellent and popular zkp development libraries. They are very popular in the Ethereum ecosystem and can automatically generate verification contract codes. We observed this very good feature, so we want to generate circuit codes more easily through circom, and generate proofs by snarkjs, which will be verified on substrate-based chain. Due to many people using snakjs, and circom is developer friendly, Unlike some domain-specific circuit writing methods, our project can attract many developers who are familiar with snarkjs to develop zkp Dapps in substrate/polkadot ecosystem. They can also enjoy the convenience of developing zkp applications in Polkadot ecosystem. So our main goal is to provide zkp infrastructure that is convenient for Polkadot developers. Also ,we will show a minimal example with Merkle tree and ZKP for rollup. +``` +h(h(h(sm0+sm1) + h(sm2+sm3)) + sm4) (merkle root) + / \ + h(h(sm0+sm1) + h(sm2+sm3)) sm4 (2 siblings) + / \ / + h(sm0+sm1) h(sm2+sm3) sm4 (3 siblings) + / \ / \ / +sm0 sm1 sm2 sm3 sm4 (leaves are the base level, 5 siblings) +^ ^ ^ ^ ^ +| | | | | +m0 m1 m2 m3 m4 +``` + +### Ecosystem Fit +By integrating some very popular ZKP libraries into Substrate pallet, the rollup function of ZKP can be realized on the substrate-based chains, which is convenient for developers to develop zk applications on the substrate-based chains. Although zkp has been relatively active in the Ethereum ecosystem, zkp technology has not been widely popularized in polkadot ecosystem. +- [Zeropool](https://github.com/zeropoolnetwork/zeropool-substrate-groth16-example) implements zk on the substrate chain, but this library has not been updated for a long time. The substrate has gone through many development iterations and needs to be supported by the latest library. +- [Glacier](https://github.com/gbctech) is building a Distaff VM for zk-STARK proof generation and verification that are used to make private smart contracts and private credential verifications. Also, this project is outdate and not latest. +- [zk-plonk](https://github.com/w3f/Grants-Program/blob/master/applications/zk-plonk.md) would like to implement Zk plonk pallet. However, plonk takes a long time to generate proofs and is generated on the chain, so there may be problems in efficiency. Also, the library this project using is not the latest. +- [ZK-Snarks tutorial](https://github.com/w3f/Grants-Program/blob/master/applications/ZK-Snarks%20tutorial.md) want to introduce the substrate community into the zk-snarks concept,but their ideas and goals have been implmentd since last year. Our project will do more education and involve more zk libraries + + +## Team :busts_in_silhouette: + +### Team members +- Name of team leader: Bun - Rust/substrate developer, mainly insterested in cryptography and blockchain +- Name of team member: Aaron + +### Contact + +- **Contact Name:** Bun +- **Contact Email:** csj1071285741@gmail.com + +### Legal Structure + +- **Registered Address:** 5001 BEACH ROAD, #07-37, GOLDEN MILE COMPLEX +SINGAPORE (199588) +- **Registered Legal Entity:** SYN UNIVERSAL PRIVATE LTD + +### Team's experience +- Bun + - He has many years of blockchain experience, is familiar with the underlying protocols, consensus algorithms, and common cryptographic algorithms of blockchain. + - He is mainly interested in zero-knowledge proof, post-quantum cryptography, etc + - He was used to be a member of [chainx](https://github.com/chainx-org/ChainX), mainly develop pallet + - Currently, he is a substrate ambassador jointly decided by oneblock+ community and parity + + +### Team Code Repos +- https://github.com/Zkvers/substrate-zk +- https://github.com/Zkvers/snarkjs-bellman-adapter + + +## Development Status :open_book: +Currently, we have developed a substrate-based chain with zkp protocol and a practical zkp tool (which can adapt to two different zkp libraries to facilitate developers to develop zkp Dapps) + +## Development Roadmap :nut_and_bolt: +We will implement two different proof systems(groth16 and plonk) separately to meet the needs of different developers + +### Overview + +- **Total Estimated Duration:** 2.5 months +- **Full-Time Equivalent (FTE):** 1FTE +- **Total Costs:** 24,000 USD + +### Milestone 1 + +- **Estimated duration:** 1 month +- **FTE:** 1 +- **Costs:** 7,000 USD + +Implement groth16 pallet in Substrate and develop a tool which can let the proof of snarkjs(off-chain) verified by the bellman library(on-chain). In this way, We can make it convenient for developers to develop zkp applications using the groth16(Bellman is an excellent zkp lib, but it is easy to make mistakes when using bellman to develop circuits, and snarkjs can cooperate with circom to write circuit with few mistakes. So we combined them to make the development of zkp applications more safe and efficient). So far, we haven't seen any team do this, but we think it is very meaningful. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 / GPLv3 / MIT / Unlicense | +| **0b.** | Documentation | We will provide both `inline documentation` of the code and a `basic tutorial` that explains how users use these zk tools to generate proof and verify. | +| **0c.** | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide Dockerfiles that can be used to test all the functionality delivered with this milestone. | +| 1. | make groth16 compatible with substrate | We will create a Substrate pallet with groth16 algorithm. Bellman is not fully compatible with `no_std`, so we first make it possible and then we will modify attributes according to `parity-codec` and `Rng` to be compatible with Substrate environment. Finally, a zkp `verification Pallet` on the chain was developed | +| 2. | adapt snarkjs and bellman | We will use circom to write a minimal circuit example of zk rollup. Adapt snarkjs to bellman, so that the proof generated by snarkjs can be verified by the verification pallet on the substrate-based chain. | +| 3. | ZKP education(introduction to theory and detailed example explanation) | First, we will introduce the implementation principle of groth16 algorithm in an easy-to-understand way, and then explain its implementation method and architecture in detail of the example in 2 by a vedio and some articles,so that substrate developers can know how to develop a dapp through zkp technology | + + +### Milestone 2 + +- **Estimated Duration:** 1.5 month +- **FTE:** 1.5 +- **Costs:** 17,000 USD + +Implement plonk pallet in Substrate and develop a tool which can let the proof of snarkjs(off-chain) verified by the plonk library(on-chain). In this way, We can make it convenient for developers to develop zkp applications using the Plonk(The reason is the same as that in milestone 1). So far, we haven't seen any team do this, but we think it is very meaningful. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 / GPLv3 / MIT / Unlicense | +| **0b.** | Documentation | We will provide both `inline documentation` of the code and a `basic tutorial` that explains how users use these zk tools to generate proof and verify. | +| **0c.** | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide Dockerfiles that can be used to test all the functionality delivered with this milestone. | +| 1. | make plonk compatible with substrate | We will create a Substrate pallet with plonk algorithm. Many plonk librares are not fully compatible with `no_std`, so we first make it possible and then we will modify attributes according to `parity-codec` and `Rng` to be compatible with Substrate environment. Finally, a zkp `verification Pallet` on the chain was developed | +| 2. | adapt snarkjs and plonk lib | We will use circom to write a minimal circuit example of zk rollup. Adapt snarkjs to bellman, so that the proof generated by snarkjs can be verified by the verification pallet on the substrate-based chain. | +| 3. | ZKP education(introduction to theory and detailed example explanation) | First, we will introduce the implementation principle of plonk algorithm in an easy-to-understand way, and then explain its implementation method and architecture in detail of the example in 2 by a vedio and some articles,so that substrate developers can know how to develop a dapp through zkp technology | + +## Future Plans +- Compatible with more groth16 and plonk libraries on substrate pallet +- Develop pallet compatible with other proof system at substrate From 0c3b464014c79ef1121f3584fda971e6bccd5f3b Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 13 Mar 2023 20:13:25 +0100 Subject: [PATCH 234/578] Update index.md Zkverse --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index d6930b7d261..f7b377c25fb 100644 --- a/applications/index.md +++ b/applications/index.md @@ -62,7 +62,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [ParaSpell](https://github.com/paraspell) | [ParaSpell_Follow Up 2](ParaSpell_follow-up2.md) | [GitHub](https://github.com/paraspell) | ☐ | ☐ | ☐ | | [justmert](https://github.com/justmert) | [PolkaFlow](polkaflow.md) | [GitHub](https://github.com/justmert) | ☐ | ☐ | ☐ | | [BelSoft](https://www.belsoft.rs) | [Diffy messenger](Diffy_chat.md) | [GitHub](https://github.com/1db1) | ☐ | ☐ | ☐ | - +| [Zkverse](https://github.com/Zkvers) | [Zkverse](zkverse.md) | [GitHub](https://github.com/Zkvers/substrate-zk) | ☐ | ☐ | ☐ | ## 2022 From b4f08ca8d5c69f47f27afe5d8d296183cbc7b205 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tolga=20Yayc=C4=B1?= <40897846+tolgayayci@users.noreply.github.com> Date: Tue, 14 Mar 2023 20:25:36 +0300 Subject: [PATCH 235/578] Create Awesome-Polka.md (#1587 * Create Awesome-Polka.md Awesome Polka - the ultimate social platform for discovering and exploring the most exciting projects in the Polkadot ecosystem! * Update Awesome-Polka.md Milestones revised, project owner dashboard added to milestone 1 and removed mobile application support on this milestone, also milestone 2 deleted. * Update Awesome-Polka.md downgraded to level 1 --- applications/Awesome-Polka.md | 247 ++++++++++++++++++++++++++++++++++ 1 file changed, 247 insertions(+) create mode 100644 applications/Awesome-Polka.md diff --git a/applications/Awesome-Polka.md b/applications/Awesome-Polka.md new file mode 100644 index 00000000000..d554589f616 --- /dev/null +++ b/applications/Awesome-Polka.md @@ -0,0 +1,247 @@ +# Awesome Polka + +- **Team Name:** Awesome Polka +- **Payment Address:** [0xa632439DE1592936fbA3368053eaafd491443493](https://etherscan.io/address/0xa632439DE1592936fbA3368053eaafd491443493) (USDC, Ethereum (ERC20)) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + +## Project Overview :page_facing_up: + +### Overview + +Awesome Polka - the ultimate social platform for discovering and exploring the most exciting projects in the Polkadot ecosystem! Whether you're a developer, investor, or simply a curious enthusiast, Awesome Polka provides a one-stop-shop for accessing comprehensive and detailed applications about the projects. With this cutting-edge platform, you can discover the latest updates and developments, connect with project owners, and stay up-to-date with the most innovative projects in the Polkadot community. + +### Project Details + +Project showcase platforms face several challenges that hinder their effectiveness in promoting and highlighting various projects. The most significant challenges include sustainability and limited ecosystem partner (admins - authorized ones like someone from a DAO) authorities on the platform. These challenges significantly affect user experience and discourage project owners and ecosystem partners from utilizing the platforms fully. To address these issues, there is a need to develop innovative and user-centric strategies that enhance the functionality and sustainability of showcase platforms. + +General overview of Awesome Polka: + +![Awesome_Polka_Mindmap](https://user-images.githubusercontent.com/40897846/223079422-f5d8a6bc-da20-4be8-a0a9-2f1f84f15795.png) + +### Problems + +Let's take a closer look at some of the issues of project showcase platforms that I have encountered: + +**Sustainability**: The long-term sustainability of a platform depends on its ability to consistently deliver value to its users. Manual updates to listed projects through forms and limited content control can result in outdated or inaccurate information, reducing user trust and engagement. + +**UI & UX**: The user experience (UX) of a website or platform can significantly impact user engagement and satisfaction. Poorly designed UIs, slow loading times, confusing navigation, and other factors can all contribute to a low UX, hence reducing user engagement. + +**Poor Search Algorithms**: A platform showcasing tens of projects will require an effective search algorithm to help users easily find the specific project they are looking for. Weak search algorithms can result in irrelevant search results, leading to frustration and decreased user engagement. + +**Static Project Pages**: A project page should provide detailed information about the project, such as its objectives, methodology, team members, progress, and impact. A page that only includes a brief description can leave users with unanswered questions and reduce their interest in the project. + +**Educational Materials & Articles**: For users interested in a particular project, educational materials and related articles can provide valuable context and additional information. Making these resources easy to find and linking them directly to the relevant project pages can enhance user engagement and interest. + +**Ecosystem Partner Rights**: Partnerships with DAOs or other ecosystem partners can bring significant benefits to a platform, such as increased visibility, funding, and community support. However, without proper rights and access, these partners may not be able to fully leverage their resources and expertise to help the platform grow and succeed. + +### Solutions + +Awesome Polka is a social platform that aims to benefit the broader Polkadot developer ecosystem in several ways. Firstly, as Polkadot is one of the fastest-growing protocols, having a platform like Awesome Polka that aggregates all the projects in the ecosystem can help to further increase its size and diversity. + +Additionally, Awesome Polka provides a fluent user experience that enables more people to stay informed about what's happening on Polkadot. By making it easy to access detailed information about projects and events, Awesome Polka helps to promote collaboration and engagement among developers and enthusiasts alike. + +Finally, the platform will be continually supported through Twitter sharing and events, ensuring that it remains a vibrant hub of activity within the Polkadot ecosystem. + +Awesome Polka provides solutions to the problems mentioned in the previous statements in the following ways: + +**Solution to Sustainability** + +Awesome Polka has 2 personas for managing the platform: **Project owners** that want to publish their project on Awesome Polka, and **ecosystem partners** that is authorized ones like someone from a DAO, or from Polkadot team. + +Project owners can send a request to publish their project. After review and approval, they will receive login information to publish and edit their project's page via their web3 wallets on a special dashboard. This enables project pages to be updated by project owners all the time and have unique dynamic pages. + +On the other side, ecosystem partners can have admin access to Awesome Polka. They can approve or reject projects and request to remove any harmful content with an explanation. This allows ecosystem partners to help manage Awesome Polka and ensure that all projects are aligned with sustainability goals. + +In summary, Awesome Polka provides a platform where project owners and ecosystem partners can work together to create long-term sustainable platform. By empowering project owners to create and manage their own projects and providing ecosystem partners with the tools to manage and monitor the platform, Awesome Polka helps to create a sustainable future for all. + +**Improvement on UI & UX** + +Awesome Polka has a simple and effective user interface that makes it easy to navigate the website and find the information you are looking for. With just a few clicks, users can access general information and project details on the platform. The user interface has been designed to be fresh and cross-platform compatible, which ensures a seamless and enjoyable user experience regardless of the device or browser used. + +The platform is continually undergoing UI developments to enhance the user experience further. At the final stage of development, the user interface will be fully responsible and optimized for all screen sizes, ensuring that users have a consistent and enjoyable experience across all devices. Overall, Awesome Polka prioritizes usability and user experience to create a platform that is both informative and easy to use. + +Home Page | Projects Page | Articles Page +:-------------------------:|:-------------------------:| :-------------------------: +![Awesome Polka Home Page](https://user-images.githubusercontent.com/40897846/223079619-cd90d6e0-f406-4d0f-bfda-00126b4d41d5.png)| ![Awesome Polka Projects Page](https://user-images.githubusercontent.com/40897846/223079640-0e47ab39-b667-4819-a20f-f1257449bf5c.png) | ![Awesome Polka Articles Page](https://user-images.githubusercontent.com/40897846/223079652-157a8c4e-a28f-40ea-9aa4-feadc5386e8d.png) + +**Solution to Poor Search Algorithms** + + +Awesome Polka has a powerful search infrastructure that uses Algolia to deliver detailed and lightning-fast search results. + +On Awesome Polka, category list exist to organize projects in detail. Ecosystem partners can add categories to this category list according to ecosystem needs, while project owners can select their category and subcategory while adding their project to the platform. Awesome Polka automatically integrates new categories into relevant pages to increase search efficiency. + +Moreover, Awesome Polka's search infrastructure uses a detailed searching matrix. Unlike most showcase platforms that only use titles to search for anything, Awesome Polka's range of parameters is much wider, ranging from titles to project descriptions. This ensures that users can find what they are looking for more easily and with greater precision. + +In summary, Awesome Polka's search infrastructure is designed to provide a seamless and efficient user experience. Additionally, ecosystem partners work to ensure that the platform's categories are up-to-date and relevant to the needs of the community, further enhancing the search experience. + +Search Element | Search Focused +:-------------------------: | :-------------------------: +| + +**Solution on Static Project Pages** + +On Awesome Polka, project owners can manage their project pages, which include several modules such as: + +- Project Description +- Token Stats +- GitHub Stats +- Team Info +- Latest Articles +- Frequently Asked Questions +- Job Postings + +The number of these modules will be increased and further developed. + +Project owners can update their project page using these modules. In the future, additional modules can be added based on the needs of the ecosystem. + +In summary, project pages on Awesome Polka are highly customizable, allowing project owners to showcase their projects using a variety of modules. By providing these modules, Awesome Polka enables project owners to provide up-to-date information about their projects and engage with the ecosystem more effectively. + +**Improvement on Educational Materials & Articles** + +Awesome Polka offers a platform for project owners to publish educational materials and articles to inform and engage with the ecosystem. With the built-in editor, project owners can create compelling content that keeps their audience up-to-date on the latest developments in their projects. By providing these tools, Awesome Polka helps to create a more informed and engaged community. + +**Improvement on Ecosystem Partner Rights** + +Ecosystem partners play a crucial role in ensuring the sustainability of the Awesome Polka platform. By giving them admin rights, they can help manage the platform and ensure that it meets the needs of the community. The committee responsible for this role will be selected based on their ability to review and manage projects effectively. + +#### Technology Stack + +- AWS App Sync (GraphQL) +- AWS Amplify +- Next.js +- Additional Tools & Frameworks + - Redux + - Tailwind CSS + - Magic (Web3 Auth & Wallet) + - Algolia (Search Infrastructure) + +#### Documentation + +Once all project milestones have been accomplished, we will create and publish comprehensive technical documentation that provides all the necessary information for end users to fully understand the system and its capabilities. + +#### PoC/MVP or other relevant prior work or research on the topic + +**Awesome Polka MVP Link:** https://dev.awesomepolka.org + +### Ecosystem Fit + +- **Where and how does your project fit into the ecosystem?** + + Polkadot's [User Interface section](https://wiki.polkadot.network/docs/build-open-source#user-interface) is the ideal place to start for the Awesome Polka project, offering the best opportunity for success. + +- **Who is your target audience (parachain/dapp/wallet/UI developers, designers, your own user base, some dapp's userbase, yourself)?** + + Awesome Polka targets a diverse range of audiences, including individuals who are interested in learning about Polkadot projects and their latest updates. This includes investors, enthusiasts, and other stakeholders who want to stay up-to-date with the developments in the Polkadot ecosystem. + + In addition to individuals, Awesome Polka also targets both early-stage and live projects on the Polkadot ecosystem. By providing a comprehensive platform that supports projects of all sizes, Awesome Polka aims to support the growth and development of the entire Polkadot ecosystem. + + Furthermore, Awesome Polka also targets ecosystem partners such as DAOs who can help to make the platform more sustainable and aligned with their vision. By engaging with the community and involving ecosystem partners in the management of the platform, Awesome Polka aims to create a more collaborative and impactful platform that benefits everyone involved in the Polkadot ecosystem. + +- **What need(s) does your project meet?** + + Awesome Polka meets the needs I mentioned in the solution section above, but if I have to write it as a summary, it covers the following: + + - **Sustainable project management:** The project ensures sustainable project management by providing a comprehensive and structured approach to project management. This approach includes planning, execution, monitoring, and control of project activities, which helps to achieve project goals while minimizing risks and resource wastage. + + - **Strong SEO optimization:** The project meets the need for strong SEO optimization by implementing best practices for on-page and off-page SEO. This includes optimizing content for keywords, ensuring site speed and mobile responsiveness, and building high-quality backlinks to improve search engine rankings and visibility. + + - **Fresh and easy-to-use UI:** The project meets the need for a fresh and easy-to-use UI by providing a user-friendly interface that is intuitive and easy to navigate. This helps to enhance the user experience and encourages users to engage with the project more frequently. + + - **Efficient and lightning-fast search infrastructure:** The project meets the need for efficient and lightning-fast search infrastructure by implementing a robust search system that enables users to find the information they need quickly and easily. This ensures that users can access the project's content and resources without delays, which improves overall usability and satisfaction. + + - **Detailed project modules:** The project meets the need for detailed project modules by providing comprehensive information on various project aspects such as token stats, GitHub activity, job postings, and so on. This helps users to stay informed about project updates and developments, which enhances transparency and trust in the project. + +- **Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem?** + - **If so, how is your project different?** + - Yes, I found a similar project called Polka Project, there may be other projects, but let me tell you about the differentiating aspects of Awesome Polka. + - Detailed filtering and search options for easier and efficient project discovery + - Ability for projects to use modules for article sharing and job postings and so on + - Display of GitHub repository information and statistics + - Display of token information, including market capitalization, total volume, and price + - A learning section with resources for the Polkadot ecosystem + - Sharing of project team information. + - Dashboard for Projects Owners and Admins to manage platform sustainable. + +## Team :busts_in_silhouette: + +### Team members + +- Tolga Yaycı + +### Contact + +- **Contact Name:** Tolga Yaycı +- **Contact Email:** [tolgayayci@protonmail.com](mailto:tolgayayci@protonmail.com) +- **Website:** [LinkedIn](https://www.linkedin.com/in/tolgayayci/) + +### Legal Structure + +- **Registered Address:** - +- **Registered Legal Entity:** - + +### Team's experience + +As a full-stack developer with 2 years of experience, I have honed my skills in software development, with a focus on dApp development in the past year. I have a deep interest in the Web3 and NFT space and have put my skills to the test by creating a number of relevant applications. In addition to my experience, I have developed detailed React and Next.js projects, further enhancing my ability to build robust and scalable web applications. + +In addition to my technical skills, I have also been actively involved in the wider tech community. I have served as a Chainlink Community Advocate, Aave Turkey Community Manager, and Founding Chair of Gazi University ACM Student Chapter. My previous role as a Microsoft Learn Student Ambassador has also given me the opportunity to share my knowledge and experience with others. I have set of experiences and skills and particularly in the areas of full stack software development and community management. + +### Team Code Repos + +- https://github.com/tolgayayci/awesome-polka/tree/dev +- https://github.com/tolgayayci + +### Team LinkedIn Profiles + +- https://www.linkedin.com/in/tolgayayci + + +## Development Status :open_book: + +The user interface and search infrastructure of this project are largely complete and ready for discovery. To get a glimpse of the minimum viable product (MVP), you can either take a look at the repository or visit the website. + + + +## Development Roadmap :nut_and_bolt: + +This project is planned as 1 milestone, it will be completed in one months. + +- **Total Estimated Duration:** ~1 month +- **Full-Time Equivalent (FTE):** 1 +- **Total Costs:** 10,000 USD + +### Milestone 1 + +- **Estimated duration:** 1 month +- **FTE:** 1 +- **Costs:** 10,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Unlicense | +| **0b.** | Documentation | I will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | I will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| **0e.** | Article | I will publish an **article**/workshop that explains what was done/achieved as part of the grant. | +| **1.** | UI & UX Development | **Home Page:** Visually appealing and user-friendly homepage which includes latest articles, popular categories and many more

**Projects Page:** Showcase page with detailed filtering and search infrastructure

**Project Detail Page:** Project details page to display detailed information about project with several modules like explained in the solution

**Articles Page:** Articles page to showcase informative articles related to the subject

**Article Detail Page:** Detail page for individual articles to display their full content

**Ranking Page:** Ranking page based on votes and token stats which is supported by CoinGecko api to showcase popular projects and articles

**Learn Page:** Useful resources to learn about polkadot ecosystem

**UX Improvements & Testing:** I will work to improve the user experience by ensuring that the user interface is fully compatible with mobile and tablet devices. | +| *2.* | Project Owner Dashboard | As part of this milestone, I will be implementing both the frontend and backend components of the Project Owner Dashboard. This involves designing and developing the user interface (UI) for the dashboard, as well as building the necessary backend infrastructure to support its functionality. To ensure the quality of my work, I will conduct thorough testing to ensure that the dashboard is user-friendly and performs as expected. My ultimate goal is to provide project owners with a seamless and efficient experience when updating their pages and publishing articles on our platform. + +## Future Plans + +I will manage the **@awesomepolka** Twitter account and keep the followers of the Awesome Polka community updated on the latest projects added to the platform. Additionally, I will create monthly threads to share developments with the community. + +Besides, to ensure the best possible user experience, I will actively monitor the Awesome Polka platform for any bugs or technical issues that may arise. I am committed to maintaining the platform's quality, and any problems that are identified will be addressed promptly. + +I will conduct ongoing maintenance and support for a year to ensure the smooth functioning of the platform. If users encounter any issues while using Awesome Polka, they can report them by creating a GitHub issue or by filling out a form that is available on the website. + + My goal is to provide a reliable and user-friendly platform for the web3 community, and I am dedicated to addressing any issues that arise in a timely and efficient manner. + +## Referral Program (optional) :moneybag: + +- **Referrer:** - +- **Payment Address:** - + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Web3 Foundation Website + From 3e3121e8e4ec485a121bda3b3452376684ad9ea5 Mon Sep 17 00:00:00 2001 From: Jacob Lee Date: Wed, 15 Mar 2023 03:26:45 +0800 Subject: [PATCH 236/578] Claps Health (#1440) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Create Claps * Rename Claps to Claps.md * Update Claps.md * Update Claps.md * Update Claps.md Remove DID and NFT from milestone 1 deliverables, update all milestone 1-4 table. Add Use cases and architecture diagram. * Update Claps.md * Update Claps.md * Update Claps.md Updated milestone deliverable table, each line contained in one box. * Update Claps.md 1. Overview updated Move the position of AI from patient to health practitioners. For reference: “The Claps AI is designed to support health practitioners in tracking patients' data on a daily basis.” 2. Architecture updated Add IPFS swam to substrate for health education content storage Add Claps Health Data Sharing Protocol 3. Solution updated Remove personal AI assistant Add Health practitioners AI assistant Add Ominichannel 4. Technology updated Add Substrate blockchain Add SSI Add Zero-knowledge proof for enhanced privacy protection Add Zero-knowledge proof model diagram 5. Milestone Deliverable Add Enterprise Registration to M1 Replaced M3 with Data Sharing Protocol Replaced M4 with Omnichannel 6. Add Regulation and Compliance with HIPAA/GDPR * Update Claps.md Programing language on milestone deliverable M1-M4 Revised * Update Claps.md Update milestone deliverable 1-4, add more detail of technical specifications * Update Claps.md 1. Update milestone deliverable 1-4, add technical specifications. 2. Update proposal format. * Update Claps.md * Update Claps.md Add zk-proof spec. Add basic user interface, for more details please check the Figma link. * Update Claps.md The revised product roadmap for Claps Health development is as follows: Phase I - Minimum Viable Product (MVP) Development: Patient registration Fixed challenge card Decentralized applications (dApps) Health data sharing protocol Incentive program for patients Phase II - Full-featured Application Development: (Not show on this proposal milestones) Enterprise registration Dynamic challenge card Health practitioner engagement Patient groups Health education content management Omni-channel backend Health data analysis backend Note that the original roadmap has been modified from 4 milestones to 2 milestones for Phase I, as we prioritize the development of the MVP to provide the core functionality of our product as soon as possible. We have also revised our grant application level to Level 2. --- applications/Claps.md | 260 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 260 insertions(+) create mode 100644 applications/Claps.md diff --git a/applications/Claps.md b/applications/Claps.md new file mode 100644 index 00000000000..883e3004b48 --- /dev/null +++ b/applications/Claps.md @@ -0,0 +1,260 @@ +# Claps Health + +- **Team Name:** Taiwan Research-based Biopharmaceutical Manufacturers Association +- **Payment Address:** 0x39D3E0c7AAcfbCa133f08cfb153B4888fd36bA9B (DAI) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Overview + +### Make self-care a fun game with Claps +Claps is the mobile app that integrates gaming with personal health tracking can be a fun and engaging way to encourage users to track their health on a daily basis and make healthy lifestyle choices. The app could allow users to play games and record the results as a health diary, and reward them with incentives and rewards for completing diagnostic tests or answering questionnaires such as mood tracking. + +Claps defines itself as a "gamified health tracking app" that uses gaming elements to motivate users to track their health and make healthy lifestyle choices. By integrating with artificial intelligence (AI) into a gamified health tracking app to provide a more personalized and interactive user experience. + +The Claps AI is designed to support health practitioners in tracking patients' data on a daily basis. The AI algorithms analyze patients' health information and provide insights and recommendations to assist health practitioners in delivering personalized care to their patients. This can improve patient outcomes and help practitioners provide the most effective and efficient care. + +Claps is designed to be engaging and enjoyable to use, and could provide users with feedback and support to help them achieve their health goals. It could be a useful tool for promoting health and well-being, and could be particularly appealing to users who enjoy gaming and are looking for a more interactive and engaging way to track their health. + +By using Substrate technology to store and manage data, facilitate data sharing, dapps contracts, and create and manage digital assets such as NFT with patient’s data. In the long-term, patients could potentially benefit from blockchain including in the areas of insurance and financial support. By leveraging the transparency, security, and efficiency of blockchain technology, patients could be better equipped to access the care and support they need. + +Taiwan Research-based Biopharmaceutical Manufacturers Association (TRPMA) is jointly established by 28 biopharmaceutical manufacturers and developers and 19 regenerative medicine companies based in Taiwan. This proposal is proposed by Jacob Lee, director of the digital health team at TRPMA. Jacob Lee is the co-designer of phrOS(Personal Health Records Operating System), a Ethereum private blockchain and IPFS Cluster based SaaS at Medical Center Hospital in 2017. + +## Project Details + +### Architecture +![claps_health_diagam](https://user-images.githubusercontent.com/14127551/218294412-3f0c2a9e-774a-49f0-b4c0-67e8ee6cb896.png) + +## Claps App Use Case + +### Patients + +Use the app to track their mood on a daily basis +Receive rewards by reporting their mood or blood pressure, or by completing other activities such as questionnaires. By providing these proof of work to the Claps dapps(Claps DAO). +View personalized health education content provided by health practitioners +Share their mood tracking data with their healthcare provider for review and analysis + +### Pharmaceutical Company + +Use the data collected by the app to inform their product development and marketing strategies +Provide funding to health practitioners to produce health education content for the app +Use the app as a platform to promote their products and services to patients + +### Health Practitioners + +Use the app to provide personalized health education content to patients +Use the data collected by the app to inform treatment decisions and track patient progress +Receive funding from pharmaceutical companies to produce health education content for the app + +### AI Assistant + +Collect and analyze data from patients' mood tracking +Provide personalized recommendations and education content to patients based on their data +Facilitate communication and collaboration between patients, health practitioners, and pharmaceutical companies. + +## Solutions +### Gamefield Mood Tracking + +By gamifying the experience through a health diary design, aims to break through the challenge of collecting mental health real-world data. The app provides a challenge card and a way for users to set personal goals, track progress, and receive rewards for their efforts. This approach makes the experience more engaging, encouraging patients to stick with their tracking habits and provide more accurate data. The personal goal-setting feature also caters to a wide range of needs and preferences, making the app more accessible and appealing to a broad audience. + +### Health Practitioners AI Assistant + +AI can help health practitioners in various ways by analyzing patient data and providing actionable insights to improve patient care. The use of AI can save time and improve the efficiency of health practitioners by automating routine tasks and allowing them to focus on more complex and critical tasks. AI-powered alerts can help practitioners detect potential issues earlier and provide more proactive care. By providing tailored recommendations based on individual patient data, AI can also help practitioners make more informed decisions and provide personalized care. + +### Omni-channel + +This allows pharmaceutical companies to track and analyze the behavior and engagement of healthcare practitioners, patients, and other stakeholders, and make data-driven decisions about their marketing and communication strategies. These solutions can help pharmaceutical companies to make data-driven decisions about their marketing and communication strategies, which can help improve patient outcomes and the quality of care. + +### Web3 Technology + +Web3 technologies can give individuals more control over their personal health records, as they can choose who has access to their data and when it is shared. This can help to enhance privacy and ensure that personal health information is used appropriately. + + +## Our Goals +Improve the quality of care and outcomes for patients. + +- Chronic disease awareness and prevention +- Maternal and infant health +- Mental and behavioral health +- Nutrition, exercise and obesity prevention +- Alcohol, tobacco use and substance abuse + +Claps enable patients to self-report, self-test, and access health education, and that incorporate AI-based features, can be a useful tool for improving the quality of care and outcomes for patients. By providing patients with the tools and support they need to manage their own health, these apps can help to empower patients and to improve the effectiveness of healthcare delivery. + +## Technology + +### Substrate Blockchain + +By using Substrate blockchain technology to store and manage data, facilitate data sharing, dapps contracts, and create and manage digital assets with patient’s data. Leveraging Substrate blockchain technology for healthcare can offer significant benefits for patients and healthcare industry, providing them with enhanced privacy protection and better data consent management. By taking control of their own data, patients can access the care and support they need more efficiently and securely. + +### Self-Sovereign Identity (SSI) + +Self-Sovereign Identity (SSI) is a decentralized digital identity model that puts individuals in control of their personal information and how it is used. This approach to identity provides users with more privacy and control over their personal information, and helps to prevent data breaches and misuse of sensitive information. + +### Zero-knowledge proof + +The zero-knowledge proof is part of SSI, this means that a user can prove their identity or access rights to a service without revealing any sensitive personal information. This helps to protect the privacy of the user and reduce the risk of data breaches, while still enabling secure and reliable authentication. +![zkproof](https://user-images.githubusercontent.com/14127551/218294803-fefcbb47-9be2-418a-a595-424302e838bb.png) + +### GPT-3 AI model + +GPT-3 (Generative Pre-trained Transformer 3) is a state-of-the-art language processing artificial intelligence developed by OpenAI. The GPT-3 chatbots are designed to interact with patients on a daily basis to support and enhance the continued care work of health practitioners. It's always monitored by health practitioners to ensure the accuracy and relevance of their responses. + +## Ecosystem Fit + +The pharmaceutical companies in this ecosystem can provide information to doctors, doctors provide consultation and health education to patients, and patients provide self-health tracking to doctors, could potentially be an effective way to improve the quality and accessibility of healthcare. In this model, the pharmaceutical company would be responsible for providing relevant and accurate information to doctors, who would then use this information to provide consultation and health education to patients. Patients would be responsible for tracking their own health and providing this information to doctors, which could help to inform treatment and care decisions. + +## Team :busts_in_silhouette: + +### Team members + +- Jacob Lee, Team Lead +- Brady Liu, Project Tech Lead +- Dr. Nicky Liu, Project Manager +- Carol Cheng, Regulation and compliance + +### Contact + +- **Contact Name:** Jacob Lee +- **Contact Email:** jacoblee@dtco.co +- **Website:** https://trpma.org.tw/ + +### Legal Structure + +- **Registered Address:** 1F, No 465-1, Sec. 6, Chung-hsiao E. Rd., Nan-kang Dist., Taipei City 11557, ROC TAIWAN + +- **Registered Legal Entity:** TAIWAN RESEARCH-BASED BIOPHARMACEUTICAL MANUFACTURERS ASSOCIATION + +### Team's experience + +Taiwan Research-based Biopharmaceutical Manufacturers Association (TRPMA) is jointly established by 28 biopharmaceutical manufacturers and developers and 19 regenerative medicine companies based in Taiwan. This proposal is proposed by Jacob Lee, director of the digital health team at TRPMA. Jacob Lee is the co-designer of phrOS(Personal Health Records Operating System), a Ethereum private blockchain and IPFS Cluster based SaaS at Medical Center Hospital in 2017. The Digital Health Team at TRPMA has also supported the Taiwan government by developing a regenerative medicine management system from 2020-2023, and actively working on a Covid-19 project with a Dublin study team since 2021. + +### Team Code Repos + +Claps Health +https://github.com/Claps-Health/ + + +- https://github.com/jacobleegithub/ +- https://github.com/bradyliu-dtco/ + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/jacob-lee-aa435916/ +- https://www.linkedin.com/in/brady-liu-734a27106/ +- https://www.linkedin.com/in/nicky-lu-449b02131/ + + +## Development Status :open_book: +New project + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 4.5 months +- **Full-Time Equivalent (FTE):** 4 FTE +- **Total Costs:** 30,000 USD + +### Milestone 1 - Patient Identity and Security Framework + +- **Estimated Duration:** 2.5 month +- **Developers:** FTE x 4 +- **(Product Design x 1, Dapp Engineer x 1, System Engineer x 1, App Engineer x 1)** +- **Costs:** 20,000 USD + +| Number | Deliverable | Specification | +| ------ | ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide both inline documentation of the code and a basic tutorial that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works. | +| 0c. | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will post an article on Twitter and Meta(Facebook) for English and Mandarin speakers communities. | +| 1 | Patient ID creation | \- Develop the patient ID creation tool in Javascript.
\- Generate a new ID on client-side for the patient based on BIP39. (12 words passphrase)
\- Encrypted key store(private key) by patient user’s password (AES-256 GCM mode)
\- Implement the decentralized design using public key cryptography. (Client signed by private key) | +| 2 | Patient profile management module | \- Patient profile off-chain management tools developed by JAVA
\- Support AWS S3 storage
\- Updating of patient profile
\- ECIES end-to-end data encryption to secure profile data transfer. | +| 3 | Patient ID on-chain authentication | \- zkSNARKs Groth16 based on Non-Interactive Zero-Knowledge Proof (NIZKP) developed by !ink Smart Contract
\- Receive credential by trust issuer (token file)
\- Zero-knowledge proof for on-chain authentication to prove patient ID without private information | +| 4 | Challenge card dapp module | Provide a way for users to set personal goals, track their progress, and receive rewards for their efforts. Dapp developed in ink! smart contract.

\- Add challenge card
\- Add personalized mission
\- Delete challenge card
\- Receive daily mission
\- Receive rewards by mission completed
\- Receive rewards by challenge completed
\- Rewards by fungible tokens | +| 5 | Create database | Create a docker container to start a mySQL database to store all the information, define the models to store and create tables and indexes. | +| 6 | Database encryption module | We will implement a database encryption AES-256 GCM module of all stored and transmitted data to prevent unauthorized access or tampering. Developed by JAVA. | +| 7 | Android apk | We will provide android apk for above challenge card data input and functional verification
We will provide android apk for user challenge card with wallet to receive rewards | +| 8 | Testing | Achieve a testing coverage of the functionalities above 90% | + +### Milestone 2 - CPatient Engagement and Data Sharing +- **Estimated Duration:** 2 month +- **Developers:** FTE x 4 +- **(Product Design x 1, Dapp Engineer x 1, System Engineer x 1, APP Engineer x 1)** +- **Costs:** 10,000 USD + +| Number | Deliverable | Specification | +| ------ | ------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide both inline documentation of the code and a basic tutorial that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works. | +| 0c. | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an article/workshop video that explains how Claps Health Benefits to patients and healthcare business. Patients are the end-users of Claps Health application, so it's important to explain how Claps Health will benefit them. The article/video will cover topics such as how the app helps patients manage their health, how it improves access to healthcare, and how it ensures data privacy and security. Article/Workshop will be in English and Mandarin. | +| 1. | Claps Health Data Sharing protocol: Consent management | We will implement a health data sharing protocol based on dapp to enable secure sharing of health data among various stakeholders. Developed by !ink Smart Contract.
\- Accept consent
\- Revoke consent
\- View data sharing requests

a. The consent data will be stored anonymously, without any personal identifying information.
b. The smart contract will be accessible to authorized parties using public key cryptography.
c. Users are able to request that their data be permanently deleted from the system at any time (Please reference Data privacy control module)
d. Users are able to see a list of all the organizations that have requested access to their data, along with the specific types of data being requested, and be able to manage these requests. | +| 2. | Claps Health Data Sharing protocol: Patient data feed | We will implement a health data feed on the backend, developed using Java.
\- Subscribe data feed by numbers of Patient ID
\- Unsubscribe data feed by Patient ID

a. The data feed will allow authorized parties to access and subscribe to a patient's health data in real-time.
b. The data will be encrypted using ECIES to ensure data security.
c. The data feed will be accessible through a secure API, which will authenticate and authorize users using public key cryptography.
d. Support delete data by patient required. | +| 3. | Data privacy control module | We will implement a data privacy control module to allow patients to exercise their rights under the GDPR, delete their personal data by patient’s requirement. Developed by JAVA. | +| 4. | Audit logging on web backend | The web backend will implement an auditable log of all access to the system, including who accessed it and what actions were performed, to help detect and respond to security incidents. Developed by JAVA. | +| 5. | Support for Mandarin speakers community | Translate the app to Mandarin and add support to switch languages | +| 6. | Testing | Add tests to the components. Achieve a testing coverage of the functionalities above 90% | +| 7. | Final setups | Deal with all production issues/configuration requirements such as creating the final docker image, reviewing the documentation and verifying everything works fine. | +| 8. | Deploy the app | Define the final domain (Claps.health) and deploy the app | + +## User Interface + +The user interface will be based on [here](https://www.figma.com/file/Zlx3Qq4EoFtuV8AopAffVl/Claps-Health-Mobile-for-Patients?node-id=0%3A1&t=pUNA27WItIqVx5n8-1) + +![app01](https://user-images.githubusercontent.com/14127551/223708073-28ffd406-a286-4f80-9476-c728762f6812.png) + +p.s. The gray area will be for future development, such as health education services. +The web backend for pharmaceutical and healthcare service providers, including omni-channel and health data analytics, will also be a focus of our future development. + +## Regulation and Compliance with HIPAA/GDPR + +### Pseudonymization + +By using pseudonyms, the health data can be processed and shared in a secure and de-identified manner, while still allowing for verifiable identification. + +### End-to-end data encryption +Claps Health offers tools based on public key cryptography ECIES encryption to secure data storage and transfer are compliance with patient data protection and industry requirements. Only authorized parties can access the data. The application layers are using AWS S3 industry compliance secure storage. + +### Database data encryption +Claps Health backend database using AES256 GCM data encryption to secure database data. Based on data access policy, only authorized parties can access the data. The application layers are using AWS S3 industry compliance secure storage. + + +### Audit logs + +The auditable log of all access to the system, including who accessed it and what actions were performed +Consent Tracking + +By implementing consent tracking smart contracts, organizations can demonstrate that they are following privacy regulations and that patients have control over their health data. + +### Right to be forgotten + +Claps Health does not store personal data on the blockchain and there is only random ID and hash code on chain. Individuals have more control over their data and can request deletion of the corresponding data in the database. Ensure that all personal data is securely deleted and no residual information remains that could be used to re-identify individuals. + +However, it is important to note that HIPAA/GDPR compliance involves a comprehensive set of rules and regulations for protecting health information. This proposal does not cover all of the guidelines such as physical access, governance of organizations..etc. + +## Future Plans + +## Health Educations + +We are planning to expand Claps Health by developing a health education publishing service. This service will be available on our web backend and mobile app, and will allow healthcare providers to create and share educational content with their patients. By providing easy access to reliable health information, we hope to empower patients to take control of their health and wellbeing. + +## Omni-Channel and Health data analytics + +We recognize that healthcare providers need a way to analyze large datasets to identify patterns in health behaviors and improve patient outcomes. To meet this need, we are planning to develop an omni-channel health data analytics service on our web backend. Based on patient Informed Consent Management + +### Open AI Integration + +We are planning to integrate Open AI into Claps health mobile app in a second phase, after testing the market and gathering feedback. This approach allows us to minimize development costs and time in the first phase, while also gathering feedback and making sure that the features that we implement in the second phase are the most useful and needed. + +### Expand Substrate + +We are planning to build an omnichannel platform for pharmaceutical companies and healthcare related based on Polkadot Substrate for expanding the ecosystem, providing a more secure and private way of data management, better interoperability, automation and improved healthcare education communication. + +### Additional Information + +Reference: +https://www.ledgerinsights.com/blockchain-health-records-taiwan/ +https://medium.com/dtco/blockchain-enabled-personal-health-record-os-challenges-opportunities-in-health-care-55161e3a5a32 From bd4d23947420c71dd72a33567f20d64abea02163 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 14 Mar 2023 20:29:44 +0100 Subject: [PATCH 237/578] Update index.md Claps Health --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index f7b377c25fb..e7fd38a4354 100644 --- a/applications/index.md +++ b/applications/index.md @@ -63,7 +63,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [justmert](https://github.com/justmert) | [PolkaFlow](polkaflow.md) | [GitHub](https://github.com/justmert) | ☐ | ☐ | ☐ | | [BelSoft](https://www.belsoft.rs) | [Diffy messenger](Diffy_chat.md) | [GitHub](https://github.com/1db1) | ☐ | ☐ | ☐ | | [Zkverse](https://github.com/Zkvers) | [Zkverse](zkverse.md) | [GitHub](https://github.com/Zkvers/substrate-zk) | ☐ | ☐ | ☐ | - +| Taiwan Research-based Biopharmaceutical Manufacturers Association | [Claps Health](Claps.md) | [GitHub](https://github.com/Claps-Health/) | ☐ | ☐ | ☐ | ## 2022 From 4b7f63e93122b01e37e5d3bfe2ebd345b70fc8dc Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Tue, 14 Mar 2023 12:32:56 -0700 Subject: [PATCH 238/578] Fix website (#1613) * Update Awesome-Polka.md Close tags to fix website * Update Awesome-Polka.md fix br tags --- applications/Awesome-Polka.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/applications/Awesome-Polka.md b/applications/Awesome-Polka.md index d554589f616..511f200ac91 100644 --- a/applications/Awesome-Polka.md +++ b/applications/Awesome-Polka.md @@ -77,7 +77,7 @@ In summary, Awesome Polka's search infrastructure is designed to provide a seaml Search Element | Search Focused :-------------------------: | :-------------------------: -| +| **Solution on Static Project Pages** @@ -200,7 +200,7 @@ In addition to my technical skills, I have also been actively involved in the wi The user interface and search infrastructure of this project are largely complete and ready for discovery. To get a glimpse of the minimum viable product (MVP), you can either take a look at the repository or visit the website. - + ## Development Roadmap :nut_and_bolt: @@ -223,7 +223,7 @@ This project is planned as 1 milestone, it will be completed in one months. | **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | | **0d.** | Docker | I will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | | **0e.** | Article | I will publish an **article**/workshop that explains what was done/achieved as part of the grant. | -| **1.** | UI & UX Development | **Home Page:** Visually appealing and user-friendly homepage which includes latest articles, popular categories and many more

**Projects Page:** Showcase page with detailed filtering and search infrastructure

**Project Detail Page:** Project details page to display detailed information about project with several modules like explained in the solution

**Articles Page:** Articles page to showcase informative articles related to the subject

**Article Detail Page:** Detail page for individual articles to display their full content

**Ranking Page:** Ranking page based on votes and token stats which is supported by CoinGecko api to showcase popular projects and articles

**Learn Page:** Useful resources to learn about polkadot ecosystem

**UX Improvements & Testing:** I will work to improve the user experience by ensuring that the user interface is fully compatible with mobile and tablet devices. | +| **1.** | UI & UX Development | **Home Page:** Visually appealing and user-friendly homepage which includes latest articles, popular categories and many more
**Projects Page:** Showcase page with detailed filtering and search infrastructure
**Project Detail Page:** Project details page to display detailed information about project with several modules like explained in the solution
**Articles Page:** Articles page to showcase informative articles related to the subject
**Article Detail Page:** Detail page for individual articles to display their full content
**Ranking Page:** Ranking page based on votes and token stats which is supported by CoinGecko api to showcase popular projects and articles
**Learn Page:** Useful resources to learn about polkadot ecosystem
**UX Improvements & Testing:** I will work to improve the user experience by ensuring that the user interface is fully compatible with mobile and tablet devices. | | *2.* | Project Owner Dashboard | As part of this milestone, I will be implementing both the frontend and backend components of the Project Owner Dashboard. This involves designing and developing the user interface (UI) for the dashboard, as well as building the necessary backend infrastructure to support its functionality. To ensure the quality of my work, I will conduct thorough testing to ensure that the dashboard is user-friendly and performs as expected. My ultimate goal is to provide project owners with a seamless and efficient experience when updating their pages and publishing articles on our platform. ## Future Plans From a49e02ca893916ef27e3a423618fb2d4214a2651 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 14 Mar 2023 20:36:04 +0100 Subject: [PATCH 239/578] Update index.md Add Awesome Polka --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index e7fd38a4354..92ac54ef685 100644 --- a/applications/index.md +++ b/applications/index.md @@ -64,6 +64,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [BelSoft](https://www.belsoft.rs) | [Diffy messenger](Diffy_chat.md) | [GitHub](https://github.com/1db1) | ☐ | ☐ | ☐ | | [Zkverse](https://github.com/Zkvers) | [Zkverse](zkverse.md) | [GitHub](https://github.com/Zkvers/substrate-zk) | ☐ | ☐ | ☐ | | Taiwan Research-based Biopharmaceutical Manufacturers Association | [Claps Health](Claps.md) | [GitHub](https://github.com/Claps-Health/) | ☐ | ☐ | ☐ | +| [Tolga Yaycı](https://github.com/tolgayayci) | [Awesome Polka](Awesome-Polka.md) | [GitHub](https://github.com/tolgayayci/awesome-polka/tree/dev) | ☐ | ☐ | ☐ | ## 2022 From a11df153ea45ca2c84c3c12c4141cc5c7ab549f6 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Tue, 14 Mar 2023 20:39:09 +0100 Subject: [PATCH 240/578] Fix website --- applications/Claps.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/applications/Claps.md b/applications/Claps.md index 883e3004b48..35ccb460388 100644 --- a/applications/Claps.md +++ b/applications/Claps.md @@ -169,13 +169,13 @@ New project | 0c. | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | | 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | | 0e. | Article | We will post an article on Twitter and Meta(Facebook) for English and Mandarin speakers communities. | -| 1 | Patient ID creation | \- Develop the patient ID creation tool in Javascript.
\- Generate a new ID on client-side for the patient based on BIP39. (12 words passphrase)
\- Encrypted key store(private key) by patient user’s password (AES-256 GCM mode)
\- Implement the decentralized design using public key cryptography. (Client signed by private key) | -| 2 | Patient profile management module | \- Patient profile off-chain management tools developed by JAVA
\- Support AWS S3 storage
\- Updating of patient profile
\- ECIES end-to-end data encryption to secure profile data transfer. | -| 3 | Patient ID on-chain authentication | \- zkSNARKs Groth16 based on Non-Interactive Zero-Knowledge Proof (NIZKP) developed by !ink Smart Contract
\- Receive credential by trust issuer (token file)
\- Zero-knowledge proof for on-chain authentication to prove patient ID without private information | -| 4 | Challenge card dapp module | Provide a way for users to set personal goals, track their progress, and receive rewards for their efforts. Dapp developed in ink! smart contract.

\- Add challenge card
\- Add personalized mission
\- Delete challenge card
\- Receive daily mission
\- Receive rewards by mission completed
\- Receive rewards by challenge completed
\- Rewards by fungible tokens | +| 1 | Patient ID creation | \- Develop the patient ID creation tool in Javascript.
\- Generate a new ID on client-side for the patient based on BIP39. (12 words passphrase)
\- Encrypted key store(private key) by patient user’s password (AES-256 GCM mode)
\- Implement the decentralized design using public key cryptography. (Client signed by private key) | +| 2 | Patient profile management module | \- Patient profile off-chain management tools developed by JAVA
\- Support AWS S3 storage
\- Updating of patient profile
\- ECIES end-to-end data encryption to secure profile data transfer. | +| 3 | Patient ID on-chain authentication | \- zkSNARKs Groth16 based on Non-Interactive Zero-Knowledge Proof (NIZKP) developed by !ink Smart Contract
\- Receive credential by trust issuer (token file)
\- Zero-knowledge proof for on-chain authentication to prove patient ID without private information | +| 4 | Challenge card dapp module | Provide a way for users to set personal goals, track their progress, and receive rewards for their efforts. Dapp developed in ink! smart contract.

\- Add challenge card
\- Add personalized mission
\- Delete challenge card
\- Receive daily mission
\- Receive rewards by mission completed
\- Receive rewards by challenge completed
\- Rewards by fungible tokens | | 5 | Create database | Create a docker container to start a mySQL database to store all the information, define the models to store and create tables and indexes. | | 6 | Database encryption module | We will implement a database encryption AES-256 GCM module of all stored and transmitted data to prevent unauthorized access or tampering. Developed by JAVA. | -| 7 | Android apk | We will provide android apk for above challenge card data input and functional verification
We will provide android apk for user challenge card with wallet to receive rewards | +| 7 | Android apk | We will provide android apk for above challenge card data input and functional verification
We will provide android apk for user challenge card with wallet to receive rewards | | 8 | Testing | Achieve a testing coverage of the functionalities above 90% | ### Milestone 2 - CPatient Engagement and Data Sharing @@ -191,8 +191,8 @@ New project | 0c. | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | | 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | | 0e. | Article | We will publish an article/workshop video that explains how Claps Health Benefits to patients and healthcare business. Patients are the end-users of Claps Health application, so it's important to explain how Claps Health will benefit them. The article/video will cover topics such as how the app helps patients manage their health, how it improves access to healthcare, and how it ensures data privacy and security. Article/Workshop will be in English and Mandarin. | -| 1. | Claps Health Data Sharing protocol: Consent management | We will implement a health data sharing protocol based on dapp to enable secure sharing of health data among various stakeholders. Developed by !ink Smart Contract.
\- Accept consent
\- Revoke consent
\- View data sharing requests

a. The consent data will be stored anonymously, without any personal identifying information.
b. The smart contract will be accessible to authorized parties using public key cryptography.
c. Users are able to request that their data be permanently deleted from the system at any time (Please reference Data privacy control module)
d. Users are able to see a list of all the organizations that have requested access to their data, along with the specific types of data being requested, and be able to manage these requests. | -| 2. | Claps Health Data Sharing protocol: Patient data feed | We will implement a health data feed on the backend, developed using Java.
\- Subscribe data feed by numbers of Patient ID
\- Unsubscribe data feed by Patient ID

a. The data feed will allow authorized parties to access and subscribe to a patient's health data in real-time.
b. The data will be encrypted using ECIES to ensure data security.
c. The data feed will be accessible through a secure API, which will authenticate and authorize users using public key cryptography.
d. Support delete data by patient required. | +| 1. | Claps Health Data Sharing protocol: Consent management | We will implement a health data sharing protocol based on dapp to enable secure sharing of health data among various stakeholders. Developed by !ink Smart Contract.
\- Accept consent
\- Revoke consent
\- View data sharing requests

a. The consent data will be stored anonymously, without any personal identifying information.
b. The smart contract will be accessible to authorized parties using public key cryptography.
c. Users are able to request that their data be permanently deleted from the system at any time (Please reference Data privacy control module)
d. Users are able to see a list of all the organizations that have requested access to their data, along with the specific types of data being requested, and be able to manage these requests. | +| 2. | Claps Health Data Sharing protocol: Patient data feed | We will implement a health data feed on the backend, developed using Java.
\- Subscribe data feed by numbers of Patient ID
\- Unsubscribe data feed by Patient ID

a. The data feed will allow authorized parties to access and subscribe to a patient's health data in real-time.
b. The data will be encrypted using ECIES to ensure data security.
c. The data feed will be accessible through a secure API, which will authenticate and authorize users using public key cryptography.
d. Support delete data by patient required. | | 3. | Data privacy control module | We will implement a data privacy control module to allow patients to exercise their rights under the GDPR, delete their personal data by patient’s requirement. Developed by JAVA. | | 4. | Audit logging on web backend | The web backend will implement an auditable log of all access to the system, including who accessed it and what actions were performed, to help detect and respond to security incidents. Developed by JAVA. | | 5. | Support for Mandarin speakers community | Translate the app to Mandarin and add support to switch languages | From 91338239ba14cee4af1fd916efc38eb4f1edde08 Mon Sep 17 00:00:00 2001 From: Tomas Rawski Date: Thu, 16 Mar 2023 05:59:51 -0300 Subject: [PATCH 241/578] openPayroll proposal (#1592 * openPayroll proposal * Update openPayroll proposal --- applications/openPayroll.md | 280 ++++++++++++++++++++++++++++++++++++ 1 file changed, 280 insertions(+) create mode 100644 applications/openPayroll.md diff --git a/applications/openPayroll.md b/applications/openPayroll.md new file mode 100644 index 00000000000..dc6c0d098c9 --- /dev/null +++ b/applications/openPayroll.md @@ -0,0 +1,280 @@ +# Open Payroll + +- **Team Name:** Polkadrys Labs +- **Payment Address:** 0xe675dC5B4957d78B740D13A58FBC51bD33De068D (DAI - Ethereum network) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +Blockchain decentralized nature, transparency, and immutability make it a promising solution for many industries. We believe that blockchain technology has the potential to revolutionize the way we live our lives, and we want to be a part of that revolution. + +At our core, we are a team of innovators who are passionate about leveraging blockchain technology to build real-life solutions. We believe that the power of blockchain can be harnessed to create a more transparent and secure world. Our goal is to create solutions that are not only technologically advanced, but also practical and applicable to everyday life. + +We ran into a common problem while working for a crypto development shop: The payment process sometimes became erratic, partial payments, late payments and no transparency into how the final number that was assigned in a spreadsheet actually came to be. We believe that the blockchain can make this transparent to the members of a collective, without having to sacrifice privacy nor making it super cumbersome to use. + +In recent years, a growing number of organizations have made a commitment to financial transparency, recognizing the benefits of sharing information about earnings with their employees and stakeholders. Tech workers' cooperatives in the Argentine Federation of Cooperatives [FACTTIC](https://facttic.org.ar/) are a notable example of this trend, providing detailed financial information to members. + +In addition to cooperatives, several companies have positioned themselves as "open numbers" enterprises, providing employees with access to information about the salaries of both workers and owners [Ten Pines](https://cultura.10pines.com/#numeros-abiertos) is a good example of this trending culture. [Buffer](https://buffer.com/resources/revenue-dashboard/), for instance, publishes the salaries of all its employees on its website, and [Whole Foods](https://www.tableau.com/solutions/customer/whole-foods-market-democratizes-data-across-460-retail-stores-with-tableau) allows employees to access financial information on a need-to-know basis. These efforts reflect a growing recognition of the importance of financial transparency in promoting trust and accountability within organizations. + +The benefits of financial transparency are not limited to the private sector, however. Nonprofit organizations such as Charity: Water and The Wikimedia Foundation have also made transparency a priority, regularly publishing detailed financial reports and making them available to the public. As transparency becomes more widespread, it is likely to become an increasingly important tool for promoting fairness, equity, and accountability across a range of sectors and organizations. + +### Overview + +The objective of Open Payroll is to meet the needs of organizations that wish to make transparent payments during a given period. +The objective is to create a contract that enables anyone to configure and generate their own payroll system. + +The payroll contract is owned entirely by its creator. This creator could be a DAO address, a multisig or a single person. The contract manages a treasury from where all the payments are deducted. There is a base amount and a set of multipliers associated to the addresses of the payees. + +E.g. We create a payroll contract for paying developers salaries. We will have a base amount and only one multiplier which is the employee's seniority. +Alice is a junior employee and Bob is a senior employee. Alice's multiplier is 1 and Bob's multiplier is 2. The base amount is 1000. The payroll contract will allow Alice to claim 1000 and Bob 2000 every period. + +The payroll smart contract transparently displays the addresses of all participants, along with the multipliers being utilized, allowing complete visibility to everyone. The initial rollout of this project will be super opinionated and geared towards an open payroll system, but this notion can later be applied to various scenarios, such as salaries, recurring payments, subscriptions, etc. + +### Project Details + +Based on what we exposed in the project Overview section and our past experience, we decided to implement a tool to takle this use case of the blockchain technology stack. + +We'll use following tech stack in the latest stable version: React, Next.js, MUI, PolkadotJS wallet extension, Ink!, Rust, Docker, Git. + +These are the steps that will be done to implement the proposed solution: + +####
1.- Design a front end based on the wireframe proposed + +This is the wireframe that we propose for the frontend: + +- Contract Creation Screen + +![New Contract](https://raw.githubusercontent.com/rtomas/resources/main/polkadot-openPayroll/img_new_contract.jpeg) + +--- + +- Add Beneficiary Screen + +![New Payee](https://raw.githubusercontent.com/rtomas/resources/main/polkadot-openPayroll/img_new_payee.jpeg) + +--- + +- Contract Overview Screen + +![Contract Overview](https://raw.githubusercontent.com/rtomas/resources/main/polkadot-openPayroll/img_contract_overview.jpeg) + +--- + +- Claim Payment Screen + +![Claim Payments](https://raw.githubusercontent.com/rtomas/resources/main/polkadot-openPayroll/img_claim_payment.jpeg) + +--- + +- Contracts Dashboard Screen + +![Contract List](https://raw.githubusercontent.com/rtomas/resources/main/polkadot-openPayroll/img_contract_list.jpeg) + +The development will be focused on providing a good user experience, taking into account the user personas that will be using the product. + +In this step we will create the mockup in Figma. + +#### User Personas + +- An owner or many owners of a company that want to open the numbers in order to be transparent in the way they manage payments in the organization. + +- A cooperative that wants to implement an automated payment for the payroll. + +- A group managing the treasury, aiming to maintain easy regular payments while focusing on its growth. + +#### 2.- Develop the user interface based on the design created in the previous step. + +Implement a frontend with focus on usability, since we understand that the main obstacle for this type of solutions is the difficulty in their use by 'normal users' +The frontend includes: + +- A Dashboard for the owner of the contract, where they can create a new contract and configure its parameters +- A dashboard for the payees of the contract, where they can claim the payments that are already released. + +#### 3.- Implement and test the payroll contract + +Build an Ink! contract, which purpose is to manage a treasury, that can only be spent by the parameters set by the owner at creation point. Those parameters can be changed over the time and more beneficiaries can be added or removed. The funds in the treasury can be withdrawn by the owner of the contract if needed. This could be helpful in the case of migrating to a new version of openPayroll, amending a mistake of sending too much funds, etc. The data contained on chain are the addresses of the beneficiaries, the owners address, the period, the base payment and the multipiers. This information is public and accessible though the blockchain explorer for every person. Each payee multipliers can be updated individually E.g. if a developer is promoted, his seniority multiplier will be changed so he will earn more money. The contract also will be pausable, so the owner can stop the payments if needed. We will provide some helper functions to let the payees know how much they can claim at any given time, and also a function that the owner can call to know how much will be paid in the next period with the current parameters. + +#### 4.- Integrate the interface with the contracts + +Use polkadotJs to generate all the posible interactions with the contract, those include: + +- Creation parameters needed to create a new payroll contract: + + - Base amount + - Multipliers + - Period + - Beneficiaries + +- Contract interactions from the owner's perspective: + + - Change the current parameters in the contract. + - Add or remove beneficiaries. + - Withdraw funds from the treasury. + - Pause the contract. + - Change the owner of the contract. + - Calculate the amount that will be paid in the next period. + +- Contract interactions from the payees' perspective: + - Calculate the amount that they can claim. + - Calculate the amount that they can claim in the next period with the current parameters. + - Claim the payments that are already available. + +#### 5.- Quality Assurance + +In this step we'll work on security and usability, checking the functionality and reviewing all of the interactions between the UX and the smart contracts. +This includes building a suite of automated testing not only including happy paths, but also including edge cases. We aim for a high code coverage to minimize the chances of bugs. We will perform e2e testing using tools such as Selenium or Puppeteer to ensure that the frontend and the smart contract are behaving as expected. + +#### 6.- Build a Dockerized deliverable + +Our deliverable is built using Docker to ensure easy reproducibility across various architectures and computers. All the necessary functionality is containerized, making it simpler to deploy and run. + +#### 7.- Write project documentation + +Build meaningful documentation, including: + +- Video and blog post on how to run the tool. +- Video and blog post on how to create a payroll contract from the ui and showing how to claim the amount released on a period of time. + +### Ecosystem Fit + +A transparent payroll smart contract fits into the Polkadot/Kusama ecosystem by being built on one of the independent blockchains connected to the Polkadot network. The smart contract will be used to automate and secure payroll transactions between diffent actors, with all information being recorded transparently on the blockchain without sacrificing privacy. + +By utilizing the Polkadot network, the payroll smart contract can benefit from the security and scalability of blockchain technology, while also being able to communicate and transact with other chains and technologies in a decentralized and trustless way. Ultimately, this could lead to a more efficient and transparent payroll system that empowers both employers and employees in a completely decentralized web where users are in control. + +Help us locate your project in the Polkadot/Substrate/Kusama landscape and what problems it tries to solve by answering each of these questions: + +- Where and how does your project fit into the ecosystem? + As far as we can tell there is no work being done by the community in this type of solutions and we believe this is a commonn enough problem that a good community solution could help us catch up to other blockchains that already have mature solutions present. +- Who is your target audience (parachain/dapp/wallet/UI developers, designers, your own user base, some dapp's userbase, yourself)? + See [User Personas](#user_personas) +- What need(s) does your project meet? + We believe there are a lot of small projects in the polkadot space that require recurring payments for services and that those are currently done outside the ecosystem. This project would create a way to make those payment within the Polkadot/Kusama umbrella with good UI, making it simple for newbie orgs to use it. +- Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem? + It has some passing similarities with opengov and treasury, but our project is a smart contract instead of a pallet and is geared towards a much more simple use case. + We found a smart contract that could be helpful for inspiration but it doesn't have the same approach as our vision. (https://docs.openbrush.io/smart-contracts/payment-splitter/) + +## Team :busts_in_silhouette: + +### Team members + +- Luca Auet +- Ezequiel Golub +- Gabriel González +- Tomas Rawski + +### Contact + +- **Contact Name:** Gabriel González +- **Contact Email:** gabrielnicolasgonzalez@gmail.com + +### Legal Structure + +We don't have a legal structure. We are a group of developers that want to build together. Probably we will create a legal structure for future projects. We plan on dogfooding the project and make our payments through the smart contract we are building + +### Team's experience + +We know each other from different places but we began working together at the Polkadot Blockchain Academy 2023 in Buenos Aires, Argentina. We formed a tight knit study group and helped each other to better navigate the Academy's teaching and to complete the myriad of coding assignments we needed to do in order to get certified as a Blockchain developer, which we all accomplished. + +Here are some brief backgrounds on each of us: + +- Ezequiel has experience as a CTO of an latam edtech with 60k paying users. He has worked as Engineering Director in Rappi managing over 50 developers. Has a lot of previous experience as a backend dev and as devops. +- Gabriel, Luca and Tomas are advocates from The Graph Protocol. They have experience building subgraphs for different projects including CowSwap, MakerDAO and Lens protocol. +- At the Latam Hackathon of Polkadot (https://polkadothackathonlatam.com), Gabriel and Luca won the first place in the Web3/Blockchain Tooling category with their project (https://polkadothackathonlatam.com/proyecto-inner/LactobaciloGG/usuario-single/). +- Tomas is a full-stack and Solidity developer with several years of experience. +- Luca is developer with experience in low-level programming, blockchain technology, and embedded systems. + +### Team Code Repos + +- https://github.com/protofire/messari-subgraphs +- https://github.com/protofire/maker-protocol-subgraph +- https://github.com/rtomas/OracleSolver-ChainLink +- https://github.com/rtomas/lens-protocol-subgraph +- https://github.com/cowprotocol/subgraph +- https://github.com/alongoni/polkadot-contract-wizard +- https://github.com/Altoros/swarm-markets-subgraph + +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. + +- https://github.com/0xLucca +- https://github.com/ezegolub +- https://github.com/GabrielCamba/ +- https://github.com/rtomas + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/lucaauet/ +- https://www.linkedin.com/in/ezegolub/ +- https://www.linkedin.com/in/gabriel-nicolas-gonzalez/ +- https://www.linkedin.com/in/tomas.rawski + +## Development Status :open_book: + +We started to work after we finished the Polkadot Blockchain Academy. We explored the Polkadot ecosystem and we found that there is a lot of potential for solving real world community problems with the technology currently available. + +To ensure a smooth and intuitive user experience, we've built a [Wireframe](#step1) that outlines the user flow of the project. This wireframe serves as a visual representation of how the user will interact with the project and provides a clear roadmap for the design and development process. By creating a wireframe at the early stages of development, we can identify any potential usability issues and make adjustments before investing significant time and resources into the design and development process. Ultimately, this will lead to a better user experience and a more successful project. + +## Development Roadmap :nut_and_bolt: + +Described in project details. + +### Overview + +- **Total Estimated Duration:** 4 months +- **Full-Time Equivalent (FTE):** 2 FTE +- **Total Costs:** 20,000 USD + +### Milestone 1 — UI and Contract Development + +- **Estimated duration:** 4 months +- **FTE:** 2 +- **Costs:** 20,000 USD + +| Number | Deliverable | Specification | +| ------: | ----------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **0a.** | License | GPLv3 | +| **0b.** | Documentation | We will provide both inline documentation of the code and a basic tutorial that explains how a user can generate its own smart contracts. Corresponds to [step 7](#step7) of the Project Details. | +| **0c.** | Testing and Testing Guide | The code will have unit-test coverage to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a docker container with current milestones deliverables to easily run the application. The functionality to be implemented corresponds to [step 6](#step6) of the Project Details. | +| 1. | Desing frontend interface (Figma) | The functionality to be implemented corresponds to [step 1](#step1) of the Project Details section. | +| 2. | Develop the interface based on the previous task result (React, Next.js, PolkadotJS wallet extension, Jest) | The functionality to be implemented corresponds to [step 2](#step2) of the Project Details section. | +| 3. | Develop the payroll smart contract (Ink!, Rust) | The functionality to be implemented corresponds to [step 3](#step3) of the Project Details section. | +| 4. | Integrate the UI with the contracts. | The functionality to be implemented corresponds to [step 4](#step4) of the Project Details section. | +| 5. | Quality Assurance | The functionality to be implemented corresponds to [step 5](#step5) of the Project Details section. | + +... + +## Future Plans + +After the completion of this project, we would love to broaden its scope. + +**Multiple Assets** + +- Add support for allowing the payee to choose the asset to be paid in. +- Add support for allowing the treasury to hold different assets. + +**Pallet** + +- Create a pallet based on this funcionallity that can be used by other projects. + +**Cover Different Scenarios** + +- Provide more customizable features for different scenarios such as: + Define start and end date for a payment, define the amount of times to repeat a payment. +- We a few changes this project can also be used to automated DAO payroll. +- Paying the rent, paying for subscriptions, paying for services, etc. +- DCA (Dollar Cost Averaging) for crypto assets. +- Automated savings. +- Gradual token incentive distribution to replace vested air drops. + +**Token Streaming** + +- Allow the treasury to stream tokens to the payees over time instead of them receiving the full amount at once per payment. + +## Referral Program (optional) :moneybag: + +- **Referrer:** Jose Ignacio Belossi (PEPE.Dot) +- **Payment Address:** 0x86ebcf938616eaa85391ed8f7a84fc91b6d15462 (USDT) + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Polkadot Blockchain Academy From 8d6b3d029cda5a9a4b90a66017983058b9612521 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 16 Mar 2023 10:41:27 +0100 Subject: [PATCH 242/578] Update index.md ink!/pallet/solidity performance benchmarking M1 --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 92ac54ef685..b90686de39b 100644 --- a/applications/index.md +++ b/applications/index.md @@ -39,7 +39,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☒ | ☒ | | [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | | [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☐ | ☒ | ☐ | -| [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | +| [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☒ | ☐ | | [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☐ | | [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☐ | ☐ | | [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | From f8c20df63c018b84c11e13373ccabbb1769d96fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 16 Mar 2023 11:15:41 +0100 Subject: [PATCH 243/578] Update benchmarking RFP --- .../implementation-benchmarking.md | 20 ++++++++++--------- docs/rfps.md | 2 +- 2 files changed, 12 insertions(+), 10 deletions(-) rename docs/RFPs/{Open => Under Development}/implementation-benchmarking.md (92%) diff --git a/docs/RFPs/Open/implementation-benchmarking.md b/docs/RFPs/Under Development/implementation-benchmarking.md similarity index 92% rename from docs/RFPs/Open/implementation-benchmarking.md rename to docs/RFPs/Under Development/implementation-benchmarking.md index f988a29405f..812327f734b 100644 --- a/docs/RFPs/Open/implementation-benchmarking.md +++ b/docs/RFPs/Under Development/implementation-benchmarking.md @@ -1,7 +1,7 @@ # ink!/pallet/solidity performance benchmarking -* **Status:** Open -* **Proposer:** [mmagician](https://github.com/mmagician) +- **Status:** [Under Development](https://github.com/w3f/Grants-Program/blob/master/applications/ink-pallet-benchmarking.md) +- **Proposer:** [mmagician](https://github.com/mmagician) ## Project Description :page_facing_up: @@ -10,6 +10,7 @@ When a new team comes to the ecosystem, they are faced with a decision on how to Traditionally in substrate, this has been a choice between a smart contract vs. runtime module (a.k.a. pallet) and elaborated on [in this StackOverflow question](https://stackoverflow.com/questions/56040779/when-should-i-build-a-substrate-runtime-module-versus-a-substrate-smart-contract) or [this entry in Substrate Developer Hub](https://substrate.dev/docs/en/knowledgebase/smart-contracts/#smart-contracts-vs-runtime-development). The choice has since been augmented by the possibility to deploy solidity contracts to an EVM-compatible chain, or even writing solidity code and compiling it to WASM with the help of a [solang](https://solang.readthedocs.io/en/latest) compiler. As substrate is gaining traction, more and more tools will enable developers to write their logic in their language of choice and deploy on-chain, such as: + - Move: [diem on polkadot](https://docs.pontem.network), PoC finished - Yatima: [pure functional language for web3](https://github.com/w3f/Open-Grants-Program/pull/463), application in progress @@ -20,14 +21,14 @@ Before starting this effort, it might make sense to take a look at the official ## Deliverables :nut_and_bolt: -* **Total Estimated Duration:** 4 weeks -* **Full-time equivalent (FTE):** 1 -* **Total Costs:** 10,000 DAI +- **Total Estimated Duration:** 4 weeks +- **Full-time equivalent (FTE):** 1 +- **Total Costs:** 10,000 DAI ### Milestone 1 - Basic benchmarking -* **Estimated Duration:** 2 weeks -* **Costs:** 5000 DAI +- **Estimated Duration:** 2 weeks +- **Costs:** 5000 DAI | Number | Deliverable | Specification | @@ -39,8 +40,8 @@ Before starting this effort, it might make sense to take a look at the official ### Milestone 2 - Integrate native solidity & `solang`-compiled solidity -* **Estimated Duration:** 2 weeks -* **Costs:** 5000 DAI +- **Estimated Duration:** 2 weeks +- **Costs:** 5000 DAI | Number | Deliverable | Specification | | |--------|---------------------------------------|--------------------------------------------------|---| @@ -53,6 +54,7 @@ Before starting this effort, it might make sense to take a look at the official ### Milestone 3 - More complex application logic Apart from just reading & writing basic types, all the above implementations should be extended to include more complex logic. The scope is up to the implementers, but here are some ideas: + - cross-contract calls - emitting events - storage-agnostic logic (self-contained methods performing e.g. some heavy computation) diff --git a/docs/rfps.md b/docs/rfps.md index 479c3ba22b6..a84eec46bf7 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -41,7 +41,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [formal_guarantees_for_grandpa.md](RFPs/Open/formal_guarantees_for_grandpa.md) | 🟢 | 07.10.2022 | | [grant_management_webapp.md](RFPs/Open/grant_management_webapp.md) | 🟢 | 09.03.2023 | | [identity-directory.md](RFPs/Under%20Development/identity-directory.md) | 🟡 | 30.05.2022 | -| [implementation-benchmarking.md](RFPs/Open/implementation-benchmarking.md) | 🟢 | 20.07.2021 | +| [implementation-benchmarking.md](RFPs/Open/implementation-benchmarking.md) | 🟡 | 16.03.2023 | | [ink!_smart_contract_block_explorer.md](RFPs/Under%20Development/ink_smart_contract_block_explorer.md) | 🟡 | 05.07.2021 | | [ISO_20022.md](RFPs/Open/ISO_20022.md) | 🟢 | 31.05.2022 | | [ISO_8583.md](RFPs/Open/ISO_8583.md) | 🟡 | 31.05.2022 | From 8a26574f411be1c2e67a15b51ab5f3e107b4f625 Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Thu, 16 Mar 2023 15:53:03 +0100 Subject: [PATCH 244/578] Update solidity-trie-verifier.md --- applications/solidity-trie-verifier.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/solidity-trie-verifier.md b/applications/solidity-trie-verifier.md index b1cf75708d8..8da9915e145 100644 --- a/applications/solidity-trie-verifier.md +++ b/applications/solidity-trie-verifier.md @@ -8,7 +8,7 @@ ### Overview -This project aims to deliver an implementation of the parity trie [verifier](https://github.com/paritytech/trie/blob/42f086bc8748f25e978da10a9cefdb396a72b158/trie-db/src/triedb.rs#L233) as required by state proof checking algorithms( [read_child_proof_check](https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/state-machine/src/lib.rs#L1102), [read_proof_check_on_proving_backend](https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/state-machine/src/lib.rs#L1128) ) in the Solidity programming language, which would include various sub implementations( for example [NodeCodec](https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/trie/src/node_codec.rs#L81) for both layoutv0 & layoutv1) required to build trustless bridging protocols from the Polkadot ecosystem to the EVM ecosystem. +This project aims to deliver an implementation of the parity trie [verifier](https://github.com/paritytech/trie/blob/42f086bc8748f25e978da10a9cefdb396a72b158/trie-db/src/triedb.rs#L233) as required by state proof checking algorithms ([read_child_proof_check](https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/state-machine/src/lib.rs#L1102), [read_proof_check_on_proving_backend](https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/state-machine/src/lib.rs#L1128)) in the Solidity programming language, which would include various sub implementations (for example [NodeCodec](https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/trie/src/node_codec.rs#L81) for both layoutv0 & layoutv1) required to build trustless bridging protocols from the Polkadot ecosystem to the EVM ecosystem. Goal: To create a primitive for more generalized bridging protocols like IBC, it is more efficient to verify Parachain state/storage than to use custom implementations which Darwina and Snowfork do. From 19475e3d44e4dc10a133cb19769d3f43986446cb Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Thu, 16 Mar 2023 15:55:42 +0100 Subject: [PATCH 245/578] Update solidity-trie-verifier.md Add links for snowfork, darwinia --- applications/solidity-trie-verifier.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/solidity-trie-verifier.md b/applications/solidity-trie-verifier.md index 8da9915e145..32bcfc298b4 100644 --- a/applications/solidity-trie-verifier.md +++ b/applications/solidity-trie-verifier.md @@ -10,7 +10,7 @@ This project aims to deliver an implementation of the parity trie [verifier](https://github.com/paritytech/trie/blob/42f086bc8748f25e978da10a9cefdb396a72b158/trie-db/src/triedb.rs#L233) as required by state proof checking algorithms ([read_child_proof_check](https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/state-machine/src/lib.rs#L1102), [read_proof_check_on_proving_backend](https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/state-machine/src/lib.rs#L1128)) in the Solidity programming language, which would include various sub implementations (for example [NodeCodec](https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/trie/src/node_codec.rs#L81) for both layoutv0 & layoutv1) required to build trustless bridging protocols from the Polkadot ecosystem to the EVM ecosystem. -Goal: To create a primitive for more generalized bridging protocols like IBC, it is more efficient to verify Parachain state/storage than to use custom implementations which Darwina and Snowfork do. +Goal: To create a primitive for more generalized bridging protocols like IBC, it is more efficient to verify Parachain state/storage than to use custom implementations which [Darwinia](https://darwinia.network/) and [Snowfork](https://snowfork.com/) do. ### Project Details From 73b12a34b5ee44a965d881a14b0ede0ba565c0fa Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Fri, 17 Mar 2023 06:49:36 -0400 Subject: [PATCH 246/578] Update index.md (#1616) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index b90686de39b..dea64152f79 100644 --- a/applications/index.md +++ b/applications/index.md @@ -155,7 +155,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [727.ventures](https://727.ventures/) | [Typechain Phase 2](./typechain-polkadot-follow-up.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☒ | ☒ | | [QSTN](https://qstn.us/) | [QSTN](./QSTN.md) | [GitHub](https://github.com/qstnus) | ☐ | ☐ | ☐ | | [CESS LAB](https://www.cess.cloud/) | [Substats (The framework of lightweight block explorer)](./substats.md) | [GitHub](https://github.com/CESSProject) | ☐ | ☒ | ☒ | -| [Polket](https://toearn.fun) | [ToEarnFun](./polket_toearnfun.md) | [GitHub](https://github.com/polketio/polket-node) | ☐ | ☒ | ☐ | +| [Polket](https://toearn.fun) | [ToEarnFun](./polket_toearnfun.md) | [GitHub](https://github.com/polketio/polket-node) | ☐ | ☒ | ☒ | | ALPHA LABS | [Binary merkle tree](./binary_merkle_tree.md) | [GitHub](https://github.com/frisitano) | ☐ | ☐ | ☐ | | [Standard Protocol](https://standard.tech/) | [New Order - a full onchain orderbook dex with indexers](./Standard_Protocol.md) | [GitHub](https://github.com/standardweb3) | ☐ | ☐ | ☐ | | [hack-ink](https://github.com/hack-ink) | [Subalfred](./subalfred.md) | [GitHub](https://github.com/hack-ink/subalfred) | ☐ | ☒ | ☒ | From e4c8ce666cae1570b5995b491080e893686792a9 Mon Sep 17 00:00:00 2001 From: Nikhil Desai Date: Sat, 18 Mar 2023 13:30:26 +0530 Subject: [PATCH 247/578] amend proposal to add Payment Address (#1619) --- applications/ink-pallet-benchmarking.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/ink-pallet-benchmarking.md b/applications/ink-pallet-benchmarking.md index 363d13b1aea..465b8da8d46 100644 --- a/applications/ink-pallet-benchmarking.md +++ b/applications/ink-pallet-benchmarking.md @@ -1,7 +1,7 @@ # ink!/pallet/solidity performance benchmarking - **Team Name:** Talentica Software -- **Payment Address:** +- **Payment Address:** 0x8bd54ec34A35f3A2f668A33d9578b5C3A6b730dE - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 ## Project Overview : From 3f3f9411abf199e97a3ad16f5673bb2dc159bd26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Sat, 18 Mar 2023 21:36:31 +0100 Subject: [PATCH 248/578] Swap icons for Polkadot iconset --- README.md | 6 +- docs/help.md | 6 +- static/img/Learn.svg | 1 + static/img/Reddit.svg | 1 + static/img/Twitter.svg | 1 + static/img/Web.svg | 1 + static/img/Wiki.svg | 1 + static/img/Youtube.svg | 1 + static/img/everyone-1.svg | 271 ------------------------------ static/img/icon-documentation.svg | 1 - static/img/like.png | Bin 1231 -> 0 bytes static/img/map.png | Bin 1511 -> 0 bytes static/img/medium.png | Bin 1520 -> 0 bytes static/img/reddit.png | Bin 1787 -> 0 bytes static/img/twitter.png | Bin 1499 -> 0 bytes static/img/web.png | Bin 1734 -> 0 bytes static/img/youtube-play.png | Bin 1250 -> 0 bytes 17 files changed, 16 insertions(+), 274 deletions(-) create mode 100644 static/img/Learn.svg create mode 100644 static/img/Reddit.svg create mode 100644 static/img/Twitter.svg create mode 100644 static/img/Web.svg create mode 100644 static/img/Wiki.svg create mode 100644 static/img/Youtube.svg delete mode 100644 static/img/everyone-1.svg delete mode 100644 static/img/icon-documentation.svg delete mode 100644 static/img/like.png delete mode 100644 static/img/map.png delete mode 100644 static/img/medium.png delete mode 100644 static/img/reddit.png delete mode 100644 static/img/twitter.png delete mode 100644 static/img/web.png delete mode 100644 static/img/youtube-play.png diff --git a/README.md b/README.md index 558793ac623..440d94601da 100644 --- a/README.md +++ b/README.md @@ -257,10 +257,14 @@ It is **not** a chance to pitch your project, especially since only a small subs ### Additional Information -| | | | | | | +
+ +| | | | | | | | :-: | :-: | :-: | :-: | :-: | :-: | | [W3F Website](https://web3.foundation) | [W3F Twitter](https://twitter.com/web3foundation) | [W3F Medium](https://medium.com/web3foundation) | [Polkadot Wiki](https://wiki.polkadot.network/en/) | [Web 3.0 Reddit](https://www.reddit.com/r/web3) | [W3F YouTube](https://www.youtube.com/channel/UClnw_bcNg4CAzF772qEtq4g) | +
+ ## :rocket: Alternative Funding Sources diff --git a/docs/help.md b/docs/help.md index 971d657f453..fcd26c13545 100644 --- a/docs/help.md +++ b/docs/help.md @@ -34,6 +34,10 @@ It is **not** a chance to pitch your project, especially since only a small subs ### Additional Information -| | | | | | | +
+ +| | | | | | | | :-: | :-: | :-: | :-: | :-: | :-: | | [W3F Website](https://web3.foundation) | [W3F Twitter](https://twitter.com/web3foundation) | [W3F Medium](https://medium.com/web3foundation) | [Polkadot Wiki](https://wiki.polkadot.network/en/) | [Web 3.0 Reddit](https://www.reddit.com/r/web3) | [W3F YouTube](https://www.youtube.com/channel/UClnw_bcNg4CAzF772qEtq4g) | + +
diff --git a/static/img/Learn.svg b/static/img/Learn.svg new file mode 100644 index 00000000000..75d935f8b86 --- /dev/null +++ b/static/img/Learn.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/Reddit.svg b/static/img/Reddit.svg new file mode 100644 index 00000000000..4425e7e763b --- /dev/null +++ b/static/img/Reddit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/Twitter.svg b/static/img/Twitter.svg new file mode 100644 index 00000000000..c4ba1127378 --- /dev/null +++ b/static/img/Twitter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/Web.svg b/static/img/Web.svg new file mode 100644 index 00000000000..70048bab72c --- /dev/null +++ b/static/img/Web.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/Wiki.svg b/static/img/Wiki.svg new file mode 100644 index 00000000000..f85a36ac7b1 --- /dev/null +++ b/static/img/Wiki.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/Youtube.svg b/static/img/Youtube.svg new file mode 100644 index 00000000000..b6e54b1573a --- /dev/null +++ b/static/img/Youtube.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/everyone-1.svg b/static/img/everyone-1.svg deleted file mode 100644 index f227285ea4b..00000000000 --- a/static/img/everyone-1.svg +++ /dev/null @@ -1,271 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/static/img/icon-documentation.svg b/static/img/icon-documentation.svg deleted file mode 100644 index ac219a7b424..00000000000 --- a/static/img/icon-documentation.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/img/like.png b/static/img/like.png deleted file mode 100644 index 3eb5f1b271eea0bada9a0893abef32249403f0b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1231 zcmV;=1Tg!FP)K~#7F?VZha z+CUVAuaix(3MD8Nm=2<4cBTW=0i*)df$2cF0z1pBWLE&GKy(1vC9BCiA^8YdfEkH5 zZ^V4(+#@F;8u9rZ{mf{j8^~f<o6@Okq2sf}xsPnB@mNL75 zgp=f-I?oU!oP$v3UT34Dn3Cxv*!>cF303A)Ck3C>Ls{xX=m{it2Ht8tr>Y}3%mgyU zIxjkej9r0==m3JD-2olEToHOGGYBNWt^!;T=v+0A;l{r9+|YNL!ZI_sCCwx=SR#R& z!c1}xW)iq9%p?hzNC2oSO@a&4htn{zl4k&vPo5b%W&%L@>}8CO2++^-+_u@Eql=LY zfbwZfh7*GXA90+S&Iq1Eklar?zhFQBx2nlzLKu(%);8F+q&SlZfbETTEsY&Rhenk% z2=9Cr2#sWaEtao*X!u|RFV}=}V0VwE3ij1&&YLQ(S8xO`w+&RqQS~qCf+z5__kXuSH(!2FvI!%!tjqOvSgo6SZMv`o`fMNy;%gTcvl&}XL8 zY5sr8br8$tGGF&-G_p~_o4Q=q-2;gwsi&aNkmy6}nM@{oQje{N+T{F>s9io!xf&ji z$Ld_D606lrKR-S`s&k>X83o5x!6`?h!{JbwLRA<9L7w+i{~;JFIjst2=}>PYrj*>p zI+z5%?uS|SzjUyX0%H{q=`<|>19x|Kkb>S9gNa-)%Wd^~{|hPT3I-Fo;9D@D4^EJR zJ_`X8Uq~=ZYm8s&B#hg_w-4TKx41$EY!$p-uOWriif!5)pWv657f69yFbhvlPmsdH z!vi?sI_b`PyllgGC0B;8F}i}X4fTg`3ue8sZ$6(ZTTt7~a`XO(jI&YdYNXC^ZY=B? zRN*$C9L?Hr+b%~Fxzwfw!6^w|SZJ6{vPHR+{M2b~squ?Twk($tliNPDMpu#r$=w^ePX%mHYsrG-D%1u&V<8)5ELoUb%HFN4p`Z;r zTe3j8ls98!qUOTASF%vK85*#5K5Qyks9Z|YBsdhdkw+y9mPC^f=zswJ zp-4^X?4d|R1VH)hrSm7V#sHL0o){Nm0YF`O=D08m0P0G!022$iFH5Z4l509gUceGD z+!S_BVpxVwSNi&p{0Kq_;9v8=LJYS=HieEYqWi)FxLM6992?1r;D%@sFC=M01eu~q zY>XZajYY699|X<20;<^Fjycj@FAMNiHB~Deyh1Qz`=zNQJH+mBgqL_}Dov1nE@B1S tg6ojv0Q;~04RHLmzopDS#j=bD{sYMjR&CC}t?K{)002ovPDHLkV1kBaCuINt diff --git a/static/img/map.png b/static/img/map.png deleted file mode 100644 index 3dd3427eac42932e8a2846ab7921b222e7f6e811..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1511 zcmVBoK3@!C^$vFGrWf)!6gtHUKlP6b0KDi36_nxm!M@%4O7U8TE{2D2zvqwJA+ zBgQ#&3OjnCL+Ee?Lxc{X7<32hyv8DE9cNI8080xPgMg#6=2MKr*Y+jrG=*o(FfP%C za0X9EFiydS@B+d}FmAzyFo6&f0QnbXf*oTY!Z5WW&j92H7M#H`&H>~HuJII(5MV#! z+-2# zOb`S?ag2C>f5+R~8=jw^@$m3~`}_OiyGQ(u<M(+Iv? zMT(w?AY4deo%zMZMZPUO3f(I)lt~uOxPUy%vfLGTE)OCzs^~N;9!VCA;w~18+%@*4E-QuRWMFMg6L z2s@)TVY~QI{)WG80vkfAUTBCYCQ^l9DAt5Hj(eYz|ECGOrd0i~oLT>bM5+Ky7B@uP zE+X@qQuQ;uv;kw z-&O*L5CU@xHn_?s@Eq6I*VcbCei(uXt6x$Gwd~W=lhwLh#;bLmDDM)fdSWA*5KE}r zz+2koHRx+4uG7N857R}sTvMjg;5Cn1A^cT#3m^4_wV1~3U$%K%gYOd@h1fqbxgOnx7OolXJ>GQ)6-MyafX7z zD7-@kxt_J?;cWu}9&of0IX^#dJ m3xT~Y>}#8aCIW zW#?AxVX;Xai?!7g0KN;-7#H`2=eW1ZU#Vaf&tSM%VW}YQEx9&zpK2&n+lrr&S#Meu zI95`q)^%o05MG1U#Wu?>ZSu&l~YQ*mmZg}c1G%=^N{vMYzoV8Nx90`?8t zlng4WOl$&&iVD~(Y*W;+m8_kqPc;>^ONYnAy{0l_xrn_MQ$+>s)Zr;}4P=A{aFR~d zgWpX#W6!x>8#8o340tc-FS5h4jqnuZ8>)=Z0qU&SHo{Zbv1RB1Rlb<4#>UEG-jWe| zA_cq_c#UOjtT5&!Gt{7Izli^!XjjsYj}N@QzT)xm(Z?FIHvENw6BlYmcZwNf3$Vk> z0OSW+nZW@995zL=(b=X*LR9ApfGALkM$> zUo5ramiS6B@*JKJW1NEZVGPe;xU#RC7xawsNS*xbCvhxZd4BszJ zrP!h2KiJJnQ@J_CJqGMf?FzmH-ULMsu>R`b0L`!cEyetQ^;uE{ega|EI_Nm!L;Nuzjm)m zCI=*(B>yS1K}5nskjt!O4l*K88kq{m5Ai0Un)xVGBb?N}Y-I}E2qboiu(j2uRu@Q^ zZ-`TD@}hIZ(G<9d&JZ!w98l+#iqO6+5g{3lH6R6n$<^ksNTaQ_4eiq-CT5AWq`72? ziKvjKFqfNJSx!2|Z zrpZVHK+G|w!G(haKVq1r%spoMAh|!u`~?Rxq*a@yOb!PcV6y*kYN=sK0buI?bZRj! z4D}sVZV>t6bA-^5?4P^WcYZLuvA`_X1$AKe1XB&3Yp**WYVmmuF2E#rwOXO7Dr8xP z5G)o891aIGO@pE+FcDOXi=j8rIRh+>zK#?vq-d|5j1+rPCjBf$do8mkHF{WZ7G%Pg z=;d-L`j|*`ZW3H^7BU2^NuYt(WNf9<}Sb$l00Vnau_JM7+a=gYF#k@Abqy|_o}RGZ@8N;=5(pBUAwpf(e>f(CkN)QDAlH)ufX~8 zkc?o0en)?Ie}6Ar&^tDgtuqUjY`5F@?aRrAut6Uwm_{SB;0`%9?yZGGPzOo>u5Sg- zr{L&2IUT(nrLVlrHYt7Wwfm= z5WT*=ecTOwF^5*?CZN3$NP!5O2o?H@_qDTnhex9eo%6+7r=HvbGq2{Uku!o%SX8l4!;<3JgGp@Pl9Yt?#s&;)W=bj*t+H=S4IaLCI8@b<|OZ zkWmv9rWEHgO_y;|EpCw534sx?$MF)b6HHgz|10yK%x{>n;SX5er?^I-ujvh>fde@J zF=tdVIO1(~cS9+01**eKWoJXD0RtK4n*v}O$kq|0f`ZvSyV}F&*@7=3P6#Ngm W-g8FjSrq~R0000wkMOa=gY*Yn`YLFk)`u zrm>?p+J_sdpo!5Q9ERzDjn`NVEz=YZ;$am5V=!=Z(R_n(Q-GO>~c*i7;-%nkYg~L;%tsst6sk58W_lO`ZZs56U!!Ft-5GgSK=7Aw2A7Kew%x z5E_gm0MdgBm0-st!5^q*s&tJ5WzgKel>S8nJd7)vhLn#6B*0)NJT}EB;m?xa2XMSL z+Jx)tYg}DjW#4~&ec|!(5sSqF0{B=Jh8}F6kihY%QD&t{lB97Qr}y{w+0Vzv$A#N^ zo|n$&^Rx&)SLmGBtFW3C4}=cbsc38wG%|{!Gzfz9;^HDRofo1CL6bvRko09zQ!yfK zSuU5G?`gE}`E~UWBOx%2d<>kftc^s{sot;6Y7hGOm zLPa$`KR>g5yuH1lBYdou&Su2u<|>McIakA6?D+Y{G*(BjbL(aqWt18eWRJv*VD`FH zgO$}3K0cgWU!8e+wEkv}fl+xfGw}TUJTs0z*MTNeudlD!qfim2Er0V1!(x!P5nFh6 zm&)o2ZQwqcM#>66Jt<%WhY+46HH>5)_wMd)6V-f& zuxzPQ&-?p(woM07|Hv=T5WH%)x3^mb78CYi&Cyezu$#tXm%Ur~cj3_-717{WYKQsJ z(HP-t5HvVz+Y*VL)hQvmPQGT*Ldh=({cjp`>b`Jua|0oc*~q03K;_*{qcL{aD4(31 zK!RToLc(0Wur@6@pUZu;MLJMK@=aOK!3I9ptc)?Avj}4gw>A5_?EkhsA1PnN3^vP% zbt$VW*bG3*YQk)&nxcw8q6UjB>}&dhs%9n3DV;K^TKrvg;4(NVDrD}GIkILTXP#INa%er}3aN<)drol7Go!Xd^ zr)c4a%~TKJHbwJkO-7YMYa>i$vjPu88%)?(=?O{hqfY+hwt6KG_hA<1>mZnWwL%&k zNbc08VRDrYN}JbgXEFn^227lc<(t_YKlRWzn#E zdV0dx=-`~UJPje3dzj0b3{~01Vvgg+ACK8(^SPitb2+)^40A~m4f?RLJ zwwq?oM3`&WY!O~IrL~z=)>yC5wnar%t=cN*=<;t>PTO-1kJ42xT{SD3JyugzP*Dt9 zIC4`13<$GOI?Ml3v_Fh>H0@fmo2TiN4UbiKzORFkn^uGZ{4Ng07hX4~>Iq7lsT*#? zi{ikr__y>>MBLRu^Go*Yz;^*lm!_Il%6K6aL*6H*0Jf$mrL^?G1=2f<#V*p#lIaj?)PviV$X z>Hurfk|Hz9?jOut-20uDG=<_gJMk`{=urYZcU7SBVf!* z&;TDmdXSYoG(>!Kw}%SR0ycOFfb^h3B@n>F;igDM61yo92>_%AZAtvjtRaB(piCh; zVg?}n;j%9_H)IAN{h^wnCuSJGSKvLpYue>JY$<8{frPMeN=f zn}@4jX6QGn8Le!*eDuuFADT+DeWfdO^P#ElSl#*Q4FfT>!Fg!1hwYF4^-%q>zuL_2 d^`n*({0|zJ>z{Y|k+%Q<002ovPDHLkV1ir6RP6u& diff --git a/static/img/twitter.png b/static/img/twitter.png deleted file mode 100644 index 535147c0cc83d328a31bdf42a553be27489d3fed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1499 zcmV<11tj{3P)oyd{&!Zi5)-dbPUBP3>3^VJj?BKa8AYDPs3V;D{xpr=!`eg({bW_ zPH_I&(v=ka`@VyLKx`dfT`7`me}P||E%a5ZxA?wSQI)rari<;1)@1SX1fK8(Zi%%n z7TeNH6VPy){EyZ%JThE@SnF16rlo|GYYj0!iAM<|v#*sw&eTmBYb7`mXzT#8(RxT! zCkU8p_-SnLM#u0Y6*MtAg2yl&u<;7T&`lb^Ln6#0AOr)0i{@_#Bi9}(mZ=ZN3=o!S zO*DWbh6vNJCc1?%LxgQu6AdB65P_yJ5#c!d zxotIrp${WD0M)5hId)7E{Dkccw64&x37Y$h*1u>#gs`H?rD8N72b>*nXv%OP2>{mz z9hzzfhBnPA=kR>+*+V#!{rh6O6jK^a&91e@u92`?zlfMxzk~IHSQ|A;8Ve&0c?}b1Zb{A3Dkk!*xo4j_jr3Z*Ol1h+p|7gZ-*f zNJouo1FQC~RI?9HPftpy%wtAy1k04s$7tM@Dt5h(iPXW`Aw-V`+e>x}SnYKq2Hp3> z!@~on(yN0s$DYJ~d8~HAuu@a({mhAK-~@(+)I2 zq^fXG#Y7LFErLCWWr`4~yNsND`@%NS21Ag-+Z=*t)Wk>KHn1iMmN%!tV@ZQ4jsvtE za%_U7>7i}PXz)mKr_~7J$e5(j9O@J{_~~Z|<=`s1tdQpU`B}X8pqX%e@NW=Y1N{E} zj?>dqoS&aVlFQ3W7k%-fZz{eXf@wlBH8{wA4>F#c_J;%x$V-*h*IX@ z0E&X!j$}tGdlc3tJyS;qQHb5PaxsWW1m@hfX=N#E?C?OAVs18Nv}1Fr4^weYuZ3e( zHkB^!?(STho1=z17Y9RQO{NDAB9|K085~ROoDCZXyt%T*WG{m6B{`73LmOx6Gt)aW zS@k#3WQCALjj;u5ivVp5@X%O?-LOqcumw)iS#9iCjoU0eWh!7J=Ap4vzHVsURYoZU zZUn^Xcg{9*QOU){Me#FN_f)6l%eg!b(!9L96k873c+6jzk4`SBGnggJAuyePWK1!? zglmPmtL@*lzH9w~jzjnx2i~VRgMT^BSLJ9x3_x|-OA#94SXMuNF)KEI<3g~omo==s#Bp9mKXt0pIo)qA)90bKz&k;AjAmao8_&!C7-E} zJc1)qglX6zO5qrGSB~{2`3XEBLid;l5mJO@WS!Wycs&*#AUMdI8B^qv3!002ovPDHLkV1fZb Bv>E^a diff --git a/static/img/web.png b/static/img/web.png deleted file mode 100644 index 4fb1b2c6fb72346bacb94ee3af55d773e96611e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1734 zcmV;%208hOP)o^cScXuE5Z7IPWz*c~%06M^10ilAJ3ZR3e1K@F=3>5?_FjNq31-?2ax}RcfN3uPV z9df?!Y#2#V3qNa36>jZxz>yg(v2U3w&1MUV@f6Q_SE`)F!SJ6YL2n>>Pfr)y1k4Oc+-f zr?8V3I>tC$K^LJTj2LtWY`mr-XcOlcAtHQQz!U_WoHbu!8ot(*Jf;}}V~%Nw)`fEf z!UEG2tP5}984FBXur6G{6BYo9Z^{LPu@7O`Xhog_C=M(+$H2G(P#n0$OALev`x)o< zCd#eIUg6Obp%G{vk&I zOHiT~S(X*+^}6VS`}_Oi;^HEd6*H=^8Wm4`7mlLjdEO`-zgw+VrT8RYw^agvpCm~L zkyBV8_f;Tu`j>*$fuGZ&m0M{1KfmK|?(XhtD~J`refT;aSXgo5t1wqrSFKisN?c#eG=DC1n@ep0aroc1F zoiSXJ5|`xvTtSy2EO2THoJsA7zEo1&t^yOny}ry8SS+F5)S$9ynX^b8K>b2aD&G*k@wJFi>C za=9$?yj?)|bA5e{+grC;PCEDe@bCZu{KJO~0=35sSJgf2YK&;TIxzU&v_Rj2wOzLCCJ zkCe1ks*u2CXd|+5eVUrBv}=c8$dL)tWmRDs!O;8zLTGBpT)+X(#bN;^blG^ZG3vVA zx)@wzh_W_8OyD6wp&5Osv!U!zD5ERiyP#`y(idU^>mhV0>o`9@clv#sz>>rL6j)^I z(gM4pO+-QK{ty#b`#hfBV-UGbU_lF(6Zrl8{r79m%qjO4ZstuZUSD4!gf|K-vUM{< z#jF~^tl7=YO^^ns?JN?^rv2mtbA^M)f9xdaShyNzvZuwE*tVxt2iM+S+qj)zvL~g$ ziO|NkdQWxfN-eZ2x=u=|gJ3tAEKgmr0Z;Rw+VZZ_;*w1Rqr$^RpN$VZ4H-2h-EGk) z>%}Zv6+VWHG%~3jnU=!?s`Ga?VDhL>IaHVX%Ql5)U}mPkso;*bd@-|Rt^zkzj0>w% z2l`f+1-JV0vE< zMB-tS)sRddXcL$$@4HV{q=~+BFf6&K6FBy;<1ZpN&A9B_0MRYb-v&mhfxUv{p7=F+3ymO;ag$tauKYo2EYF^QNg!2!zlAS3!{@Y~T7fLi=rhwU|FQ c&zhsaFF?mx2*^NrH~;_u07*qoM6N<$f*Sx9C;$Ke diff --git a/static/img/youtube-play.png b/static/img/youtube-play.png deleted file mode 100644 index 53282d10495a51c7f70c50a7f09b4b6effd4c64d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1250 zcmV<81ReW{P)q8;Wg4JidH|HuimuQQ9`^G(cUR5O zP-i3spqwg|;+;W)Pk5Vw)+HR9AalQH{Xq>p$cm;m<)a2E(Aoh@Q-UoC0JMG3(o|U( z+BB-1f_d?oAvBVGnr~k@uK2?M&fGc_1G_6!MX-zB`m9B9If4T?b9aHFI9UEg+29@= zyYh3>8#L=hLTfESeqriz1iR>Mj>_I|3d5hQ@B3;v9I7-;m2GCTnYz2X%Z|bHd16rr zTETdFAY-{e$6~=`f7#&vp_p4>!Q^n+;KbC9=qt$;!|5U+V~a-4*u2?Zk8j&~d1TkS%`%-%ae8_RgLEl^Js6~}xsQ*JnE@v8JP(FBCxcl|tJjxu zS#(`rUmG{tAeq5uU`!mxxVX5$?d>fD@{J7UnIM;-2o8cEi|ENj)PkXN<2krV$mnjj zD=BSsL_}~IN*iSK&CLy%lX+{jM^l$5iazxJ^_76qhO4@mKL29~r^wG-(}sA13&>oK z27iWdsI#C8H>SJ2wIPFPfKFUPM?FNUbM*Utwq0?}T%^Ie3I^Q>+UV-;%B#U5AVbMm zGFS*xYUG~597+L{XQ@6R$Xw!ueFRgU4a1Ogo_&i68O*YCPw5~@5@``zW@5bHPG4)T zjnRBQ$H~bF43ZVxDT0lqiSc+0u250mAlZF`ik_UYG;x1_53Ym;ZGs3KFowE7K>nBDX&%jtMwH% zmxem<3#AT5)iN#@#r2q?6um^%YI};}e_B7_*oL*}eUAjPTJJWMq6R(y<@6zWsEO;{ zy{`~EP&9Z_PS&cg+7{Nea1S!0 zIf1Z|oB%S6X7NChT?oL_Xfig$9u18JSj-t{+t>t)h~3*UN17BD!){blv{K{c!!m6@ zG?mQuvA7+fiHD}r4C{wnt Date: Mon, 20 Mar 2023 04:04:47 -0700 Subject: [PATCH 249/578] Add discussion_private job (#1625) --- .github/workflows/check_application_document.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/.github/workflows/check_application_document.yml b/.github/workflows/check_application_document.yml index ddb8f7574c9..ebc4a953800 100644 --- a/.github/workflows/check_application_document.yml +++ b/.github/workflows/check_application_document.yml @@ -6,6 +6,22 @@ on: types: [opened, synchronize] jobs: + discussion_private: + if: ${{ github.event.action == 'opened' }} + runs-on: ubuntu-latest + steps: + - name: Add 'discussion private' label if the application is private + if: ${{ !contains(github.event.pull_request.body, '- [ ] I prefer the discussion') || !contains(github.event.pull_request.body, '@_______:matrix.org') }} + uses: actions/github-script@v6 + with: + script: | + github.rest.issues.addLabels({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + labels: ["discussion private"] + }) + get_filename: if: contains(github.event.pull_request.body, 'Project Abstract') runs-on: ubuntu-latest From 2abe14d85fc5c8f561377b4c5632aa15d697cba4 Mon Sep 17 00:00:00 2001 From: gmajor <63032554+gmajor-encrypt@users.noreply.github.com> Date: Mon, 20 Mar 2023 21:53:01 +0800 Subject: [PATCH 250/578] Create xcm-tools (#1605 * Create xcm-tools * modify Milestone 1 * modify Milestone 1 * fix wording * improve xcm-tools.md * improve application * increase some costs * decrease some costs * improve wording * decrease some costs --- applications/xcm-tools.md | 176 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 applications/xcm-tools.md diff --git a/applications/xcm-tools.md b/applications/xcm-tools.md new file mode 100644 index 00000000000..9670cf4cb0b --- /dev/null +++ b/applications/xcm-tools.md @@ -0,0 +1,176 @@ +# XCM Tools + +* **Team Name:** [gmajor](https://github.com/gmajor-encrypt) +* **Payment Address:** 0xC3094f0ddce699a1Ad9Ef2621DF68Cd297a4c44F(USDC) +* **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +RFPs [https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/xcm-tool.md](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/xcm-tool.md) + +### Overview + +XCM (Cross-Consensus Message) is a messaging format and language used to communicate between consensus +systems. [xcm-format](https://github.com/paritytech/xcm-format) ( +Instruction, MultiAssets, MultiLocation...) are too complex, and no good tool exists. It has yet to be widely used. + +XCM Tools is a tool and an SDK. This library is written in golang. It provides the following functions: sending xcm +messages, parsing xcm message instructions and getting the execution result of the execution after sending xcm. + +### Project Details + +I need to choose between two libraries to interact with +Substrate: [Go-Substrate-RPC-Client](https://github.com/centrifuge/go-substrate-rpc-client) +and [substrate-api-rpc](https://github.com/itering/substrate-api-rpc). Both libraries support querying the chain status, +but they have different features and limitations. + +[Go-Substrate-RPC-Client](https://github.com/centrifuge/go-substrate-rpc-client) is an open-source library developed by Centrifuge. It also supports sending transactions. +However, it uses a static and strongly typed Scale Codec library that requires custom structs with Encoding/Decoding +methods for most types. + +[substrate-api-rpc](https://github.com/itering/substrate-api-rpc) is another open-source library developed by Subscan. It uses a dynamic Scale Codec library that +supports serialization, deserialization, and backward compatibility for historical types. However, it does not support +sending transactions. + +After comparing these libraries with other alternatives, I decided to use [substrate-api-rpc](https://github.com/itering/substrate-api-rpc) because of its flexible and +robust Scale Codec implementation. However, I still need to add the functionality of sending transactions to the library +myself. + +1. Improve [substrate-api-rpc](https://github.com/itering/substrate-api-rpc), add extrinsic encode, sign transaction + (sr25519, ed25519), and send transaction feature. + Create pull request merge into [substrate-api-rpc](https://github.com/itering/substrate-api-rpc) + and [scale.go](https://github.com/itering/scale.go) + +2. Send xcm messages between relay chain and parachain and between parachain and parachain, support VMP(UMP & DMP), + HRMP,XCMP(XCM V3) and supports the following methods + +* `LimitedReserveTransferAssets` +* `LimitedTeleportAssets` +* `TeleportAssets` +* `ReserveWithdrawAssets` +* `LimitedReserveWithdrawAssets` +* `Execute` +* `Sent` + +3. Get the execution result and the block_hash (block_num) of the execution after sending xcm + +4. Parse xcm transaction instructions, deserialized encode the raw message into readable json + +### Ecosystem Fit + +- Where and how does your project fit into the ecosystem? + XCM developers or users who want to use XCM Feature. A solution is provided here. You can send and track your XCM + transaction + +- Who is your target audience (parachain/dapp/wallet/UI developers, designers, your own user base, some dapp's userbase, + yourself)? + wallet & explorer & parachain developer + +- What need(s) does your project meet? + Provide a solution for parachain and parachain, transactions between parachain and relaychain, xcm message parse, and + xcm trans tracking. It can be easily integrated into the application of Golang or directly used as Tools. + +- Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem? + + [xcm-sdk](https://github.com/blockcoders/xcm-sdk), written in Javascript/Typescript, has to send the xcm feature. + + [xcm-tools](https://github.com/PureStake/xcm-tools) written in Typescript, a set of scripts to help XCM + initialization, asset registration, and channel setup, + +## Team :busts_in_silhouette: + +### Team members + +* gmajor + +### Contact + +* **Contact Name:** gmajor +* **Contact Email:** gmajorencrypt@gmail.com +* **Website:** + +### Legal Structure + +individual + +### Team's experience + +I have many years of PHP development experience and nearly five years of blockchain development experience, familiar +with PHP, GOLANG, PYTHON, Nodejs, Rust + +### Team Code Repos + +- https://github.com/gmajor-encrypt/php-scale-codec +- https://github.com/gmajor-encrypt/php-substrate-api +- https://github.com/gmajor-encrypt/scale-codec-comparator +- https://github.com/gmajor-encrypt/sr25519-bindings + +## Development Status :open_book: + +Not yet + +## Development Roadmap :nut_and_bolt: + +### Overview + +* **Total Estimated Duration:** 4.5 months +* **Total Costs:** 28500 USDC + +### Milestone 1 + +Improve [substrate-api-rpc](https://github.com/itering/substrate-api-rpc) +and [scale.go](https://github.com/itering/scale.go), support signed & send transaction + +* **Estimated duration:** 4 week +* **FTE:** 1 +* **Costs:** 6000 USDC + +| Number | Deliverable | Specification | +|-------:|---------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 0a. | License | MIT or Apache 2.0 | +| 0b. | Documentation | Simple documentation on how to use and how to test | +| 0c. | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Sign message | Add sr25519 & ed25519 sign message | +| 2. | extrinsic encode | [extrinsic.go](https://github.com/itering/scale.go/blob/master/extrinsic.go#L19) Add encode feature | +| 3. | Send extrinsic | Send transaction support, include ed25519&sr25519 | +| 4. | Pull request | Create pull request merge into [substrate-api-rpc](https://github.com/itering/substrate-api-rpc) and [scale.go](https://github.com/itering/scale.go) | + +### Milestone 2 + +* **Estimated duration:** 9 week +* **FTE:** 1 +* **Costs:** 13500 USDC + +| Number | Deliverable | Specification | +|-------:|---------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 0a. | License | MIT or Apache 2.0 | +| 0b. | Documentation | Simple documentation on how to use and how to test | +| 0c. | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Send UMP message | support [UMP](https://wiki.polkadot.network/docs/learn-xcm-transport#vmp-vertical-message-passing) message send | +| 2. | Send DMP message | support [DMP](https://wiki.polkadot.network/docs/learn-xcm-transport#vmp-vertical-message-passing) message send | +| 3. | Send HRMP message | support [HRMP](https://wiki.polkadot.network/docs/learn-xcm-transport#hrmp-xcmp-lite) message send | +| 4. | Send XCMP message(XCM V3) | support [XCMP](https://wiki.polkadot.network/docs/learn-xcm-transport#xcmp-cross-chain-message-passing) message send | + +### Milestone 3 + +* **Estimated duration:** 6 week +* **FTE:** 1 +* **Costs:** 9000 USDC + +| Number | Deliverable | Specification | +|-------:|---------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 0a. | License | MIT or Apache 2.0 | +| 0b. | Documentation | Simple documentation on how to use and how to test | +| 0c. | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Parse xcm instructions | Parse instructions raw data, support xcm format v1 & v2 & v3 | +| 2. | Tracing transaction | Support xcm format v1 & v2 & v3 | +| 3. | Cli support | Add command line tool to send message & parse xcm instructions && tracking transaction | | + +## Future Plans + +I have been maintaining [php-scale-code](https://github.com/gmajor-encrypt/php-scale-codec) +and [php-api-lib](https://github.com/gmajor-encrypt/php-substrate-api) for three years, and this application will also +be maintained continuously From 330600133cdaeb88ffb26de4d4882ddf4b9877ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Mon, 20 Mar 2023 23:19:51 +0100 Subject: [PATCH 251/578] Update index.md Validated Streams M1 --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index dea64152f79..84456d6c88f 100644 --- a/applications/index.md +++ b/applications/index.md @@ -33,7 +33,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☐ | ☐ | | [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☐ | ☐ | | [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | -| [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☐ | ☐ | +| [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☒ | ☐ | | [Blockcoders](http://blockcoders.io/) | [Cross-chain Wallet - XCW](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☐ | ☐ | | [OmniBTC](https://omnibtc.finance/) | [Polkadot Smart Chain](psc.md) | [GitHub](https://github.com/OmniBTC/PSC) | ☐ | ☒ | ☒ | | [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☒ | ☒ | From f93cee25096bd5353cf700db2eb87fb640b30f53 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Tue, 21 Mar 2023 03:46:07 -0400 Subject: [PATCH 252/578] Update index.md (#1629) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 84456d6c88f..765051d1e43 100644 --- a/applications/index.md +++ b/applications/index.md @@ -108,7 +108,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [LimeChain](https://limechain.tech/) | [Research feasibility of Polkadot Host in Java](research-feasibiliy-java-host.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☒ | ☒ | | [Blaize.tech](https://blaize.tech/) | [Unified deployment for the collator node](unified_collator_node_deployment.md) | [GitHub](https://github.com/babebort-blaize) | ☐ | ☐ | ☐ | | [Odyssey B.V.](https://odyssey.org/) | [Momentum, an open source, metaverse for digital societies](odyssey_momentum.md) | [GitHub](https://github.com/momentum-xyz) | ☐ | ☐ | ☐ | -| [Bela Supernova](https://bsn.si/) | [Rubeus Keeper Stage 2](Rubeus_keeper_st2.md) | [GitHub](https://github.com/bsn-si) | ☐ | ☒ | ☐ | +| [Bela Supernova](https://bsn.si/) | [Rubeus Keeper Stage 2](Rubeus_keeper_st2.md) | [GitHub](https://github.com/bsn-si) | ☐ | ☒ | ☒ | | [Coong Team](https://coong.xyz/) | [Coong Wallet](coong_wallet.md) | [GitHub](https://github.com/CoongCrafts) | ☐ | ☐ | ☐ | | OCamlMyCaml | [PrivaDEX: Cross-Chain DEX Aggregator MVP](PrivaDEX_aggregator.md) | [GitHub](https://github.com/kapilsinha/privadex) | ☐ | ☒ | ☒ | | [Aband-Network](https://a.band/) | [Substrate Parachain PoS Template](substrate-parachain-PoS-template.md) | [GitHub](https://github.com/Aband-Network/substrate-parachain-PoS-template) | ☐ | ☒ | ☒ | From 16200e563ad16928a24a0328e928bf51632f2e5a Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Tue, 21 Mar 2023 04:46:53 -0300 Subject: [PATCH 253/578] Update index.md (#1627) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 765051d1e43..b8876838764 100644 --- a/applications/index.md +++ b/applications/index.md @@ -112,7 +112,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Coong Team](https://coong.xyz/) | [Coong Wallet](coong_wallet.md) | [GitHub](https://github.com/CoongCrafts) | ☐ | ☐ | ☐ | | OCamlMyCaml | [PrivaDEX: Cross-Chain DEX Aggregator MVP](PrivaDEX_aggregator.md) | [GitHub](https://github.com/kapilsinha/privadex) | ☐ | ☒ | ☒ | | [Aband-Network](https://a.band/) | [Substrate Parachain PoS Template](substrate-parachain-PoS-template.md) | [GitHub](https://github.com/Aband-Network/substrate-parachain-PoS-template) | ☐ | ☒ | ☒ | -| [MangoBOX labs](https://www.mangobox.xyz/) | [MangoSale Protocol](MangoSale_Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☐ | ☐ | +| [MangoBOX labs](https://www.mangobox.xyz/) | [MangoSale Protocol](MangoSale_Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☒ | ☐ | ### 🏄‍♀️ Wave 15 - Third Quarter 2022 From baa26cd66997585a18066a29ec6fd77718e5986f Mon Sep 17 00:00:00 2001 From: Jeff Burdges Date: Tue, 21 Mar 2023 09:08:04 +0100 Subject: [PATCH 254/578] Milestone 1 is ilegal (#1624) We should update this properly --- docs/RFPs/Open/epassport-zk-validation.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/RFPs/Open/epassport-zk-validation.md b/docs/RFPs/Open/epassport-zk-validation.md index 750beec9964..f81dc0cd349 100644 --- a/docs/RFPs/Open/epassport-zk-validation.md +++ b/docs/RFPs/Open/epassport-zk-validation.md @@ -1,4 +1,5 @@ -# e-Passport ZK Validation +# e-Passport ZK Validation [ON HOLD PENDING REVISIONS] + * **Status:** Open * **Proposer:** [burges](https://github.com/burges), [FlorianFranzen](https://github.com/FlorianFranzen) From 19e410951964169744c90f097c061d8bbc89e5b3 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Tue, 21 Mar 2023 09:23:47 +0100 Subject: [PATCH 255/578] RFP update Status and update epassport --- docs/RFPs/{Implemented => Closed}/appi.md | 0 .../{Implemented => Closed}/candle-auction.md | 0 .../epassport-zk-validation.md | 2 +- .../ksm-tipping-button.md | 0 .../on-chain-quadratic-funding.md | 0 docs/RFPs/{Implemented => Closed}/php-api.md | 0 .../RFPs/{Implemented => Closed}/php-scale.md | 0 .../staking-rewards-collector-front-end.md | 0 .../uncollateralized-stablecoin-research.md | 0 .../wallet-aggregator-library.md | 0 docs/rfps.md | 22 +++++++++---------- 11 files changed, 12 insertions(+), 12 deletions(-) rename docs/RFPs/{Implemented => Closed}/appi.md (100%) rename docs/RFPs/{Implemented => Closed}/candle-auction.md (100%) rename docs/RFPs/{Open => Closed}/epassport-zk-validation.md (99%) rename docs/RFPs/{Implemented => Closed}/ksm-tipping-button.md (100%) rename docs/RFPs/{Implemented => Closed}/on-chain-quadratic-funding.md (100%) rename docs/RFPs/{Implemented => Closed}/php-api.md (100%) rename docs/RFPs/{Implemented => Closed}/php-scale.md (100%) rename docs/RFPs/{Implemented => Closed}/staking-rewards-collector-front-end.md (100%) rename docs/RFPs/{Implemented => Closed}/uncollateralized-stablecoin-research.md (100%) rename docs/RFPs/{Implemented => Closed}/wallet-aggregator-library.md (100%) diff --git a/docs/RFPs/Implemented/appi.md b/docs/RFPs/Closed/appi.md similarity index 100% rename from docs/RFPs/Implemented/appi.md rename to docs/RFPs/Closed/appi.md diff --git a/docs/RFPs/Implemented/candle-auction.md b/docs/RFPs/Closed/candle-auction.md similarity index 100% rename from docs/RFPs/Implemented/candle-auction.md rename to docs/RFPs/Closed/candle-auction.md diff --git a/docs/RFPs/Open/epassport-zk-validation.md b/docs/RFPs/Closed/epassport-zk-validation.md similarity index 99% rename from docs/RFPs/Open/epassport-zk-validation.md rename to docs/RFPs/Closed/epassport-zk-validation.md index f81dc0cd349..6f3d2706fc1 100644 --- a/docs/RFPs/Open/epassport-zk-validation.md +++ b/docs/RFPs/Closed/epassport-zk-validation.md @@ -1,7 +1,7 @@ # e-Passport ZK Validation [ON HOLD PENDING REVISIONS] -* **Status:** Open +* **Status:** On Hold * **Proposer:** [burges](https://github.com/burges), [FlorianFranzen](https://github.com/FlorianFranzen) diff --git a/docs/RFPs/Implemented/ksm-tipping-button.md b/docs/RFPs/Closed/ksm-tipping-button.md similarity index 100% rename from docs/RFPs/Implemented/ksm-tipping-button.md rename to docs/RFPs/Closed/ksm-tipping-button.md diff --git a/docs/RFPs/Implemented/on-chain-quadratic-funding.md b/docs/RFPs/Closed/on-chain-quadratic-funding.md similarity index 100% rename from docs/RFPs/Implemented/on-chain-quadratic-funding.md rename to docs/RFPs/Closed/on-chain-quadratic-funding.md diff --git a/docs/RFPs/Implemented/php-api.md b/docs/RFPs/Closed/php-api.md similarity index 100% rename from docs/RFPs/Implemented/php-api.md rename to docs/RFPs/Closed/php-api.md diff --git a/docs/RFPs/Implemented/php-scale.md b/docs/RFPs/Closed/php-scale.md similarity index 100% rename from docs/RFPs/Implemented/php-scale.md rename to docs/RFPs/Closed/php-scale.md diff --git a/docs/RFPs/Implemented/staking-rewards-collector-front-end.md b/docs/RFPs/Closed/staking-rewards-collector-front-end.md similarity index 100% rename from docs/RFPs/Implemented/staking-rewards-collector-front-end.md rename to docs/RFPs/Closed/staking-rewards-collector-front-end.md diff --git a/docs/RFPs/Implemented/uncollateralized-stablecoin-research.md b/docs/RFPs/Closed/uncollateralized-stablecoin-research.md similarity index 100% rename from docs/RFPs/Implemented/uncollateralized-stablecoin-research.md rename to docs/RFPs/Closed/uncollateralized-stablecoin-research.md diff --git a/docs/RFPs/Implemented/wallet-aggregator-library.md b/docs/RFPs/Closed/wallet-aggregator-library.md similarity index 100% rename from docs/RFPs/Implemented/wallet-aggregator-library.md rename to docs/RFPs/Closed/wallet-aggregator-library.md diff --git a/docs/rfps.md b/docs/rfps.md index a84eec46bf7..d3a5d2026dc 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -23,7 +23,7 @@ If you find an open RFP here that you think you can address, feel free to [submi - **🟢 Open:** We are looking for (additional) teams to implement this. - **🟡 Under Development:** One or more teams are working on this. We might be interested in additional implementations, but it’s better to double check this with the grants team. -- **🔴 Implemented:** This RFP is implemented. However, if it’s not maintained, we would be interested in signing a [maintenance grant](maintenance.md). +- **🔴 Closed:** This RFP is either closed, on hold, or no longer useful. However, if it’s implemented and not maintained, we would be interested in signing a [maintenance grant](maintenance.md). | RFP | Status | Last Updated | | :-- | :----: | :----------: | @@ -31,13 +31,13 @@ If you find an open RFP here that you think you can address, feel free to [submi | [alternative_polkadot_host_implementations.md](RFPs/Open/alternative_polkadot_host_implementations.md) | 🟡 | 02.03.2023 | | [analysis-website-and-data-platform.md](RFPs/Open/analysis-website-and-data-platform.md) | 🟢 | 17.02.2023 | | [anti-collusion_infrastructure.md](RFPs/Open/anti-collusion_infrastructure.md) | 🟢 | 29.11.2021 | -| [appi.md](RFPs/Implemented/appi.md) | 🔴 | 20.07.2021 | +| [appi.md](RFPs/Closed/appi.md) | 🔴 | 20.07.2021 | | [bpf-contracts.md](RFPs/Open/bpf-contracts.md) | 🟢 | 06.01.2023 | -| [candle-auction.md](RFPs/Implemented/candle-auction.md) | 🔴 | 02.02.2022 | +| [candle-auction.md](RFPs/Closed/candle-auction.md) | 🔴 | 02.02.2022 | | [crowdloan_front_end_template.md](RFPs/Under%20Development/crowdloan_front_end_template.md) | 🟡 | 18.11.2022 | | [data_analysis_tools.md](RFPs/Open/data_analysis_tools.md) | 🟢 | 25.01.2023 | | [decentralized-security-marketplace.md](RFPs/Open/decentralized-security-marketplace.md) | 🟢 | 23.01.2023 | -| [epassport-zk-validation.md](RFPs/Open/epassport-zk-validation.md) | 🟢 | 29.11.2021 | +| [epassport-zk-validation.md](RFPs/Closed/epassport-zk-validation.md) | 🔴 | 21.03.2023 | | [formal_guarantees_for_grandpa.md](RFPs/Open/formal_guarantees_for_grandpa.md) | 🟢 | 07.10.2022 | | [grant_management_webapp.md](RFPs/Open/grant_management_webapp.md) | 🟢 | 09.03.2023 | | [identity-directory.md](RFPs/Under%20Development/identity-directory.md) | 🟡 | 30.05.2022 | @@ -45,27 +45,27 @@ If you find an open RFP here that you think you can address, feel free to [submi | [ink!_smart_contract_block_explorer.md](RFPs/Under%20Development/ink_smart_contract_block_explorer.md) | 🟡 | 05.07.2021 | | [ISO_20022.md](RFPs/Open/ISO_20022.md) | 🟢 | 31.05.2022 | | [ISO_8583.md](RFPs/Open/ISO_8583.md) | 🟡 | 31.05.2022 | -| [ksm-tipping-button.md](RFPs/Implemented/ksm-tipping-button.md) | 🔴 | 20.07.2021 | +| [ksm-tipping-button.md](RFPs/Closed/ksm-tipping-button.md) | 🔴 | 20.07.2021 | | [move_smart_contract_pallet.md](RFPs/Open/move_smart_contract_pallet.md) | 🟢 | 22.12.2022 | | [multi-chain-block-explorer.md](RFPs/Under%20Development/multi-chain-block-explorer.md) | 🟡 | 23.11.2021 | -| [on-chain-quadratic-funding.md](RFPs/Implemented/on-chain-quadratic-funding.md) | 🔴 | 29.03.2022 | -| [php-api.md](RFPs/Implemented/php-api.md) | 🔴 | 27.05.2022 | +| [on-chain-quadratic-funding.md](RFPs/Closed/on-chain-quadratic-funding.md) | 🔴 | 29.03.2022 | +| [php-api.md](RFPs/Closed/php-api.md) | 🔴 | 27.05.2022 | | [parachain_validation_conformance_testing.md](RFPs/Open/parachain_validation_conformance_testing.md) | 🟢 | 18.01.2023 | -| [php-scale.md](RFPs/Implemented/php-scale.md) | 🔴 | 23.11.2022 | +| [php-scale.md](RFPs/Closed/php-scale.md) | 🔴 | 23.11.2022 | | [polkadot-collator-setup.md](RFPs/Open/polkadot-collator-setup.md) | 🟢 | 23.11.2021 | | [privacy-enhancement-polkadot-extension.md](RFPs/Under%20Development/privacy-enhancement-polkadot-extension.md) | 🟡 | 27.05.22 | | [raft-validators.md](RFPs/Open/raft-validators.md) | 🟢 | 23.11.2021 | | [scale-codec-comparator.md](RFPs/Under%20Development/scale-codec-comparator.md) | 🟡 | 30.05.2022 | | [social-recovery-wallet.md](RFPs/Under%20Development/social-recovery-wallet.md) | 🔴 | 03.03.2023 | -| [staking-rewards-collector-front-end.md](RFPs/Implemented/staking-rewards-collector-front-end.md) | 🔴 | 20.07.2021 | +| [staking-rewards-collector-front-end.md](RFPs/Closed/staking-rewards-collector-front-end.md) | 🔴 | 20.07.2021 | | [Static-Analysis-for-Runtime-Pallets.md](RFPs/Open/Static-Analysis-for-Runtime-Pallets.md) | 🟢 | 06.02.2023 | | [sub-consensus.md](RFPs/Open/sub-consensus.md) | 🟢 | 23.11.2021 | -| [uncollateralized-stablecoin-research.md](RFPs/Implemented/uncollateralized-stablecoin-research.md) | 🔴 | 01.01.23 | +| [uncollateralized-stablecoin-research.md](RFPs/Closed/uncollateralized-stablecoin-research.md) | 🔴 | 01.01.23 | | [uptane-for-substrate-design-and-scope.md](RFPs/Open/uptane-for-substrate-design-and-scope.md) | 🟢 | 04.03.2023 | | [user-account-access-analysis.md](RFPs/Open/user-account-access-analysis.md) | 🟢 | 07.01.2023 | | [validator-setup-maintenance.md](RFPs/Open/validator-setup-maintenance.md) | 🟢 | 23.11.2021 | | [validator-selection-algorithm.md](RFPs/Under%20Development/validator-selection-algorithm.md) | 🟡 | 07.12.2022 | -| [wallet-aggregator-library.md](RFPs/Implemented/wallet-aggregator-library.md) | 🔴 | 09.03.2023 | +| [wallet-aggregator-library.md](RFPs/Closed/wallet-aggregator-library.md) | 🔴 | 09.03.2023 | | [xcm-tool.md](RFPs/Open/xcm-tool.md) | 🟢 | 20.07.2021 | | [alternative-polkadot-js-api-console.md](RFPs/Open/alternative-polkadot-js-api-console.md) | 🟢 | 16.02.2023 | From d9522e7c6a0a738709e3352d7502842ffc8d5361 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 22 Mar 2023 09:05:28 +0100 Subject: [PATCH 256/578] Update ink_smart_contract_block_explorer.md (#1631) --- .../Under Development/ink_smart_contract_block_explorer.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/RFPs/Under Development/ink_smart_contract_block_explorer.md b/docs/RFPs/Under Development/ink_smart_contract_block_explorer.md index dd7b1af427e..5d1b73c750e 100644 --- a/docs/RFPs/Under Development/ink_smart_contract_block_explorer.md +++ b/docs/RFPs/Under Development/ink_smart_contract_block_explorer.md @@ -1,4 +1,4 @@ -# RFP: Substrate Identity Directory +# RFP: ink! block explorer * **Status:** [Under Development](https://github.com/w3f/Grants-Program/blob/master/applications/epirus_substrate_explorer.md) * **Proposer:** [Noc2](https://github.com/Noc2) @@ -9,4 +9,4 @@ We are looking for a team or multiple teams to implement [ink! smart contract](h ## Deliverables -The structure of the grant and the milestones depends highly on the supported features of the block explorer. \ No newline at end of file +The structure of the grant and the milestones depends highly on the supported features of the block explorer. From ea706dfa66fc61f5aba910fa741dc552ac47a84d Mon Sep 17 00:00:00 2001 From: caso Date: Wed, 22 Mar 2023 02:13:40 -0700 Subject: [PATCH 257/578] Fix discussion_private job (#1634) * Fix check discussion private * Add check * Fix checks * Update check_application_document.yml * Update check_application_document.yml --- .github/workflows/check_application_document.yml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/workflows/check_application_document.yml b/.github/workflows/check_application_document.yml index ebc4a953800..f687de9fe9b 100644 --- a/.github/workflows/check_application_document.yml +++ b/.github/workflows/check_application_document.yml @@ -7,11 +7,18 @@ on: jobs: discussion_private: - if: ${{ github.event.action == 'opened' }} + if: | + github.event.action == 'opened' && + github.event.pull_request.body && ( + contains(github.event.pull_request.body, '- [x] I prefer the discussion') || + ( + contains(github.event.pull_request.body, '- [ ] I prefer the discussion') && + !contains(github.event.pull_request.body, '@_______:matrix.org') + ) + ) runs-on: ubuntu-latest steps: - name: Add 'discussion private' label if the application is private - if: ${{ !contains(github.event.pull_request.body, '- [ ] I prefer the discussion') || !contains(github.event.pull_request.body, '@_______:matrix.org') }} uses: actions/github-script@v6 with: script: | From 34609618f00bf877bbb4094a50ff80a82f2efba9 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 22 Mar 2023 10:17:32 +0100 Subject: [PATCH 258/578] Update index.md Add XCM Tools --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index b8876838764..6c69a7a09a6 100644 --- a/applications/index.md +++ b/applications/index.md @@ -65,6 +65,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Zkverse](https://github.com/Zkvers) | [Zkverse](zkverse.md) | [GitHub](https://github.com/Zkvers/substrate-zk) | ☐ | ☐ | ☐ | | Taiwan Research-based Biopharmaceutical Manufacturers Association | [Claps Health](Claps.md) | [GitHub](https://github.com/Claps-Health/) | ☐ | ☐ | ☐ | | [Tolga Yaycı](https://github.com/tolgayayci) | [Awesome Polka](Awesome-Polka.md) | [GitHub](https://github.com/tolgayayci/awesome-polka/tree/dev) | ☐ | ☐ | ☐ | +| [gmajor](https://github.com/gmajor-encrypt) | [XCM Tools](xcm-tools.md) | [GitHub](https://github.com/gmajor-encrypt/) | ☐ | ☐ | ☐ | ## 2022 From 8e5daeb9d936cda6558fe3b67af2fbdc24e75320 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 22 Mar 2023 13:26:14 +0100 Subject: [PATCH 259/578] Update index.md Unified deployment for the collator node M1 and finished --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 6c69a7a09a6..748e7525cec 100644 --- a/applications/index.md +++ b/applications/index.md @@ -107,7 +107,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Applied Blockchain Ltd](https://appliedblockchain.com/) | [Silent Data](project_silentdata.md) | [GitHub](https://github.com/appliedblockchain) | ☐ | ☐ | ☐ | | [Web3Box Labs](https://github.com/web3box-labs) | [Web3Box](Web3Box.md) | [GitHub](https://github.com/web3box-labs) | ☐ | ☒ | ☒ | | [LimeChain](https://limechain.tech/) | [Research feasibility of Polkadot Host in Java](research-feasibiliy-java-host.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☒ | ☒ | -| [Blaize.tech](https://blaize.tech/) | [Unified deployment for the collator node](unified_collator_node_deployment.md) | [GitHub](https://github.com/babebort-blaize) | ☐ | ☐ | ☐ | +| [Blaize.tech](https://blaize.tech/) | [Unified deployment for the collator node](unified_collator_node_deployment.md) | [GitHub](https://github.com/babebort-blaize) | ☐ | ☒ | ☒ | | [Odyssey B.V.](https://odyssey.org/) | [Momentum, an open source, metaverse for digital societies](odyssey_momentum.md) | [GitHub](https://github.com/momentum-xyz) | ☐ | ☐ | ☐ | | [Bela Supernova](https://bsn.si/) | [Rubeus Keeper Stage 2](Rubeus_keeper_st2.md) | [GitHub](https://github.com/bsn-si) | ☐ | ☒ | ☒ | | [Coong Team](https://coong.xyz/) | [Coong Wallet](coong_wallet.md) | [GitHub](https://github.com/CoongCrafts) | ☐ | ☐ | ☐ | From 2c9040c60d4e3c74abfaae7cdf6d2ec1a80a52a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 22 Mar 2023 13:34:17 +0100 Subject: [PATCH 260/578] Move uptane-for-substrate-design-and-scope.md to docs/RFPs/Open --- docs/{rfps => RFPs}/Open/uptane-for-substrate-design-and-scope.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/{rfps => RFPs}/Open/uptane-for-substrate-design-and-scope.md (100%) diff --git a/docs/rfps/Open/uptane-for-substrate-design-and-scope.md b/docs/RFPs/Open/uptane-for-substrate-design-and-scope.md similarity index 100% rename from docs/rfps/Open/uptane-for-substrate-design-and-scope.md rename to docs/RFPs/Open/uptane-for-substrate-design-and-scope.md From ea3b57faa446728b5cb70634be10811688ef9fd3 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Wed, 22 Mar 2023 09:40:24 -0300 Subject: [PATCH 261/578] Update index.md to check FairSquares as completed (#1635) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 748e7525cec..74f96a50d3c 100644 --- a/applications/index.md +++ b/applications/index.md @@ -191,7 +191,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Web3 Labs Ltd](https://www.web3labs.com/epirus-explorer) | [Epirus Substrate Explorer](./epirus_substrate_explorer.md) | [GitHub](https://github.com/web3labs) | ☐ | ☒ | ☒ | | [727.ventures](https://727.ventures/) | [Sol2Ink](./sol2ink.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | | [727.ventures](https://727.ventures/) | [OpenBrush Phase 3](./openbrush-follow-up-2.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☒ | ☒ | -| [FS](https://fair-squares.nl/) | [Fair Squares](./fair_squares.md) | [GitHub](https://github.com/Fair-squares) | ☐ | ☒ | ☐ | +| [FS](https://fair-squares.nl/) | [Fair Squares](./fair_squares.md) | [GitHub](https://github.com/Fair-squares) | ☐ | ☒ | ☒ | | [Ideal Labs](https://www.idealabs.network/) | [Iris: Phase 2](./iris_followup.md) | [GitHub](https://github.com/ideal-lab5) | ☐ | ☒ | ☐ | | [NeoPower](https://www.neopower.digital/) | [Roloi: Stream money from one wallet to another](./Roloi.md) | [GitHub](https://github.com/RoloiMoney) | ☐ | ☒ | ☒ | | [Tribal Protocol Labs](https://www.tribal.fyi/) | [Tribal Protocol Smart Contract Development](./tribal_protocol.md) | [GitHub](https://github.com/tribal-protocol) | ☐ | ☒ | ☐ | From ede74e98bfdc9713f2241e866080512e4df0b7e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 22 Mar 2023 13:57:02 +0100 Subject: [PATCH 262/578] Move Collator deployment RFP to Closed (#1636) --- .../polkadot-collator-setup.md | 32 ++++++++++--------- docs/rfps.md | 2 +- 2 files changed, 18 insertions(+), 16 deletions(-) rename docs/RFPs/{Open => Closed}/polkadot-collator-setup.md (64%) diff --git a/docs/RFPs/Open/polkadot-collator-setup.md b/docs/RFPs/Closed/polkadot-collator-setup.md similarity index 64% rename from docs/RFPs/Open/polkadot-collator-setup.md rename to docs/RFPs/Closed/polkadot-collator-setup.md index a327a49296f..f4e116d27c8 100644 --- a/docs/RFPs/Open/polkadot-collator-setup.md +++ b/docs/RFPs/Closed/polkadot-collator-setup.md @@ -1,17 +1,18 @@ # Polkadot Collator Setup -* **Status:** Open -* **Proposer:** mmagician -* **Your Project(s):** https://mmagician.github.io/ -* **Projects you think this work could be useful for** Any parachain team +- **Status:** [Implemented](https://github.com/w3f/Grants-Program/blob/master/applications/unified_collator_node_deployment.md) +- **Proposer:** mmagician +- **Your Project(s):** https://mmagician.github.io/ +- **Projects you think this work could be useful for** Any parachain team -## Project Description :page_facing_up: +## Project Description :page_facing_up: This is meant as a companion repository to [polkadot-validator-setup](https://github.com/w3f/polkadot-validator-setup), which allows anyone to launch a validator node in an automated and secure fashion. I would like to standardize (as much as possible) the process of spinning up new collator nodes for different parachains. I understand it might be tricky to bundle all the parachain launch setups into one repository, but there are some ideas of how this can be tackled: + 1. Have a single collator ansible role, and each branch would correspond to a specific parachain 2. Have multiple ansible roles, and the main.yml in the project root to coordinate which roles get deployed. @@ -19,21 +20,22 @@ I would lean towards the second option. While it might lead to large repo size d ## Deliverables :nut_and_bolt: -Ideally the PoC would +Ideally the PoC would Please list the deliverables of the project in as much detail as possible. Please also estimate the amount of work required and try to divide the project into meaningful milestones. -* **Total Estimated Duration:** Duration of the whole project -* **Full-time equivalent (FTE):** Amount of time (in days) required for a single person to complete this project ([see](https://en.wikipedia.org/wiki/Full-time_equivalent)) -* **Total Costs:** Amount of Payment in USD for the whole project. +- **Total Estimated Duration:** Duration of the whole project +- **Full-time equivalent (FTE):** Amount of time (in days) required for a single person to complete this project ([see](https://en.wikipedia.org/wiki/Full-time_equivalent)) +- **Total Costs:** Amount of Payment in USD for the whole project. + ### Milestone 1 -Please add additional milestones in the same way: -* **Estimated Duration:** Duration of milestone 1 -* **FTE:** Amount of time (in days) required for a single person to complete this milestone -* **Costs:** Amount of Payment in USD for milestone 1 +Please add additional milestones in the same way: +- **Estimated Duration:** Duration of milestone 1 +- **FTE:** Amount of time (in days) required for a single person to complete this milestone +- **Costs:** Amount of Payment in USD for milestone 1 -| Number | Deliverable | Specification | +| Number | Deliverable | Specification | | ------------- | ------------- | ------------- | | 1. | Title of the deliverable | Please describe the deliverable here as detailed as possible | -| 2. | ... |...| +| 2. | ... |...| diff --git a/docs/rfps.md b/docs/rfps.md index d3a5d2026dc..b3a956c5f95 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -52,7 +52,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [php-api.md](RFPs/Closed/php-api.md) | 🔴 | 27.05.2022 | | [parachain_validation_conformance_testing.md](RFPs/Open/parachain_validation_conformance_testing.md) | 🟢 | 18.01.2023 | | [php-scale.md](RFPs/Closed/php-scale.md) | 🔴 | 23.11.2022 | -| [polkadot-collator-setup.md](RFPs/Open/polkadot-collator-setup.md) | 🟢 | 23.11.2021 | +| [polkadot-collator-setup.md](RFPs/Closed/polkadot-collator-setup.md) | 🔴 | 22.03.2023 | | [privacy-enhancement-polkadot-extension.md](RFPs/Under%20Development/privacy-enhancement-polkadot-extension.md) | 🟡 | 27.05.22 | | [raft-validators.md](RFPs/Open/raft-validators.md) | 🟢 | 23.11.2021 | | [scale-codec-comparator.md](RFPs/Under%20Development/scale-codec-comparator.md) | 🟡 | 30.05.2022 | From 40c75b51d8611bf93581f7a8913faec95dcf245b Mon Sep 17 00:00:00 2001 From: David Semakula Date: Wed, 22 Mar 2023 19:51:15 +0300 Subject: [PATCH 263/578] Add ink! analyzer (#1615) --- applications/ink-analyzer.md | 261 +++++++++++++++++++++++++++++++++++ 1 file changed, 261 insertions(+) create mode 100644 applications/ink-analyzer.md diff --git a/applications/ink-analyzer.md b/applications/ink-analyzer.md new file mode 100644 index 00000000000..d40714f768a --- /dev/null +++ b/applications/ink-analyzer.md @@ -0,0 +1,261 @@ +# ink! Analyzer + +- **Team Name:** David Semakula +- **Payment Address:** 0x5c1D926f62B61C9cf62167474111385ff7393c61 (USDC) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +### Overview + +ink! analyzer is a collection of modular and reusable libraries and tools for semantic analysis of [ink!](https://use.ink/) smart contract code. + +#### Objective + +ink! analyzer aims to improve [ink!](https://use.ink/) language support in [integrated development environments (IDEs)](https://en.wikipedia.org/wiki/Integrated_development_environment), [source code editors](https://en.wikipedia.org/wiki/Source-code_editor) and other development tools by providing modular and reusable building blocks for implementing features like diagnostic errors, code completion suggestions, code/intent actions and hover content for the [ink! programming language](https://use.ink/) which is used for writing smart contracts for blockchains built on [Substrate](https://substrate.io/). + +#### Problem +ink! is an [Embedded Domain Specific Language (eDSL)](https://wiki.haskell.org/Embedded_domain_specific_language) that you can use to write [WebAssembly](https://webassembly.org) based smart contracts in the [Rust](https://www.rust-lang.org/) programming language. +In fact, ["ink! is just standard Rust in a well-defined "contract format" with specialized `#[ink(…)]` attribute macros"](https://use.ink/getting-started/creating-an-ink-project). + +This allows ink! developers to leverage Rust tooling like [clippy](https://doc.rust-lang.org/clippy/), [cargo](https://doc.rust-lang.org/cargo/), [crates.io](https://crates.io/) and excellent IDE/code editor support via [rust-analyzer](https://rust-analyzer.github.io/) and [IntelliJ Rust](https://www.jetbrains.com/rust/). + +However, relying on only generic Rust language support in IDEs, code editors and other development tools has some significant limitations for the developer experience including: + +- No language support (e.g. diagnostic errors) for ink!'s domain specific semantic rules for smart contracts (e.g. exactly one `#[ink(storage)]` struct, at least one `#[ink(message)]` method and the same for `#[ink(constructor)]`, ink! attributes should be applied to items of the correct type e.t.c) +- Inconsistent editor experience with issues like no code completion and/or hover content for some ink! attribute macro arguments (e.g `#[ink(payable)]`) because [macro expansion/name resolution and trait resolution are hard problems for generic IDE/code editor tools](https://rust-lang.github.io/compiler-team/working-groups/rls-2.0/#scope-and-purpose) (see also [https://rust-analyzer.github.io/blog/2021/11/21/ides-and-macros.html](https://rust-analyzer.github.io/blog/2021/11/21/ides-and-macros.html)). + +#### Solution + +To solve the above challenges and improve ink! language support in IDEs, code editors and other development tools, this project will create two main components: +- a modular domain-specific semantic analysis library for ink!. +- a [Language Server Protocol (LSP)](https://microsoft.github.io/language-server-protocol/) implementation built on top of the aforementioned semantic analysis library. + +These two components can then be reused to add ink! language support to multiple IDEs, code editors and other development tools. + +In particular, a large number of IDEs and code editors support LSP servers, these include [Visual Studio Code, Visual Studio, Vim / Neovim, Emacs, Atom, Sublime Text, Acme, Lapce, Eclipse and many more](https://microsoft.github.io/language-server-protocol/implementors/tools/). +This project makes it relatively easy for any developer to write extensions/plugins/integrations that add ink! language support to any tool with support for LSP servers. + +While for IDEs, code editors and other development tools that don't support LSP servers, extensions/plugins/integrations can either implement their own LSP client middleware or use the semantic analyzer directly. +However, this grant application will focus on an LSP based architecture. + +Lastly, this project will implement a [Visual Studio Code](https://code.visualstudio.com/) extension that adds ink! language support to the editor as a reference implementation and showcase. +However, other developers will be encouraged to leverage the above components to add ink! language support to their preferred IDE, code editor or other development tool. + +#### Observation + +In the context of smart contracts and the blockchain ecosystem, [static code analysis](https://en.wikipedia.org/wiki/Static_program_analysis) tends to be closely associated with security and vulnerability detection. +This project uses the narrower term "semantic analysis" because its primary goal (at this stage) is to improve ink! language support in IDEs, code editors and other development tools. +Therefore, initially, ink! analyzer will not provide any features related to security and vulnerability detection. +However, such functionality may be added in the future. + +### Project Details + +#### Architecture Diagram + +![ink! Analyzer - LSP based Architecture Diagram](https://davidsemakula.com/static/images/ink-analyzer/w3f/architecture.png "ink! Analyzer - LSP based Architecture Diagram") +*Figure 1: ink! Analyzer - LSP based Architecture Diagram* + +#### Architecture Components + +##### 1. Semantic Analyzer + +The semantic analyzer is responsible for parsing the smart contract code, analyzing it based on ink!'s semantic rules for smart contracts and returning semantic information for other components to consume. + +It will be written in [Rust](https://www.rust-lang.org/) and will use rust-analyzer's [ra_ap_syntax](https://docs.rs/ra_ap_syntax/latest/ra_ap_syntax/) crate for generating the syntax tree of the smart contract code that it analyzes. +It will have an internal architecture similar to rust-analyzer's [ra_ap_ide](https://docs.rs/ra_ap_ide/latest/ra_ap_ide/) crate with notions of persistent state, change over time, immutable snapshots of state and cancellable transactions. + +While ink!'s [ink_ir](https://docs.rs/ink_ir/latest/ink_ir/) crate includes syntax tree and intermediate representation (IR) modules, the semantic analyzer will use rust-analyzer libraries because the [ink_ir](https://docs.rs/ink_ir/latest/ink_ir/) crate uses [syn](https://docs.rs/syn/latest/syn/) as its parser and syn (being ["geared toward use in Rust procedural macros"](https://docs.rs/syn/latest/syn/)) [assumes "that all input to it is well-formed"](https://github.com/rust-lang/rfcs/pull/2256#issuecomment-353753261). +This makes it unsuitable for our IDE/code editor use case, because among [other design goals](https://github.com/rust-lang/rust-analyzer/blob/master/docs/dev/syntax.md#design-goals) for this use case, parsing should be: +- resilient (even if the input is invalid, parser tries to see as much syntax tree fragments in the input as it can). +- lossless (even if the input is invalid, the tree produced by the parser represents it exactly). + +Because of these and other [design goals](https://github.com/rust-lang/rust-analyzer/blob/master/docs/dev/syntax.md#design-goals), rust-analyzer created its own parsing and syntax tree libraries instead of using the rust compiler's original libsyntax parser or [syn](https://docs.rs/syn/latest/syn/) as articulated in the [RFC](https://github.com/rust-lang/rfcs/pull/2256) that [initiated its development](https://github.com/rust-lang/rfcs/pull/2256#issuecomment-451933766). +ink! analyzer follows the same rationale in choosing rust-analyzer's libraries over [ink_ir](https://docs.rs/ink_ir/latest/ink_ir/)'s [syn](https://docs.rs/syn/latest/syn/) based modules. + +As a concrete example, for the !ink/Rust code snippet below that contains only one invalid line, [syn](https://docs.rs/syn/latest/syn/) simply returns an error while [ra_ap_syntax](https://docs.rs/ra_ap_syntax/latest/ra_ap_syntax/) still generates a lossless syntax tree with errors represented by "error nodes", thus allowing analysis to still be performed on the rest of the valid code. +```rust +#[ink::contract] +mod flipper { + + #[ink(storage)] + pub struct Flipper { + value: bool, + } + + bad statement; // This is an invalid line +} +``` + +However, [ink_ir](https://docs.rs/ink_ir/latest/ink_ir/) and related crates and modules will still be used as reference implementations for ink! semantic rule validation. + +##### 2. Language Server + +The language server implements the [Language Server Protocol (LSP)](https://microsoft.github.io/language-server-protocol/) and acts as a backend that provides language support features like diagnostic errors, code completion suggestions, code/intent actions and hover content to IDEs, code editors and other development tools. +It uses the semantic analyzer as the engine for providing ink! language support features by: +- translating LSP requests into semantic analyzer interface calls. +- translating semantic analysis results into corresponding LSP types. + +It can be reused by multiple IDEs, code editors and other development tools that support LSP servers including [Visual Studio Code, Visual Studio, Vim / Neovim, Emacs, Atom, Sublime Text, Acme, Lapce, Eclipse and many more](https://microsoft.github.io/language-server-protocol/implementors/tools/). + +It will be written in [Rust](https://www.rust-lang.org/) and will use rust-analyzer's [lsp-server](https://docs.rs/lsp-server/latest/lsp_server/) crate to handle LSP protocol handshaking and parsing messages. + +##### 3. Extension/Plugin/Integrations for IDE, Code Editor or Development Tool + +Extensions/plugins/integrations add ink! language support to a specific IDE, code editor or development tool by communicating with the language server running as a separate process using the [Language Server Protocol](https://microsoft.github.io/language-server-protocol/) via [JSON-RPC](https://www.jsonrpc.org/). + +Only a VS Code extension will be implemented at this stage of the project. +The VS Code extension will be written in [TypeScript](https://www.typescriptlang.org/) using VS Code's [extension API](https://code.visualstudio.com/api). + +#### Technology Stack + +[Rust](https://www.rust-lang.org/) - will be used for implementing the semantic analyzer and language server components. + +[TypeScript](https://www.typescriptlang.org/) - will be used for implementing the VS Code extension. + +### Ecosystem Fit + +This project will provide building blocks for improving ink! language support in IDEs, code editors and other development tools thus improving the developer experience for ink! smart contract developers. +It will additionally implement an extension for VS Code, [one of the most popular code editors for developers](https://survey.stackoverflow.co/2022/#section-most-popular-technologies-integrated-development-environment), that will also serve as a showcase and reference implementation that other developers can use as a guide for adding ink! language support to their preferred IDE or code editor if it supports LSP servers. + +I'm not currently aware of any similar projects in the Substrate / Polkadot / Kusama ecosystem. +However, for [Solidity](https://docs.soliditylang.org/en/v0.8.19/) and the [Ethereum](https://ethereum.org/) ecosystem, there are many IDE and code editor extensions/plugins (e.g. [this](https://marketplace.visualstudio.com/items?itemName=JuanBlanco.solidity), [this](https://marketplace.visualstudio.com/items?itemName=NomicFoundation.hardhat-solidity) and [this](https://marketplace.visualstudio.com/items?itemName=AckeeBlockchain.tools-for-solidity) for [Visual Studio Code](https://code.visualstudio.com/) and [Solidity plugin for IntelliJ](https://plugins.jetbrains.com/plugin/9475-solidity)), +a few language server implementations (e.g. [this](https://github.com/NomicFoundation/hardhat-vscode/tree/development/server) and [this](https://ackeeblockchain.com/woke/docs/2.1.0/language-server/) which are both used by their respective VS Code extensions) +and a few static code analyzers, including [Remix Analyzer](https://github.com/ethereum/remix-project/tree/master/libs/remix-analyzer) which is specifically built for IDEs and code editors. + +**NOTE:** The only open source smart contract static code analyzer for the Substrate / Polkadot / Kusama ecosystem I could find is [Vanguard](https://github.com/Veridise/Vanguard), however it operates on [LLVM](https://llvm.org/) bytecode and is therefore not usable as a building block for improving high-level language support in IDEs, code editors and other development tools. + +## Team :busts_in_silhouette: + +### Team members + +- David Semakula [davidsemakula](https://github.com/davidsemakula) + +### Contact + +- **Contact Name:** David Semakula +- **Contact Email:** hello@davidsemakula.com +- **Website:** https://davidsemakula.com + +### Legal Structure + +I'll be working as an individual. + +- **Registered Address:** N/A +- **Registered Legal Entity:** N/A + +### Team's experience + +I'm a Software Engineer & Systems Architect with over 10 years of experience. +I've worked as a technical lead on projects for [HubSpot](https://www.hubspot.com/), [Permobil](https://www.permobil.com/), [Pressboard](https://www.pressboardmedia.com/), [Grindery](https://www.grindery.io/), [InboundLabs](https://w.inboundlabs.co/), [Tunga](https://tunga.io/), [ButterflyWorks](https://www.butterflyworks.org/), [Telegraaf Media Groep (TMG)](https://www.telegraaf.nl/) and many more companies. +I've also won (or been part of teams that have won) prizes at a few hackathons including a category top prize at the recent [Moonbeam Illuminate/22 Hackathon](https://twitter.com/MoonbeamNetwork/status/1610738659656962048). +I hold a Bachelor of Science in Computer Science degree from [Makerere University, Kampala, Uganda](https://cis.mak.ac.ug/). +You can find my full profile at [https://davidsemakula.com](https://davidsemakula.com). + +### Team Code Repos + +- [https://github.com/davidsemakula](https://github.com/davidsemakula) +- [https://github.com/ink-analyzer/ink-analyzer](https://github.com/ink-analyzer/ink-analyzer) +- [https://github.com/davidsemakula/substrate-vault](https://github.com/davidsemakula/substrate-vault) +- [https://github.com/mukutu-tech/mukutu-safe](https://github.com/mukutu-tech/mukutu-safe) + +### Team LinkedIn Profiles (if available) + +- https://davidsemakula.com (I use my own website for my profile) + + +## Development Status :open_book: + +I've developed a proof of concept (POC) for the semantic analyzer that can be accessed on Github at [https://github.com/ink-analyzer/ink-analyzer](https://github.com/ink-analyzer/ink-analyzer). +The POC implements a diagnostic that detects when the `#[ink::contract]` attribute is applied to anything other than a `mod` item and returns a diagnostic model that includes an error message and the text range to which the diagnostic applies. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** ~4.25 months +- **Full-Time Equivalent (FTE):** 1 +- **Total Costs:** 30,000 USDC + +### Milestone 1 — Semantic Analyzer: Setup and Diagnostics + +- **Estimated duration:** ~3 weeks +- **FTE:** 1 +- **Costs:** 5,600 USDC + +| Number | Deliverable | Specification | +|--------:|---------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **0a.** | License | Apache 2.0 and MIT | +| **0b.** | Documentation | I will provide detailed source documentation including rustdoc documentation that will be published to [docs.rs](https://docs.rs/) and a README file (published on on [Github](https://github.com/), [crates.io](https://crates.io/) and [docs.rs](https://docs.rs/)) providing general information about the library, instructions for installing and using the library and links to other documentation and resources related to the library. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, I will describe how to run these tests. | +| **0d.** | Docker | I will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Rust library crate: Diagnostic errors | I will create a Rust library crate with an interface that accepts ink! smart contract code as input and returns diagnostic errors based on ink!'s semantic rules. Diagnostic errors will include: conflicting ink! attributes and/or arguments based on the item being annotated and list of ink! attribute arguments (e.g `#[ink(storage)]` applied to anything other than a struct), missing required ink! attributes (e.g no `#[ink(constructor)]`, `#[ink(storage)]` or `#[ink(message)]` in a contract mod), multiple annotations of attributes and/or arguments that can only be applied to one item in a contract (e.g multiple `#[ink(storage)]` structs or more than one wildcard selector among `#[ink(message)]`, as well as `#[ink(constructor)]` methods), duplicate ink! attributes on an item (e.g multiple `#[ink(message)]` annotations on one method), overlapping `#[ink(constructor)]`and `#[ink(message)]` selectors. | + +### Milestone 2 — Semantic Analyzer: Code completion suggestions, code/intent actions and hover content + +- **Estimated duration:** ~5-6 weeks +- **FTE:** 1 +- **Costs:** 10,800 USDC + +| Number | Deliverable | Specification | +|--------:|------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **0a.** | License | Apache 2.0 and MIT | +| **0b.** | Documentation | I will provide detailed source documentation including rustdoc documentation that will be published to [docs.rs](https://docs.rs/) and a README file (published on on [Github](https://github.com/), [crates.io](https://crates.io/) and [docs.rs](https://docs.rs/)) providing general information about the library, instructions for installing and using the library and links to other documentation and resources related to the library. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, I will describe how to run these tests. | +| **0d.** | Docker | I will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Rust crate update: Code completion suggestions | I will update the semantic analyzer crate to provide an interface that accepts ink! smart contract code and a cursor position as input and returns code completion suggestions for relevant ink! attributes and arguments. | +| 2. | Rust crate update: Code/intent actions | I will update the semantic analyzer crate to provide an interface that accepts ink! smart contract code and a cursor position as input and returns code/intent actions for adding relevant ink! attributes and arguments. | +| 3. | Rust crate update: Hover content | I will update the semantic analyzer crate to provide an interface that accepts ink! smart contract code and a text range as input and returns documentation for relevant ink! attributes and arguments. | + +### Milestone 3 — Language Server + +- **Estimated duration:** ~3-4 weeks +- **FTE:** 1 +- **Costs:** 6,800 USDC + +| Number | Deliverable | Specification | +|--------:|-----------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **0a.** | License | Apache 2.0 and MIT | +| **0b.** | Documentation | I will provide detailed source documentation including rustdoc documentation that will be published to [docs.rs](https://docs.rs/) and a README file (published on on [Github](https://github.com/), [crates.io](https://crates.io/) and [docs.rs](https://docs.rs/)) providing general information about the crate, instructions for installing and using the crate and links to other documentation and resources related to the crate. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, I will describe how to run these tests. | +| **0d.** | Docker | I will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Rust binary crate: ink! Language Server Protocol implementation | I will create Rust binary crate that implements the Language Server Protocol for the ink! language support features provided by the semantic analyzer as outlined in milestones 1 and 2 above (i.e diagnostic errors, code completion suggestions, code/intent actions and hover content as defined in the respective milestones above). | + +### Milestone 4 — Visual Studio Code Extension + +- **Estimated duration:** ~3-4 weeks +- **FTE:** 1 +- **Costs:** 6,800 USDC + +| Number | Deliverable | Specification | +|--------:|------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **0a.** | License | GPL-3.0 | +| **0b.** | Documentation | I will provide inline source documentation and a README file (published on on [Github](https://github.com/) and the [VS Code marketplace](https://marketplace.visualstudio.com/vscode)) providing general information about the extension, instructions for installing and using the extension and links to other documentation and resources related to the extension. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive integration tests to ensure functionality and robustness. In the guide, I will describe how to run these tests. | +| **0d.** | Docker | I will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | I will publish an **article** that explains how to use all the components of ink! analyzer, including the VS Code extension, the language server and the semantic analyzer. | +| 1. | Visual Studio Code Extension | I will create a Visual Studio Code Extension that supports the ink! language support features provided by the language server and semantic analyzer as outlined in milestones 1, 2 and 3 above (i.e diagnostic errors, code completion suggestions, code/intent actions and hover content as defined in the respective milestones above). | + +## Future Plans + +I will publish the VS Code extension to the [VS Code marketplace](https://marketplace.visualstudio.com/vscode) and share it along with the code and documentation for all ink! analyzer components in Substrate / Polkadot / Kusama ecosystem developer communities. + +In the short-term, I will likely apply for follow-up funding for: +- adding more features to existing components. +- maintaining existing components. +- adding new reusable components for tools that don't support LSP. + +As the project is a public good, the long-term goal is to create a community of users, contributors and ecosystem partners who are invested in the project's long-term success because of its utility. + +## Referral Program (optional) :moneybag: + +N/A + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** + +Web3 Foundation Website. + + + From 029fbbf0ab52866d047e00ce855f82772de2cec2 Mon Sep 17 00:00:00 2001 From: Samuel Brack Date: Wed, 22 Mar 2023 20:30:40 +0100 Subject: [PATCH 264/578] Create DIA_Bridge_Attestation_Oracle.md (#1611) * Create DIA_Bridge_Attestation_Oracle.md * Integrate Feedback - Clarification on scope of the milestones - Removal of a sentence from the template --- applications/DIA_Bridge_Attestation_Oracle.md | 274 ++++++++++++++++++ 1 file changed, 274 insertions(+) create mode 100644 applications/DIA_Bridge_Attestation_Oracle.md diff --git a/applications/DIA_Bridge_Attestation_Oracle.md b/applications/DIA_Bridge_Attestation_Oracle.md new file mode 100644 index 00000000000..ee5af496357 --- /dev/null +++ b/applications/DIA_Bridge_Attestation_Oracle.md @@ -0,0 +1,274 @@ +# Bridges Attestation Oracle + +- **Team Name:** DIA Data +- **Payment Address:** 0xC13233bd20a7FcB1d7c2394AdE4857b778382264 Ethereum. Preferred currency - USDC (0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48). +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +### Overview + +Decentralized, on-chain bridge attestation oracle for Polkadot using off-chain workers + +Over the last few years, bridges have been the target of a number of high profile hacks. According to the [rekt.news](https://rekt.news/leaderboard/) 'hack leaderboard', 4 of the top 5 hacks in terms of USD value lost were attacks on bridges (total $2.2 billion lost amongst these 4 hacks). Despite many efforts to develop more robust and secure bridge architectures, there is no industry-wide tooling available for protocols to bolster their security in case a bridge is hacked. This is why we aim to to develop a decentralised, real-time bridge status update oracle that will help protocols in the Polkadot ecosystem protect their operations and customer funds. + +![Bridge Attestaion Oracle Solution Overview](https://user-images.githubusercontent.com/103409771/224655563-dbd6dca4-839d-41a5-859e-fa74c8868f84.png "Attestation oracle architecture") + +Our approach is to introduce on-chain verification of bridge balances on the Polkadot network using off-chain workers. The main idea behind this is that all dapps operating on Polkadot parachains will be able to integrate this security module, enabling them to trigger automated precautionary notifications and actions in case bridge balances unexpectedly drop. We achieve this by tracking bridges' locked asset vs issued assets across multiple chains. This allows us to calculate a collateral ratio, which protocols can use to define and trigger safety procedures in their code when the specified conditions are met. + +The DIA team has already gained experience with collateral ratios, while creating fair value price feeds for Liquid Staked Tokens in the Polkadot ecosystem and beyond (more info [here](https://www.diadata.org/xlsd-liquid-staking-oracle/)). The bridge attestation oracle would be specifically designed for use in the Polkadot ecosystem. Being a crosschain oracle by nature, we perceive a significant benefit in the proposed solution, because using the collateral ratio in the determination of asset prices that use bridges to bring liquidity to multiple blockchains enables the calculation of fair value prices. + +### Project Details + +#### Architecture overview + +The proposed project consists of a few core components that are to be developed. + +First, an overview regarding the data structures needed to represent bridge states: + +``` +Asset: + Address string + Chain string + Decimals uint + Symbol string + Name string + +BridgeSet: + LockedAssets []Asset + MintedAsset Asset + LockedAmounts []uint + MintedAmount uint + +Bridge: + Sets []BridgeSet +``` + +Note that `BridgeSet` is directional, so a bridge can hold a set twice in both directions if needed. By that, we can track minted and locked pairs in an omnidirectional way. Also note, that a `BridgeSet` mints one token but can access several locked assets on different source chains. + +With these in mind, the following components are proposed: + +1. An off-chain worker which reads bridge states: This component is used as an adapter between bridge states and the target parachain. It is used to read the amounts of locked assets from specified addresses (the bridge reserve addresses). +2. A token identification system which identifies matching tokens across multiple chains (i.e. both sides of each bridged asset). Identification requires that for an asset at least the chain and the address are defined. + +An example flow on the token identification within the proposed system could look like this: +1. Read bridge-locked tokens on multiple source blockchains with RPC calls. +2. Compute total amount of locked tokens by adding the values from the previous calls. +3. Determine the amount of issued tokens on the target network. +4. Perform calculation `MintedAmount - Sum([]LockedAmounts)`. +5. Output values of number of issued tokens, number of locked tokens and collateral ratio values. + +All components will be available open-source to enable access to any dapp/protocol that intends to integrate this or further develop the components. +Also, a standard format (similar to the defined data structures above) will be developed to facilitate integrations of future bridges. + +#### Technology stack + +- Pallet & off-chain workers will be the main enabler of the entire solution, reflecting Polkadot's native feature of off-chain workers integrated with pallets. + - Rust programming language will be used to develop the pallet and the off-chain worker. +- RPCs will be the main gateway for querying data from different chains. As RPCs represent single points of failure, they will be implemented using the following logic: + - Only publicly available RPCs will be used to circumvent private key management hurdles for publicly accessible solutions. If technically possible, we would enable the pallet integrator to choose their own private RPCs, if they prefer this. + - We will set-up a back-up system of at least 2 additional public RPCs in case one RPCs fails. + - We will set-up backstops for generating collateral value in case at least one of the RPCs fail. + +Hosting and infrastructure will be organized as follows: + +The main repository will be available on Github. Pre-built instances of our container images will live in Docker Hub for everyone to download. We seek to implement a CI/CD system that automatically builds and publishes latest changes so that anyone can use the latest version with ease and integrate fetching the latest version in their automation flow as well. Due to the decentralized nature of the proposed architecture, only the token identification data needs to be hosted centrally. For that, we will either extend existing community directories or build our own, with hosting the resulting identification files on github as well. + +We will also host documentation on how to use and participate in the system. + +#### MVP + +Our MVP will consist of four main parts: +1. The pallet providing collateral value that can be integrated by parachains +2. The documentation of integration +3. Integration of 3 bridges +4. Guidelines on integrating new bridges + +#### Expectations + +Team DIA will: +- Create the framework and open-source the library of this integration. +- Integrate 3 bridges for initial use. Further integrations will be open for submissions from contributors. + +We will not: +- Cover a security audit as a part of MVP design. + +### Ecosystem Fit (Requirements) + +#### Overview + +The Polkadot ecosystem is a natural fit for this solution for several reasons: +- Polkadot is a network of numerous parachains which utilize XCM for trustless and secure communication without relying on bridges. However, to achieve the vision of interoperability with external chains, bridge monitoring and attestation are necessary to establish trust and ensure the integrity of the transactions between the networks. +- The entire architecture of the product is tailored specifically to the Polkadot ecosystem due to it's unique ability of executing computational programs via off-chain workers. +- The tool adds significant value for a variety of Polkadot ecosystem actors - parachains, dapps, bridges, oracles and others. +- The tool aims to serve as a public good on Polkadot, therefore will benefit anyone that integrates it. + +#### Target audience + +We have identified our target audience as follows: +- Parachains are the target facilitator that will enable the adoption, but they also stand to benefit from integration themselves as the tool enables them to track bridges' security on a chain level. +- DeFi dapp developers (e.g., lending protocols) are the main beneficiaries. We expect to see most adoption from them, as they are the arbiters that enable bridged assets to be traded/staked or used however else and thus are most directly exposing their users' assets to these risks. +- Bridges can integrate the security module to create their own security processes. They will strongly benefit from having an independent third party tracker next to their own internal ones. +- Oracles will be able to use the collateral ratio for interchain asset pricing. In theory, native asset trading statistics can be bridged to synthetic asset in order to decrease manipulation risk. +- As the module will be fully open source, any other Polkadot ecosystem developer/team can integrate it for their use cases. + +#### Meeting the needs + +Bridge hacks are rare but painful because of the potentially high amount of funds that are constantly at risk / an attractive target for malicious actors. Therefore, the bridge attestation oracle will provide a live auditing tool for any actor in the Polkadot ecosystem that wants to make their operation more secure. + +In discussions with various ecosystem actors, the idea and architecture of the solution were presented with the goal of validating the problem and the potential solution. We received supportive feedback from all interviewees, and therefore decided to pursue the inititive further. + +To verify the relevance of the idea we conducted interviews with several ecosystem participants, including + +- Acala +- Astar +- AstridDAO +- Interlay +- Pendulum +- StellaSwap + + +#### Similar projects + +We were not able to identify any similar solution present in the market. Similar approaches can be attributed to: +1. Proof of Reserves oracles - developed by several oracle providers, these oracles track the amount of tokens in reserves and provide this information publicly. +2. Cross-chain messaging protocols - these have architectural similarity in that one could transmit bridge balances as a message, however there are several limitations to this approach: + - They would act as a 2nd layer bridge (bridge for bridge balances) and are also prone to manipulation. + - Gas fees would have to be paid on the origin chain, which causes potentially volatile costs required to run such operation, putting them at risk. +3. Real time alert providers for smart contract activities. Tools such as [Forta](https://explorer.forta.network/) allow to set-up monitoring and notifications for pre-determined smart contract activities. However, they do not offer a direct solution for bridge balance monitoring, which we aim to deliver. + +As our proposed solution is different in nature, we do not perceive any of the existing approaches as real alternatives. Additionally, all of these solutions are commercially driven, while the bridge attestation oracle will serve as a public good. + +#### Risks + +- RPC manipulation risk - the solution will use RPC services to retrieve data from blockchains. Therefore, if someone manages to manipulate RPC data, the final value could be exploited. A potential mitigation could be to introduce connections to multiple RPCs simultaneously to reach a consensus. +- Contract migration risk - from time to time protocols may need to migrate or upgrade contracts. This could produce incosistent values. To avoid this, direct communication channels with bridges can be set up and tracked to flag any changes on the smart contract level. This could be complemented with community based forum where contributors could also flag these migrations manually. +- Off-chain worker operational risk - the solution is developed on the assumption that off-chain workers can be trusted and will be maintained within the Polkadot ecosystem. However, upgrades, malfunctions or the unlikely event of discontinuation of off-chain workers poses a risk to the solution. In this case, migration to another off-chain computation platform could be a mitigation (e.g. Phala or Integritee). + + +## Team :busts_in_silhouette: + +### Team + +- Samuel Brack // Cofounder and CTO at DIA // [Github](https://github.com/kaythxbye) // [LinkedIn](https://www.linkedin.com/in/samuelbrack/) +- Philipp Pade // Lead Integrations Developer at DIA // [Github](https://github.com/jppade) // [LinkedIn](https://www.linkedin.com/in/jan-philipp-pade/) +- Nitin Gurbani // Senior Developer at DIA // [Github](https://github.com/nnn-gif) // [LinkedIn](https://www.linkedin.com/in/nitin-g-098229228/) +- Zygis Marazas // Product Lead at DIA // [LinkedIn](https://www.linkedin.com/in/zygimantas-marazas/) +- Paul Claudius // Cofounder and Business Development Lead at DIA // [LinkedIn](https://www.linkedin.com/in/paulclaudius/) +- Dillon Hanson // Business Development Manager at DIA // [LinkedIn](https://www.linkedin.com/in/dillonhanson/) + + +### Contact + +- _**Contact Name:** Paul Claudius +- _**Contact Email:** paul.claudius@diadata.org +- _**Website:** https://www.diadata.org/ + +### Legal Structure + +- _**Registered Address:** Baarerstrasse 10, 6300 Zug, Switzerland. +- _**Registered Legal Entity:** DIA e.V. + +### Team's experience + +Experience which will help to succesfully develop this project is listed below: + +#### Development of a pallet for oracles + +Team DIA has extensive experience in developing a pallet for Polkadot using off-chain workers. The pallet was developed to serve the purpose of accessing oracles natively by parachains. The documentation of the solution can be found [here](https://docs.diadata.org/documentation/oracle-documentation/oracle-structure/polkadot-offchain-worker). + +#### Scraping Multichain bridge + +Team DIA already did experiments with automatic bridged assets identification, therefore we already developed a [Multichain](https://multichain.xyz/) bridge scraper which maps out assets accross a variety of chains. + +#### Development of collateral based values for nASTR, iBTC, stDOT, stETH, rETH, vKSM, kBTC + +We recently launched xLSD - a product that tracks collateral values for liquid staked tokens + +#### Established partnerships in oracle fields with Polkadot ecosystem parachains + +We are already present in the Polkadot ecosystem and have developed oracles for a range of parachains and dapps, and integrated natively with a range of DEXs including: + +- Moonbeam & Moonriver + - Midas Capital + - Mixbytes + - Orbiter One + - Raze Network +- Astar + - Starlay + - SIO2 Finance + - Algem + - AstridDAO + - Orcus Finance + - Starfish Finance + - Rikkei Finance + - Arka Finance + - Standard Protocol +- Pendulum +- Interlay +- Bifrost + +DEX integrations: +- Beamswap (Moonbeam) +- Stellaswap (Moonbeam) +- Arthswap (Astar) +- Huckleberry (Moonriver) +- Solarbeam (Moonriver) + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 3 months +- **Full-Time Equivalent (FTE):** 1.5 FTE +- **Total Costs:** 30,000 USD + +### Milestone 1 - Core functionality + +- **Estimated duration:** 1.5 months +- **FTE:** 1.5 +- **Costs:** 18,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can intgrate the collateral value into their code, which will display the functionality. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an **article** that introduces to the solution with all the guidelines included. | +| 1. | Attestation oracle core: Off-chain worker | We will create an Off-chain worker as stated in the architecture overview section. | +| 2. | Attestation oracle core: Pallet | The entire solution will be made available as Pallet (described in architecture section). | +| 3. | Attestation oracle core: RPCs | We will set-up connections to RPCs of other chains with fallback functionality (at least 2 RPCs per chain). | +| 4. | Attestation oracle core: Collateral ratio calculation | The logic for calculating collateral ratio will be developed within the off-chain worker. | + + +### Milestone 2 — Bridge integrations + +- **Estimated Duration:** 1.5 months +- **FTE:** 1 +- **Costs:** 12,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can integrate bridges collateralization value, which will show how the new functionality works. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Bridge Integration: XCM | We will develop a module as part of the proposed solution that retrieves collateral information for assets bridged by the [XCM bridge contracts](https://github.com/paritytech/polkadot/tree/master/xcm). | +| 2. | Bridge Integration: Multichain | We will develop a module as part of the proposed solution that retrieves collateral information for assets bridged by the [Multichain bridge contracts](https://github.com/anyswap). | +| 3. | Bridge Integration: Interlay | We will develop a module as part of the proposed solution that retrieves collateral information for assets bridged by the [Interlay bridge contracts](https://github.com/interlay/interbtc). | + + +## Future Plans + +We see a lot of potential for the future of the solution, these include: +- Develop attestation for multichain Liquid Staked Tokens (e.g. aUSD). +- Spin-off as independent solution (not a pallet). +- Develop monitoring dashboards for researchers. +- Create built-in notifications services. +- Expand into any smart contract metrics tracking that allows users to define their own logic. +- Introduce community driven governance for any changes and future directions of the solution. + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** - personal recommendation From 7ccf1194b6594c5b95aed7d51d6f639eb143632b Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 23 Mar 2023 09:00:59 +0100 Subject: [PATCH 265/578] Update index.md Add Ink Analyzer --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 74f96a50d3c..9337d45e658 100644 --- a/applications/index.md +++ b/applications/index.md @@ -66,6 +66,7 @@ Use this page for an overview of all public grants and their status. Use the sid | Taiwan Research-based Biopharmaceutical Manufacturers Association | [Claps Health](Claps.md) | [GitHub](https://github.com/Claps-Health/) | ☐ | ☐ | ☐ | | [Tolga Yaycı](https://github.com/tolgayayci) | [Awesome Polka](Awesome-Polka.md) | [GitHub](https://github.com/tolgayayci/awesome-polka/tree/dev) | ☐ | ☐ | ☐ | | [gmajor](https://github.com/gmajor-encrypt) | [XCM Tools](xcm-tools.md) | [GitHub](https://github.com/gmajor-encrypt/) | ☐ | ☐ | ☐ | +| [David Semakula](https://github.com/davidsemakula) | [Ink Analyzer](ink-analyzer.md) | [GitHub](https://github.com/ink-analyzer/ink-analyzer) | ☐ | ☐ | ☐ | ## 2022 From ff11ced29e503589c994a7091c91fae6b4f97a20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kasia=20=C5=81ukasiewicz?= Date: Thu, 23 Mar 2023 09:01:58 +0100 Subject: [PATCH 266/578] Grant application - High-availability validator setup (#1203) * Grant application - High-availability validator setup * Update High_availability_validator_setup.md The updated version of the original grant proposal that required some feedback from the Parity developers team * Apply suggested changes The proposal file has been updated * Reduced the sum of application * Apply suggestions from code review Co-authored-by: S E R A Y A * Update applications/High_availability_validator_setup.md Accept review suggestions Co-authored-by: S E R A Y A --------- Co-authored-by: S E R A Y A --- .../High_availability_validator_setup.md | 182 ++++++++++++++++++ 1 file changed, 182 insertions(+) create mode 100644 applications/High_availability_validator_setup.md diff --git a/applications/High_availability_validator_setup.md b/applications/High_availability_validator_setup.md new file mode 100644 index 00000000000..839f60592b9 --- /dev/null +++ b/applications/High_availability_validator_setup.md @@ -0,0 +1,182 @@ +# High-availability validator setup + + +- **Team Name:** Bright Inventions +- **Payment Address:** 0xD75dDC4Aa3618e1417c68E5Df79ef9D66E4B1Ed9, DAI +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + + +## Project Overview :page_facing_up: + +Validator leader selection via Raft consensus. +This is a follow-up to the previous version of the grant, that was up for discussion with the Parity development team. + +### Overview + +Currently, the recommended setup is to have one active node per validator. The main advantage of this approach is that it removes the danger of equivocation, thus preventing slashing. The key drawback is the lack of a ready backup machine to takeover the responsibility of producing blocks, voting on finality etc. in case the primary one fails. + +The drawback can be somewhat remedied by having a backup node in sync, but without access to the session keys necessary for authoring blocks. The process of replacing the keys, however, is manual. Furthermore, the session keys cannot be replaced mid-session and this introduces a time delay for when the validator is active again. + +### Project Details + +Rather than relying on one validator node to perform the work, what if we had multiple nodes equally capable of taking part in consensus, yet still avoiding the risk of equivocation? + +Since all our validator nodes are trusted and we don't worry about censorship resistance, we can leverage a leader-follower model to ensure high availibility. [Raft](https://raft.github.io/) is a good candidate - it offers a simple consensus mechanism, fault-tolerance and performance. It ensures only one leader is ever in charge of interacting with the network, while the followers simply receive the state updates and automatically replace the leader in case of a failure. + +Following the feedback from the Parity developers team our solution is not tightly coupled with Substrate node as it adds too much complexity in the node. It should be implemented in a way that makes this optional and loosely coupled with the node. + +### Ecosystem Fit + +The goal is to present a solution that would update the current recommended setup of one active node per validator and allow to use multiple nodes. + +## Team :busts_in_silhouette: + +### Team members + +- Katarzyna Łukasiewicz +- Kasper Ziemianek +- Michał Graliński + +### Contact + +- **Contact Name:** Katarzyna Łukasiewicz +- **Contact Email:** katarzyna.lukasiewicz@brightinventions.pl +- **Website:** https://brightinventions.pl/ + +### Legal Structure + +- **Registered Address:** ul. Jana Matejki 12, 80-232 Gdańsk, Poland +- **Registered Legal Entity:** Bright Inventions Sp. z o. o. + +### Team's experience + +Bright Inventions is a team of over 70 full-time onsite developers, project managers & UX/UI designers - experts in mobile and web applications, systems integration, IOT devices and Blockchain platforms. + +We believe that building a software product is about people working together in a collective way. By offering complex support – mobile and web development as well as IT consultancy we try to eliminate roadblocks towards engaging clients as partners at every step of the process. + +We support startups, digital agencies as well as medium to big businesses. We cooperate with startups, accelerators and incubators. Whatever the client profile is, we always aim to establish a satisfying partnership for both sides. Since 2012 we have built software for more than 40 businesses worldwide. + +The team: +- Michał - Rust Developer, for over 12 years he has been working as a C++ developer. In his career he participate in various projects, starting from the embedded devices, automotive, mobile games and ending on the financial systems. Right now he is focused on the blockchain technology. +- Kasper - Software developer with 10 years of experience. Former Java Developer who has recently switched to Rust. Around blockchain ecosystem since 2017. +- Kasia - she has been working with agile methods for over 10 years, both as a researcher and a practitioner. She believes in teamwork and a power of user centered mindset. With experience in leading international projects, she knows how to support and encourage timely and high quality deliveries. + +Previous grants that the team members were involved in: +- BrightTreasury +- ZK-Snarks tutorial in Substrate + +### Team Code Repos + +- https://github.com/bright/substrate + +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. + +- https://github.com/bufta +- https://github.com/kziemianek +- https://github.com/mgralinski-bright + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/katarzyna-łukasiewicz-b473901aa/ +- https://www.linkedin.com/in/kziemianek/ +- https://www.linkedin.com/in/michal-gralinski-b464152/ + + +## Development Status :open_book: + +This grant proposal is a follow-up to a discussion that began in autumn 2022. Since then we managed to receive some required feedback from Parity development team and we continued to apply their suggestions in the span of these few months. It allowed us to already develop most of the original scope. + +## Development Roadmap :nut_and_bolt: + + +### Overview + +The development of the specified goal will be broken into 3 milestones, lasting 4 weeks (M1), 3 weeks (M2) and 2 weeks (M3). + + +Definition of Done for each deliverable: +
    +
  • Unit tests passed
  • +
  • Code has been reviewed by peer
  • +
  • Acceptance criteria were met
  • +
  • Internal QA has been performed
  • +
  • Documentation has been written
  • +
+ + +At the end of each milestone: +- The deliverables listed for the given milestone have been implemented and the DoD criteria were met, allowing the user to perform the defined actions +- The functioning code has been pushed to the public repository, indicated in the proposal + +## Deliverables :nut_and_bolt: + +* **Total Estimated Duration:** 9 weeks +* **Full-time equivalent (FTE):** 1 +* **Total Costs:** 25,000 DAI + +### Milestone 1 - Block authoring, finalization & liveness PoC + +The goal of the first milestone will be adding a switch to the substrate codebase, which will conditionally allow block production, voting or sending `I'm online` message. We will achieve this by introducing a `PermissionResolver` trait. Only for the purpose of this milestone there are going to be two trivial implantations of this trait. First configuration will grant the validator permissions and the second one will not. At this stage we only want to verify if hardcoded conditional logic works well with the nodes with the same auth key but different configurations (permission granted/denied). For the testing purpose we will provide an additional option to the CLI, to run a validator with one of the pointed configurations. + +* **Estimated Duration:** 4 weeks +* **FTE:** 1 +* **Costs:** 12,500 DAI + +| Number | Deliverable | Specification | +| ------------- | ------------- | ------------- | +| **0a.** | License | Apache 2.0 / GPLv3 / MIT / Unlicense | +| **0b.** | Documentation | We will provide inline documentation.| +| **0c.** | Testing and Testing Guide | We will provide unit tests and the guidelines for running and testing it the scope. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Update substrate | Modify the substrate code to conditionally submit blocks/votes for finalised blocks (GRANDPA)/`I'm online` messages. | +| 2. | Update substrate client - cli | Modify the substrate code to conditionally grant or permit permissions. There will be option to run node in permission granted or permission denied mode). It will be useful to prove that permissioning works by running two nodes with same auth keys but different modes (permission granted/denied) | +| 3. | Integration test | A dockerised setup that allows to run network in setup described above. | + +### Milestone 2 - External service for permission granting + +The second milestone introduces a microservice which will test dynamic switching of the permission granting, during the validator's work. We will be able to test permission granting triggered whenever the block is produced, the vote is made on the finalized block (GRANDPA) and a message (`I'm online`) is sent for communicating liveness. Only the leader validator will be granted to run those actions. At worst, the author may miss a slot. + +The service should contain only basic logic (e.g. return `true` for node that asked first and `false` for following ones). + + +* **Estimated Duration:** 3 weeks +* **FTE:** 1 +* **Costs:** 7,500 DAI + +| Number | Deliverable | Specification | +| ------------- | ------------- | ------------- | +| **0a.** | License | Apache 2.0 / GPLv3 / MIT / Unlicense | +| **0b.** | Documentation | We will provide inline documentation.| +| **0c.** | Testing and Testing Guide | We will provide unit tests and the guidelines for running and testing it the scope. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Basic service | Create a microservice that accepts connections from the node. | +| 2. | Getting permission from microservice | Set up a custom node repository and write the `PermissionResolver` trait implementation for getting permission from the microservice. | +| 3. | Allow as optional | The choice of using an outside decision making agent for block submission should be configurable in the cli. | +| 4. | Clean up substrate code | Remove deprecated cli options. | +| 5. | Integration test | A dockerized setup that allows to run custom node networks and a microservice in order to show that the created solution works. | + +### Milestone 3 - Raft based current leader selection + +Replace the dummy microservice as an infrastructure component with a [TiKV](https://github.com/tikv/tikv) cluster used for leader selection. +Each node should try to get authorship permission based on the KV (Key-value) state. Replace the current microservice client with a TiKV client and add corresponding logic. + +* **Estimated Duration:** 2 weeks +* **FTE:** 1 +* **Costs:** 5,000 DAI + +| Number | Deliverable | Specification | +| ------------- | ------------- | ------------- | +| **0a.** | License | Apache 2.0 / GPLv3 / MIT / Unlicense | +| **0b.** | Documentation | We will provide inline documentation.| +| **0c.** | Testing and Testing Guide | We will provide unit tests and the guidelines for running and testing it the scope. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Run the necessary Raft services | Set up a local dev infrastructure to run TiKV components in order to provide a distributed KV store. | +| 2. | Integrate a Raft client into the node | Replace the previous logic with a TiKV based one and modify configs to allow the TiKV client to connect to Placement Drivers. Placement Drivers (PD) is one of the components which stores metadata for the entire TiKV cluster. It is responsible for sending commands to the TiKV nodes. The minimum setup for PD is to manage three TiKV nodes. | +| 3. | Integration test | A dockerised setup that allows to test the Raft consensus mechanism. | + + + +#### Leader selection process + +![](https://i.imgur.com/ummEJOK.png) +Similar for rounds and sessions. From c537b874f8fdf5469e8f7b31e654e7e4fd32c9a4 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 23 Mar 2023 09:04:46 +0100 Subject: [PATCH 267/578] Update index.md Add High-availability validator setup --- applications/index.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/applications/index.md b/applications/index.md index 9337d45e658..abb5faf6a8c 100644 --- a/applications/index.md +++ b/applications/index.md @@ -67,6 +67,8 @@ Use this page for an overview of all public grants and their status. Use the sid | [Tolga Yaycı](https://github.com/tolgayayci) | [Awesome Polka](Awesome-Polka.md) | [GitHub](https://github.com/tolgayayci/awesome-polka/tree/dev) | ☐ | ☐ | ☐ | | [gmajor](https://github.com/gmajor-encrypt) | [XCM Tools](xcm-tools.md) | [GitHub](https://github.com/gmajor-encrypt/) | ☐ | ☐ | ☐ | | [David Semakula](https://github.com/davidsemakula) | [Ink Analyzer](ink-analyzer.md) | [GitHub](https://github.com/ink-analyzer/ink-analyzer) | ☐ | ☐ | ☐ | +| [Bright Inventions](https://brightinventions.pl/) | [High-availability validator setup](High_availability_validator_setup.md) | [GitHub](https://github.com/bright/) | ☐ | ☐ | ☐ | + ## 2022 From f4ba5367fe9c1cb35312979e262afbc848dd2a4b Mon Sep 17 00:00:00 2001 From: Noc2 Date: Thu, 23 Mar 2023 09:11:55 +0100 Subject: [PATCH 268/578] update raft validator rfp --- docs/RFPs/{Open => Under Development}/raft-validators.md | 2 +- docs/rfps.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename docs/RFPs/{Open => Under Development}/raft-validators.md (97%) diff --git a/docs/RFPs/Open/raft-validators.md b/docs/RFPs/Under Development/raft-validators.md similarity index 97% rename from docs/RFPs/Open/raft-validators.md rename to docs/RFPs/Under Development/raft-validators.md index 3aa80f361dc..b07a20fd265 100644 --- a/docs/RFPs/Open/raft-validators.md +++ b/docs/RFPs/Under Development/raft-validators.md @@ -1,6 +1,6 @@ # High-availability validator setup -* **Status:** Open +* **Status:** [Under Development](https://github.com/w3f/Grants-Program/blob/master/applications/High_availability_validator_setup.md) * **Proposer:** mmagician * **Projects you think this work could be useful for:** Polkadot & Kusama Validators diff --git a/docs/rfps.md b/docs/rfps.md index b3a956c5f95..fbe7b431d58 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -54,7 +54,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [php-scale.md](RFPs/Closed/php-scale.md) | 🔴 | 23.11.2022 | | [polkadot-collator-setup.md](RFPs/Closed/polkadot-collator-setup.md) | 🔴 | 22.03.2023 | | [privacy-enhancement-polkadot-extension.md](RFPs/Under%20Development/privacy-enhancement-polkadot-extension.md) | 🟡 | 27.05.22 | -| [raft-validators.md](RFPs/Open/raft-validators.md) | 🟢 | 23.11.2021 | +| [raft-validators.md](RFPs/Under%20Development/raft-validators.md) | 🟡 | 23.05.2023 | | [scale-codec-comparator.md](RFPs/Under%20Development/scale-codec-comparator.md) | 🟡 | 30.05.2022 | | [social-recovery-wallet.md](RFPs/Under%20Development/social-recovery-wallet.md) | 🔴 | 03.03.2023 | | [staking-rewards-collector-front-end.md](RFPs/Closed/staking-rewards-collector-front-end.md) | 🔴 | 20.07.2021 | From c38807ea824c1943639010c2d42fcff46b374d45 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 23 Mar 2023 09:23:27 +0100 Subject: [PATCH 269/578] Update index.md Add DIA Data --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index abb5faf6a8c..868aca6bb44 100644 --- a/applications/index.md +++ b/applications/index.md @@ -68,7 +68,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [gmajor](https://github.com/gmajor-encrypt) | [XCM Tools](xcm-tools.md) | [GitHub](https://github.com/gmajor-encrypt/) | ☐ | ☐ | ☐ | | [David Semakula](https://github.com/davidsemakula) | [Ink Analyzer](ink-analyzer.md) | [GitHub](https://github.com/ink-analyzer/ink-analyzer) | ☐ | ☐ | ☐ | | [Bright Inventions](https://brightinventions.pl/) | [High-availability validator setup](High_availability_validator_setup.md) | [GitHub](https://github.com/bright/) | ☐ | ☐ | ☐ | - +| [DIA Data](https://www.diadata.org/) | [Bridges Attestation Oracle](DIA_Bridge_Attestation_Oracle.md) | [GitHub](https://github.com/diadata-org/) | ☐ | ☐ | ☐ | ## 2022 From 8cbb9dc21c289e3de88955e323ca23cfccc83b91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 23 Mar 2023 09:47:50 +0100 Subject: [PATCH 270/578] Update index.md XCW (Kuma Wallet) M1 --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 868aca6bb44..8fbc5133efe 100644 --- a/applications/index.md +++ b/applications/index.md @@ -34,7 +34,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☐ | ☐ | | [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | | [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☒ | ☐ | -| [Blockcoders](http://blockcoders.io/) | [Cross-chain Wallet - XCW](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☐ | ☐ | +| [Blockcoders](http://blockcoders.io/) | [Cross-chain Wallet - XCW](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☐ | | [OmniBTC](https://omnibtc.finance/) | [Polkadot Smart Chain](psc.md) | [GitHub](https://github.com/OmniBTC/PSC) | ☐ | ☒ | ☒ | | [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☒ | ☒ | | [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | From 1ed370762f2cdfa643e1f5338cd4c554e1d02092 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Thu, 23 Mar 2023 09:39:54 -0300 Subject: [PATCH 271/578] Update index.md (#1637) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 8fbc5133efe..26c421ccaa6 100644 --- a/applications/index.md +++ b/applications/index.md @@ -52,7 +52,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Polytope Labs](https://research.polytope.technology/) | [Trie Verifier Implementation](solidity-trie-verifier.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | | Off-Narrative Labs | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☐ | ☐ | | [FuzzLand](https://fuzz.land/) | [FuzzLand](FuzzLand.md) | [GitHub](https://github.com/fuzzland) | ☐ | ☐ | ☐ | -| [Fuu](https://github.com/ff13dfly/) | [Anchor, On-chain Linked List pallet and Name Service](Anchor.md) | [GitHub](https://github.com/ff13dfly/Anchor) | ☐ | ☐ | ☐ | +| [Fuu](https://github.com/ff13dfly/) | [Anchor, On-chain Linked List pallet and Name Service](Anchor.md) | [GitHub](https://github.com/ff13dfly/Anchor) | ☐ | ☒ | ☒ | | [hack-ink](https://hack.ink/) | [Slothunter](slothunter.md) | [GitHub](https://github.com/hack-ink) | ☐ | ☐ | ☐ | | [Invers Inc](https://invers.tech/) | [Zkwasm Rollups Transfer](zkwasm-rollups-transfer.md) | [GitHub](https://github.com/zero-network) | ☐ | ☐ | ☐ | | [decentraDOT](https://decentradot.com/) | [Cyclops Validator Dashboard](cyclops.md) | [GitHub](https://github.com/ArthurHoeke?tab=repositories) | ☐ | ☒ | ☐ | From 6e5bd9f13e1a82cf17363535eac62f90a2307901 Mon Sep 17 00:00:00 2001 From: katerinabc Date: Thu, 23 Mar 2023 14:42:38 +0000 Subject: [PATCH 272/578] TogetherCrew: Community Health Check (#1482) * community health check * 1 added a section on how we handle GDPR. 2 clarified the milestones. 3 specified our future plans * added currency to payment address * based on feedback pivoted the grant to create a community health dashboard for Twitter and not Discord" * added to milestone 2 information about tests and docker files * Update applications/community-health-check.md Co-authored-by: S E R A Y A * Update applications/community-health-check.md Co-authored-by: S E R A Y A * Update applications/community-health-check.md Co-authored-by: S E R A Y A * Update applications/community-health-check.md Co-authored-by: S E R A Y A * Update applications/community-health-check.md Co-authored-by: S E R A Y A * Update applications/community-health-check.md Co-authored-by: S E R A Y A * answered the open questions from takahser and noc2. * remove jpg file * Update applications/community-health-check.md Co-authored-by: S E R A Y A * specified the edge types * cleaned up milestone 1 --------- Co-authored-by: S E R A Y A --- applications/community-health-check.md | 292 +++++++++++++++++++++++++ 1 file changed, 292 insertions(+) create mode 100644 applications/community-health-check.md diff --git a/applications/community-health-check.md b/applications/community-health-check.md new file mode 100644 index 00000000000..8d1bfa7a66b --- /dev/null +++ b/applications/community-health-check.md @@ -0,0 +1,292 @@ +# Community Health Analytics and Benchmarking + +- **Team Name:** TogetherCrew +- **Payment Address:** eth:0x6612213880f80b298aB66375789E8Ef15e98604E (USDC) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + + + +### Overview + +If Web3 is all about communities, how do we know if we’re heading in the right direction? We can guess or use anecdotal evidence. Or we can use science and analytics to map our paths. + +We are proposing a project to: + +- develop a framework for Community Health with actionable metrics +- create an open source data collection tool +- implement the tool in Polkadot and Kusama communities +- analyse the interactions and perceptions data to validate the framework and provide insights to advance the communities + +As communities exists in different places, to get an accurate health score it is necessary to combine data from different platforms. Over the past six months we have developed a community health dashbord for Discord data (private data) and are now integrating public data (Twitter) and on-chain data (governance). + +We use a grant-matching approach to fund our project. The completed development work has been funded by Aragon, Polygon, MetaCartel, Aave, and Near. + + +**An indication of how your project relates to Polkadot / Kusama.** +Polkadot is a diverse ecosystem with "[more than 200 teams](https://polkadot.network/blog/polkadot-2022-roundup/)" using Polkadot's technology stack. A lot of development within the ecosystem makes it increasingly difficult for community members to stay on top of everything. The evaluation of the community will provide members and leaders with deep insights into the challenges the community is facing. We compute the community's fragmentation, decentralization, and small world score. In addition, we create custom metrics for engagement and disengagment. + + +**An indication of why your team is interested in creating this project** + +### Problem Space + +Existing community dashboards provide a first basic level of insights into a community: individual activity. But they often ignore that the building block of a healthy community isn't just posting messages but the interaction between people. Current community dashboards (e.g., Orbit, Commosor, Blazer, Statbot) focus on members’ posting behavior and event or meeting attendance. Community members are treated in isolation, ignoring that humans are social beings and thrive thanks to interactions. From [team research](https://www.cs.cmu.edu/~ab/Salon/research/Woolley_et_al_Science_2010-2.pdf) we know that a team's collective intelligence is a primary predictor of performance, and not the individual skills and knowledge team members contribute. One key component of collective intelligence is conversational turn-taking, creating space for other people to talk. + +### Problem Solution +We are offering community health checks that are based on the relationships between people and their sense of belonging and ownership in the community. We do this by creating and implementing a science-based community health framework. This framework rests on years of research on communities and social networks. + +Our community health checks combine objective data (interactions between contributors) and subjective data (contributors perceptions about the community). Interactions between contributors are a vital data point: During interactions, members exchange knowledge, develop ideas, and influence each others perspective. Therefore, a community dashboard that measures interaction patterns, compared to solely activity, acknowledges that contributors do not act in isolation. Measuring perception data through pulse survey (tiny surveys with 3-5 questions) gives community leaders a quick and easily administered insights into how contributors feel. + +Although our initial focus is community health metrics, the proposed approach sets the foundation for further applications. The combination of SNA and pulse surveys offers unprecedented actionable insights in real-time. Some of the potential applications and insights for the ecosystem are + +- Generate baseline metrics for community health / vibes to quantify and better understand the impact a specific event is having on a community and/or sub-groups within the community +- Identify measurements of decentralization to serve as KPIs or Insights metrics +- Build funnels to track member onboarding and identify areas for improvement +- Monitor specific topics like contributor wellbeing, alignment, community experience, etc. in near real-time +- Attract talent and investment with objective community health metrics instead of proxy metrics like member count or proposal count, or financial metrics such as TVL +- Help new contributors find context-rich mentors outside of the existing pool of well-known but time-poor candidates + +### Rationale + +Social network data and its methodology (Social Network Analysis; SNA) is a structured way to visualize how communications, information, and value creation occur through an organization based on interaction graphs. Although a relatively new decision-making tool for leaders, SNA is gaining popularity over traditional survey tools. SNA has been linked to a wide range of insights, such as improving contributor retention, avoiding member burnout, predicting team performance and community resilience, identifying key contributors, enabling decentralization, and improving coordination. + +![Data points for measuring community health](https://user-images.githubusercontent.com/5393704/224280603-03e8b7a7-4212-4a46-b957-ef06ebe3de5a.png) + +Pulse surveys are frequent and automated micro-surveys that provide qualitative and quantitative insights. In traditional organizations, they have been shown to increase employee response rates and employee engagement with related initiatives. They’re also used as a tool for culture design and implementing culture change. Lastly, pulse surveys significantly reduce admin work for community managers and related roles. + +A challenge with online communities is that they can exist in many different places (platforms). We began with developing and testing our method using Discord. The advantage of Discord compared to other platforms is a clear boundary of who is a member (people who joined), and an organization of interaction into channels and threads. + +For this grant proposal, we are going beyond Discord data to consider a community's meeting place with more fluid boundaries: Twitter. The open nature of Twitter, compared to Discord, makes it easier for individuals to follow topics and engage in a conversation. Thus, Twitter can be viewed as the first place individuals get to know about a community. The interaction that is happening in the Twitter community helps people decide if they want to commit more time and energy and join Discord. + +The community health check will provide insights into three areas: +1. Twitter Community Health: The section combines the community's digital footprint (objective interaction data assessing interactions within a community) with members' sense of community (subjective sense of ownership). +2. Member Insights: The section displays the pulse survey results, measuring members' sense of community. + + +- What your project is _not_ or will _not_ provide or implement +We will not provide a detailed action plan of how to increase engagement on Twitter. We will provide high-level recommendations based on the resulting metrics. + +At this stage, we do not provide sentiment or keyword analysis at the community or interaction level. We start with a neutral perspective on interaction (two people interacting with each other) and do not consider finer nuances (is the interaction positive or negative). + + +- An overview of the technology stack to be used +Our dashboard is built using a combination of Nextjs (Typescript). Also, we use Python for analytics & ExpressJs for the backend. Data is stored in a MongoDB. + +- Documentation of core components, protocols, architecture, etc. to be deployed +Installation instructions for the first version of our community health checks: +- data extraction bot: https://www.notion.so/netnigma/Community-Health-bot-Tutorial-94a4b089681f41aeb028e1bffd25aaad +- DIY health checks: https://www.notion.so/netnigma/Getting-started-with-the-Health-Pulse-Onboarding-guide-8545d383ec5d4d70aeb4b2aae22d97d7 + + +- PoC/MVP or other relevant prior work or research on the topic +We published our research framework ([Long version](https://rndao.mirror.xyz/F-SMj6p_jdYvrMMkR1d9Hd6YbEg39qItTKfjo-zkgqM); [summary](https://rndao.mirror.xyz/fsCGRlYR5rieDCVPnAnSAGL98wNWJyFbf1T_A2r-_6Y)) + +We did a health check for MetaGame, who tweeted it [here](https://twitter.com/MetaFam/status/1603818967528718336). + +We are running the community health check on our small team. Our low fidelity [dashboard](https://www.figma.com/proto/jflSBwHW3b5KgohsaYExuN/TogetherCrew?scaling=scale-down-width&page-id=0%3A1&starting-point-node-id=1%3A49&show-proto-sidebar=1&node-id=1%3A49&hide-ui=1) is available. + + + +### Ecosystem Fit + +- Where and how does your project fit into the ecosystem? +Our project gives the ecosystem information about its health by measuring the interactions (conversations, relationships) between contributors. We consider this a "soft performance indicator", because it doesn't measure objective aspects (e.g., performance, dapps launched, bugs fixed) but centers on the humans of the ecosystem. + +- Who is your target audience (parachain/dapp/wallet/UI developers, designers, your own user base, some dapp's userbase, yourself)? +The community health check is for community managers and moderators to support them in their work by providing community metrics. + +- What need(s) does your project meet? +Our project provides moderators, leaders, and contributors with a bird's eye view of what is happening inside the ecosystem. + +- Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem? +Our current approach rests on off-chain data. Other community analytics dashboard exists, fetching data from various off-chain data. However, they focus on posting behavior and not on the interaction between members. Individual posting behavior focuses only on the number of activities of a person, but not how these activities impact others. Our data points are relationships (replies, mentions, emoji reactions). Orbit.love reach metric, conceptually, comes close to our metrics, but technically also rests on individual posting behavior and not interaction data. + +Looking at on-chain community analysis, Chainverse is similar in terms of methodology (network analysis). However, they are currently solely focusing on on-chain data and are adopting a knowledge graph methodology. + +There is a [RFP for website and on-chain data analysis ](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/analysis-website-and-data-platform.md). The RFP is about creating an "easy-to-use front-end with sharable customized dashboards" and thus broader than our proposal. + + +## Team :busts_in_silhouette: + + + +### Contact + +- **Contact Name:** Katerina Bohle Carbonell +- **Contact Email:** katerina@netnigma.com +- **Website:** http://www.togethercrew.com/ + +### Legal Structure + +- **Registered Address:** na +- **Registered Legal Entity:** na + +### Team Member and their experience + +We combine deep expertise in Network Science and Organisational Network Mapping, Business Intelligence, DAOs and Community Building. + +**Team Leads** + +Katerinabc +Ph.D. in Team Dynamics using Social Network Analysis, Teaching Collaboration, and Organizational Performance at Northwestern University (since 2016). +Co-organized Learning in Networks sessions at the International Conference of Social Network Analysis (2018 - 2020), and previously advised a people analytics company on social network metrics. +- Twitter: twitter.com/katerinabohlec 1 +- Linkedin: linkedin.com/in/katerinab +- Github: https://github.com/katerinabc/ + +Danielo +Previously, Head of Governance at Aragon, 8 years experience in Organization Design consulting (clients include Google, BCG, Daymler, The UN, and multiple startups), and visiting lecturer at Oxford University. +- Twitter: https://twitter.com/_Daniel_Ospina +- LinkedIn: https://www.linkedin.com/in/conductal/ + +Thegadget.eth +Software Engineer. Previously, Product Manager at Neolyze (Business Intelligence Dashboard for Instagram). +- Github: https://github.com/thegadget-eth/ +- Twitter: https://twitter.com/mr_gadget22 + + +Part of our team is also a tech lead ([Mehrdad](https://github.com/mehrdadmms)), UX designer ([DenisFox](https://www.linkedin.com/in/denisabrichtova)), Front-end developer ([Nima](https://github.com/Zueis), Back-End developer ([MagicPalm](https://github.com/magicpalmtree)), data analyst ([Ene](https://github.com/TjitsevdM)), and operations/business development lead (Ashish). + + +**Team Advisor** + +Sam +Previously, Head of Technical Research at Aragon. Previously, Lead Developer of the official JavaScript API for the Ethereum blockchain. +- Github: https://github.com/nivida 1 +- Twitter: https://twitter.com/furter_samuel + + +### Team Code Repos + +All repos with the *tc* preface are part of the TogetherCrew project (community health check) +- https://github.com/RnDAO + + +## Development Status :open_book: + +The project consists of a research part (conceptual framework) and a development part (open source data collection tool). The first phase of the research part has been completed. + +### Conceptual Framework +We began to work on the community health check in Spring 2022. We have assembled a team including two PhDs in network science and an organisation designer with significant DAO and community building experience to bridge both theory and practice. We’ve reviewed over 50 papers on community, social network analysis, resilience, trust, engagement, and more. We synthesized the findings to define key indicators with high validity and predictive capacity for community health, while also taking a holistic perspective that accounts for member’s wellbeing. + +We have published our [conceptual framework](https://rndao.mirror.xyz/F-SMj6p_jdYvrMMkR1d9Hd6YbEg39qItTKfjo-zkgqM). This framework describes the different nested systems within a community and details a number of metrics (*vital signs*). It incldues insights from one of our team members on [network resilience network biomimicky](https://network.mirror.xyz/EaRncgRP-8_UzHzlZtu4G8FVxcK-GvgtouYbkEVFrc4). + + +### Data collection +For the **data collection tool**, we’re going beyond traditional surveys by combining interaction data with short, targeted pulse surveys. Interaction data provides us with objective data about what is happening inside the community (social network data). While pulse survey data offers insights into members' beliefs and emotional attachment to the community (pulse surveys). + +The data is anonymised and collected in a central repository for this first phase (we’re exploring decentralised hosting) and managed by a team having received ethics training and at risk of losing their credentials should it be misused. + +Currently, the data pipeline for Discord is ready and functional. We have used Discord's API to fetch the data. In February we did a soft launch of our dashboard which only visualises Discord activity. The charts for displaying our custom-build engaged and disengaged members categories are being implemented in March 2023. + +At the end of 2022, we have begun conceptual work on how to analyze Twitter and on-chain data. Efforts have remained conceptual as we were focusing on our first data pipeline (Discord). + +We have started to build the designs for the pulse survey functinality and will begin user-testing the prototype end of March 2023. + + +#### Is this safe or legal/ Are you GDPR compliant? +Analyzing conversations in private channels (e.g., Discord) is within a grey zone of private and public conversations and a sensitive issue. Servers and channels that are not gated in anyway (token or role) are akin to public conversations as there are no barriers for people to enter and join the conversations. On the other hand, once users need to fulfil certain criterias or pay in order to access a server/channel, the conversation could be perceived as private. This distinction has ethical and legal consequences. + +For this reason, we have worked with a legal counsel via LexDAO. As part of this, two lawyers have reviewed the process from fetching data and presenting results to ensure we are within GDPR laws. On Wednesday 22nd February we had a GDPR session for our team and implemented the lawyers' recommendations. +- anti-virus software to be installed on the personal laptops of the two data scientists who have access to the raw data +- a data transfer agreement will be signed with the data scientist residing in the US +- We will prepare a record of processing activities + +Once our process from data fetching to analysis will be fully automated, we will +- create a mock database developers can use for testing data fetching and analysis +- periodically review who has access to the db and remove unnecessary person + + +### Implementation +To date, we have delivered six community health reports (Aragon, MetaGame, Verida, Canabis Genom DAO, LexClinic, Aave), built a [prototype of our dashboard](https://www.figma.com/proto/whU3PlyPvdoSWdhUYQW7e9/Community-Health?node-id=4428%3A3647&scaling=min-zoom&page-id=3314%3A6028&starting-point-node-id=4428%3A3647&disable-default-keyboard-nav=1&hide-ui=1) and conducted 12 user interviews. + +After our first report, we have adopted a step-wise approach to integrating the network metrics, focusing on providing a clear, concise, jargon-free explanation. In addition, we have included a simulation section in our health reports to showcase what the health metric could be if the interaction pattern changes or if there is a large change in the community size. + +While the development of the full dashboard is ongoing, we continue to deliver low fidelity dashboards to interested communities. This lets us interact closely with users, helping us learn more about their problems and shape onboarding material for users. Interested communities get direct access to our team of data scientist who happily investigate follow-up questions. + +Early development of this project has been funded by [Aragon](https://forum.aragon.org/t/real-time-community-health-analytics), Polygon DAO, [Aave](https://noturhandle.gitbook.io/rndao/proposals/proposals/grant-proposal-aave), [MetaCartel](https://forum.metacartel.org/t/grant-request-community-health-a-project-by-rndao/2354) and Near. + +## Development Roadmap :nut_and_bolt: + + +### Overview + +- **Total Estimated Duration:** 10 weeks +- **Full-Time Equivalent (FTE):** 6 +- **Total Costs:** 15 000 USDC + +We are following a grant-matching processes to spread the risk among different communities. + +### Milestone 1 - Defining metrics + +- **Estimated duration:** 4 weeks +- **FTE:** 1 +- **Costs:** 5000 USDC + +Research social network metrics that are viable to measure the health of a community on Twitter, and how they integrate with our existing community health framework. This will build on our existing framework, extending it to metrics that have been tested and used in Twitter communities. For example, we will look into approaches to build the network, virality and clustering/fragmentation of very large online communities. + +Note: We have done an evaluation to decide wheter Reddit or Twitter would be a better option. In the discussion we had with other communities, we were more often asked about an integration with Twitter than with Reddit. Hence, from a scaling perspective, we decided that focusing first on Twitter makes more sense with us. + +That being said, we realize that Twitter is undergoing a lot of changes, and we might have to do a last minute pivot to another platform. We are building our analytical scripts in such a way that they can easily be used for other platforms. Therefore, the only thing that has to be changed in the milestones is the name of the platform. + +Milestone 1 will be focused on research. Hence, we're not going to deliver the following usually mandatory deliverables: + +- Documentation +- Testing and Testing Guide +- Docker + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | The results will be published open-access using an Apache 2.0, GPLv3, or MIT license. We will decide later which one is most suitable for the written document. | +| 0e. | Article| We will publish an article (technical document) describing the metrics, the insights (so-what), and limitations. This article will also explain how the Twitter community is build (e.g., who are nodes, when there is an edge between two people, who is excluded/included and why). We will build a directed network, where nodes are always Twitter users. From a network assembly perspective, we will not differentiate between accounts representing people and those representing communities or organizations. The edges between an user profiles are either a reply, quote, mention, retweets, or likes. Thus, a tie from user A to user B exists if (1) user A replies to user B, user A quotes user B, user A mentions user B, user A retweets user B, or user A likes user B's tweet. At this moment, we will created weighted edges, not making a conceptual difference between the interaction type (reply, quote, mention, retweets and likes).The article will not be behind a paywall. The article will be written for an audience comfortable with data analysis. | + +### Milestone 2 — Twitter community health dashboard + +- **Estimated duration:** 6 weeks +- **FTE:** 5 +- **Costs:** 10 000 USDC + +This milestone implements the work from the previous milestone by building the dashboard. It will be build using the Twitter API v2. This comes with the following rate limits: +- 900 tweet lookups/user/15-minute time window +- 900 user timeline lookups/user/15-minute time window +When querying a tweet, we will get information about the number of comments and likes + +Given the rate limit, we will see how users will be able to combine different accounts (e.g., parachains, dApp developers and other teams that build on Substrate) to create a holistic picture of their community. + + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide a tutorial for users to understand how to run the health checks themselves. Our current version will be updated to include recent development.| +| 0c. | Testing and Testing Guide | Running the data pipeline and analyzing the data will be covered by tests to ensure functionality. We will describe how to run the tests|. +| 0d. | Docker | We will deliver a docker file to tests the functionality. | +| 0e. | Article | In addition to the dashboard, we write a handout. This is a walkthrough of the dashboard, explaining each metric, if the score is good or bad, and a list of recommendations. | +| 1. | Twitter data pipeline | We will create a data pipeline fetching data from Twitter using their API. The user will enter one or a few twitter handles. The data pipeline is build using Python. We have already a data flow for Discord visible in the following repos: [Discord bot](https://github.com/RnDAO/tc-botComm), [interactions with db](https://github.com/RnDAO/tc-dbComm), and [interactions between front-end and db](https://github.com/RnDAO/tc-serverComm). | +| 2. | Twitter dashboard | We will extend our dashboard to include a page with Twitter community health data. The dashboard is build using Typescript. Our current dashbaord, build on Discord data, is available in this [github](https://github.com/RnDAO/tc-uiComm). We will add the Twitter metrics to this dashboard. | +| 3. | Workshop/call | We will hold a workshop/ call to answer any questions about the dashboard and handout. | + +## Future Plans: + +We have three workstreams for our future: New metrics, new integrations, new analytical methods. + +### New Metrics and Integrations +New metrics and new integrations will provide incremental improvements of the dashboard and will largely be driven by scientiic research for new metrics and user research for new integrations. +- New metrics: Our conceptual framework mentions a number of metrics we have not yet implemented due to their complexity (e.g., small world metrics). We will evaluate the usability of these metrics. +- Governance analytics: We have begun thinking through governance metrics at the end of 2022 using Snapshot data. We will research the viability of Polkassembly. + +### New analytical methods +We are currently developing a pulse survey functionality to measure members perception of the commnunity. This provides a subjective insight on community health currently missing in the data. +We are looking at text analysis and GPT3 to help community members and moderators gain an overview of important discussions and information. + + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Web3 Foundation Website / Medium / Twitter / Element / Announcement by another team / personal recommendation / etc. + +Here you can also add any additional information that you think is relevant to this application but isn't part of it already, such as: + +- Early development of this project has been funded by [Aragon](https://forum.aragon.org/t/real-time-community-health-analytics/3472), Polygon DAO, [Aave](https://noturhandle.gitbook.io/rndao/proposals/proposals/grant-proposal-aave), [MetaCartel](https://forum.metacartel.org/t/grant-request-community-health-a-project-by-rndao/2354) and Near. Total project costs will be split across multiple participating communities. +- We have delivered a community health check for Aragon, MetaGame, Veridia, Cannabis Genome DAO, and LexClinic. +- [Podcast](https://www.binance.com/en/live/video?roomId=2115823) about our community health framework with DAOrayki. \ No newline at end of file From c78e62dc4a0b0f1d653bb06a36f12b196b23eb8b Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 23 Mar 2023 15:49:20 +0100 Subject: [PATCH 273/578] Update index.md Add Community Health Check --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 26c421ccaa6..90f695727f1 100644 --- a/applications/index.md +++ b/applications/index.md @@ -69,6 +69,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [David Semakula](https://github.com/davidsemakula) | [Ink Analyzer](ink-analyzer.md) | [GitHub](https://github.com/ink-analyzer/ink-analyzer) | ☐ | ☐ | ☐ | | [Bright Inventions](https://brightinventions.pl/) | [High-availability validator setup](High_availability_validator_setup.md) | [GitHub](https://github.com/bright/) | ☐ | ☐ | ☐ | | [DIA Data](https://www.diadata.org/) | [Bridges Attestation Oracle](DIA_Bridge_Attestation_Oracle.md) | [GitHub](https://github.com/diadata-org/) | ☐ | ☐ | ☐ | +| [TogetherCrew](http://www.togethercrew.com/) | [Community Health Check](community-health-check.md) | [GitHub](https://github.com/RnDAO) | ☐ | ☐ | ☐ | ## 2022 From 867ba65032f3a3b6b7399463cd9db31fd13d451d Mon Sep 17 00:00:00 2001 From: Ramsey <45230082+decentration@users.noreply.github.com> Date: Mon, 27 Mar 2023 09:41:16 +0100 Subject: [PATCH 274/578] Supersig: second grant proposal to be included in system level chain (statemine) (#1630) * add supersig * mockup-ui-m2-2 * clearer for M1 UI * correct 0d to testing guide * further describe the advantage of Custom UI * Clearer title for M2 --- applications/supersig_fellowship.md | 341 ++++++++++++++++++++++++++++ 1 file changed, 341 insertions(+) create mode 100644 applications/supersig_fellowship.md diff --git a/applications/supersig_fellowship.md b/applications/supersig_fellowship.md new file mode 100644 index 00000000000..104cd4f4625 --- /dev/null +++ b/applications/supersig_fellowship.md @@ -0,0 +1,341 @@ +# Supersig + +> This document will be part of the terms and conditions of your agreement and therefore needs to contain all the required information about the project. Don't remove any of the mandatory parts presented in bold letters or as headlines! Lines starting with a `>` (such as this one) can be removed. +> +> See the [Grants Program Process](https://github.com/w3f/Grants-Program/#pencil-process) on how to submit a proposal. + +- **Team Name:** Decentration +- **Payment Address:** (BTC)37hhQbMnXTrEgFnQUA9xJEeQMW7DuGvxuz +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +> ⚠️ *The combination of your GitHub account submitting the application and the payment address above will be your unique identifier during the program. Please keep them safe.* + +## Project Overview :page_facing_up: + +"A Supersig is a Multisig with superpowers" + +A new pallet, RPC and UI that enables organisations to benefit from much more flexibility than multisig, where users can add and remove members, as well as optionally add "Master" users that have more power than "Standard" users. see our prior grant phase completion [blog post](https://decentration.medium.com/decentration-completes-supersig-w3f-funded-grant-5e788f858ca8) + +This is Decentration's second grant proposal for Web3. Our ethos is to build, simple user friendly products that many would be used by many. Our aim is to see Supersig be used across many chains and communities, rather than used by just one small community in the ecosystem. This second grant core aim is to make changes that enables supersig to go into the Statemine parachain. In order to do this some refactoring needs to take place both in the pallet and in the frontend. This has been based on feedback from two key product owners, Joe from Statemint/mine, and Jaco from polkadot-js. + +To avoid private gatekeeping, the PR into Statemine would require approval from Fellowship members. Therefore we need to make a few changes that will have it in the best state so it is approved, as well as be prepared for any further feedback provided to make any other changes. + +Our frontend app needs some changes in order for Jaco to accept it into the official apps repo after it has been PR'd into Statemine. As well as this we want to build a separate (non polkadot-js) custom user interface. + +### Overview + +- a *supersig* is like a *multisig* but with superpowers. +- we want to continue to change and improve to be to a system chain standard. +- make changes to pallet of supersig based on feedback from statemine product owner. +- make changes to UI based on feedback from polkadot-js apps product owner. +- You can try out the first version here, see our test [chain](https://apps.decentration.org/?rpc=wss%3A%2F%2Fsoupcan1.jelliedowl.com#/supersig/dashboard) + + +### Project Details + + +- An overview of the technology stack to be used: Substrate, Rust, React/Typescript. + - - PoC/MVP or other relevant prior work or research on the topic. Decentration has: + - delivered [Supersig v1](https://github.com/kabocha-network/pallet_supersig). + - launched [Kabocha crowdloan](https://github.com/kabocha-network/parachain/) + - developed pallet_mint: where funding proposals that are approved mint new coins, instead of from a treasury. + +- What your project is *not* or will *not* provide or implement + - In this grant proposal we are focussing on making iterations to the minimimal viable version of the pallet to make it less prone to bloat due to unbounded call data in the storage, we won't be creating a new pallet. + + +### Ecosystem Fit + +Help us locate your project in the Polkadot/Substrate/Kusama landscape and what problems it tries to solve by answering each of these questions: + +- *Where and how does your project fit into the ecosystem?* The aim is for it to be part of system chains on kusama and thereafter polkadot's Statemint. We want to maximise for ubiquitous use, and we believe this is the most effective route to get there. +- *Who is your target audience?* + - Multsig users of Substrate chains, who desire more flexibility and create scalable organisations. +- *What need(s) does your project meet?* It helps users of Substrate chains improve the fund management of the teams and projects that get funded by the community treasury. +- Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem? + - pallet_collective is very similar, but as there are only a limited number of instances available, and such instances needed a general on-chain upgrade to instantiate, it is not useful for our needs. + - pure proxy in the proxy_pallet has similarities in how addresses are created on-chain. + +## Team :busts_in_silhouette: + +### Team members + +- *Name of team leader:* Ramsey Ajram +- *Names of team members:* Tsubasa Mori, Nathan Gardet Derc + +### Contact + +- **Contact Name:** Ramsey Ajram +- **Contact Email:** ramsey@decentration.org +- **Website:** + +### Legal Structure + +- **Registered Address:** Digital Trust Company +- **Registered Legal Entity:** Decentration Trust Company (470-2018-233-GB-001) + +### Team's experience + +Ramsey (decentration) - Substrate Engineer, Product manager, startup technical founder. Launched [Kabocha](https://kabocha.network) parachain, chain development and launch; team lead product owner of Supersig. Alumni of Polkadot Blockchain Academy +Here is a recent contribution from Ramsey in a [Substrate Seminar](https://www.youtube.com/watch?v=IiAkJAfZsug&t=2299s) + +Nathan Gardet-Derc (erudyx) - Substrate / Rust Engineer, contributor to Kabocha, Rusty Crewmate. developer on [pallet_supersig](https://github.com/kabocha-network/pallet_supersig). Alumni of Polkadot Blockchain Academy + +Tsubasa Mori (KingdomParadise) - Full stack developer - Javascript / Typescript / React / Rust / Node.js / Next.js + + +### Team Code Repos + +- +- + +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. + +- +- +- + +### Team LinkedIn Profiles (if available) + +## Development Status :open_book: + +pallet started here: + + +*Supersig is functional, accessible and usable for developers to integrate and for their end users. + +## Development Roadmap :nut_and_bolt: + +This section should break the development roadmap down into milestones and deliverables. To assist you in defining it, we have created a document with examples for some grant categories [here](../docs/grant_guidelines_per_category.md). Since these will be part of the agreement, it helps to describe *the functionality we should expect in as much detail as possible*, plus how we can verify and test that functionality. Whenever milestones are delivered, we refer to this document to ensure that everything has been delivered as expected. + +Below we provide an **example roadmap**. In the descriptions, it should be clear how your project is related to Substrate, Kusama or Polkadot. We *recommend* that teams structure their roadmap as 1 milestone ≈ 1 month. + +For each milestone, + +**Milestone 1** To make changes to `pallet_supersig` and `apps frontend` so that it is up to scratch with system chain level use, accepted by polkadot-js apps, and prepared for Fellowship review. + +- The pallet will be refactored based on feedback from Joe Petrowski, product owner of Statemine, after he is satisfied withe changes we will make the case to the Polkadot Fellowship. +- Based on feedback from Jaco, product owner of polkadot-js, changes need to be made so that supersig-app is accepted officially into the repo and if it is accepted into Statemine. +- The pallet will be tested on the Pop-Art, community run relay test network +- The pallet will be well benchmarked. +- The pallet will aim to be on Statemine parachain on kusama. +- Unit integration tests +- Easy to spin up node to test pallet +- Clearly written as Readme and inline documentation + +Details for pallet: + +We will likely be making a limit on call data size and a cap on the number of "live proposals" there can be per chain. + +### Limit Call Data Size + +1. Limit call data size: Introduce a maximum call data size limit in the configuration trait. This limit can be set to a reasonable default value, which can be changed as required. Users will be prevented from submitting call data exceeding this limit: + +```rust +#[pallet::config] +pub trait Config: frame_system::Config { + // ... + /// The maximum size of call data allowed (in bytes). + #[pallet::constant] + type MaxCallDataSize: Get; + // ... +} +``` + +2. Check call data size: Before storing the call data in create, approve, and other relevant functions, ensure that its size is within the specified limit. + +```rust +// In the `create` function +ensure!( + call_data.len() <= T::MaxCallDataSize::get() as usize, + Error::::CallDataTooLarge +); + +// Similarly, add checks in the `approve` and other relevant functions. + +``` + +3. Add a new error variant for oversized call data: + +```rust +#[pallet::error] +pub enum Error { + // ... + /// The call data size exceeds the maximum allowed limit. + CallDataTooLarge, + // ... +} +``` + +### Limit Number of Live Proposals + +1. Add the LiveProposalMaximum associated type to the pallet's Config trait: + +```rust +pub trait Config: frame_system::Config { + // ... + type LiveProposalMaximum: Get; + // ... +} +``` + +2. Add a storage item to track the number of active proposals for each Supersig account: + +```rust +#[pallet::storage] +#[pallet::getter(fn active_proposals)] +pub type ActiveProposals = StorageMap<_, Twox64Concat, SupersigId, u32, ValueQuery>; +``` + +3. Modify the submit_call extrinsic to check the number of active proposals before allowing a new one: + +```rust +#[pallet::weight(T::WeightInfo::submit_call())] +pub fn submit_call(origin: OriginFor, supersig_id: SupersigId, call_data: Vec) -> DispatchResultWithPostInfo { + let who = ensure_signed(origin)?; + // ... + + let current_active_proposals = Self::active_proposals(supersig_id); + ensure!(current_active_proposals < T::LiveProposalMaximum::get(), Error::::TooManyActiveProposals); + + // ... +} +``` + +4. Increment the number of active proposals for the Supersig account when a new proposal is submitted: + +```rust +ActiveProposals::::mutate(supersig_id, |active_proposals| *active_proposals += 1); +``` + +5. Add an error variant for the case when there are too many active proposals: + +```rust +#[pallet::error] +pub enum Error { + // ... + TooManyActiveProposals, +} +``` + +6. Decrement the number of active proposals when a proposal is approved or rejected. You can do this in the approve and reject extrinsics: + +```rust +ActiveProposals::::mutate(supersig_id, |active_proposals| *active_proposals = active_proposals.saturating_sub(1)); +``` + +As a non binding idea to test, we shall also be exploring the idea of enabling off-chain signing, though this will require a lot of refactoring: + +### Enable off-chain signing (optional work) + +To incorporate off-chain signing in the supersig pallet while maintaining the same features such as adding and removing members, we would need to do the following: + +1. Create a CallHash type alias to represent the hash of the call data: + +```rust +pub type CallHash = ::Hash; +``` + +2. Change the CallData storage item to use the CallHash instead of the actual call data: + +```rust +#[pallet::storage] +#[pallet::getter(fn call_data)] +pub type CallData = StorageMap<_, Twox64Concat, SupersigId, CallHash, OptionQuery>; +``` + +3. Modify the create and approve functions to accept a call_hash parameter instead of the call data: + +```rust +pub fn create(origin: OriginFor, call_hash: CallHash, ...); +pub fn approve(origin: OriginFor, call_hash: CallHash, ...); +``` + +4. In the create and approve functions, calculate the call hash and ensure it matches the provided call_hash parameter: + +```rust +// In the `create` function +let actual_call_hash = T::Hashing::hash_of(&call_data); +ensure!( + actual_call_hash == call_hash, + Error::::InvalidCallHash +); +// as well add the check in the `approve` function. +``` + +5. Add a new error variant for mismatched call hashes: +```rust +#[pallet::error] +pub enum Error { + // ... + /// The provided call hash does not match the actual call hash. + InvalidCallHash, + // ... +} +``` + +6. Update the extrinsics and RPCs to work with call hashes instead of call data. + +# Refactor Page-Supersig UI for polkadot js fork + +- A lot of functions need to be transformed into the hooks that polkadot js apps use as a standard. +- Very strict linting and standards, currently sitting at 300 errors. + +**Milestone 2** Custom UI foundation MVP, and act on feedback from Fellowship. + +- Build a custom interface where the user interacts with their organisation created with supersig. The interface will initially support Statemine, Kabocha, and Soupcan (testnet). +The interface will leverage all the features [here](https://trello.com/1/cards/64197a7bcc843f46bfb0ab2b/attachments/64198bf574e7348c470997bb/download/Screenshot_2023-03-21_at_10.46.20.png), but in a cleaner and bespoke user interface like [this simple mockup](https://trello.com/c/fUTXOuo3/619-create-supersig-ui-for-m2-2). +- Custom UI will be simpler and more bespoke to organising, initially around supersig. It will begin with similar features to page-supersig on polkadot-js app, however it will be the foundation for then future building blocks, such as: multisig interface, automated payments, and other statemine/mint primitives, XCM apps, etc. We can prioritise on what those will be based on feedback, and in future milestone. With our own interface we have the freedom to create something different and specific to a core set of interrelated tools, rather than abide by polkadot-js which is designed to encompass basically everything. +- Make improvements so that Fellowship member feedback is satisfied (if any). + + + +> :zap: If any of your deliverables is based on somebody else's work, make sure you work and publish *under the terms of the license* of the respective project and that you **highlight this fact in your milestone documentation** and in the source code if applicable! **Teams that submit others' work without attributing it will be immediately terminated.** + +### Overview + +- **Total Estimated Duration:** 7 to 11 weeks +- **Full-Time Equivalent (FTE):** 2 +- **Total Costs:** USD 18,000 + +### Milestone 1 — pallet_supersig MVP + +- **Estimated duration:** 4 to 5 weeks +- **FTE:** 2 +- **Costs:** 11,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide inline documentation of the supersig pallet's code, and a basic tutorial that explains how a user can spin up one of our Substrate nodes and send test transactions, which will show how the supersig functionality works. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Article | We will publish an article that explains supersig pallet to developers on a blog post; and a substrate workshop/seminar that explains that shows how the pallet was designed (if there available slot, else a video shared on loom/youtube). +| 1. | Substrate module: pallet_supersig | We will refactor the pallet so that it does not store unbounded call data. | +| 2. | Supersig-app: polkadot-js-ui | We need to make various changes and use a lot of polkadot js hooks in order Jaco to accept the PR: refactoring converting a lot of hooks to be the native polkadot-rs hooks rather than our own hooks; linting; changing augment-types; linting, and 300 errors when building for the polkadot-js PR. | +| 3. | Benchmarking | The pallet will be benchmarked and unit tested using worst case weightings. | + +### Milestone 2 — Supersig UI and feedback from Fellowship + +- **Estimated duration:** 3 to 6 weeks +- **FTE:** 2 +- **Costs:** 7,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide inline documentation and a tutorial with a polkadot-js apps fork that guides a developer to simply set up supersig pallet and UI. | +| 0c. | Testing messages | Core functions will be fully covered by e2e testing guide and informative error messages. | +| 0d. | Docker | We will provide a Dockerfile that can be used to test all the functionality delivered with milestone 2. The dockerfile will be a polkadot JS UI fork, it will also be the smallest possible file size (MBs not GBs) | +| 0e. | Article | We will publish an article that explains supersig pallet to the end-user. The article will be on medium and subsocial. +| 1. | React/Typecript: Supersig UI | We will build a custom user interface so that users can interact with supersig. | +| 2. | Substrate chain | We will create a custom substrate template that will contain pallet supersig | +| 3. | Polkadot JS Apps UI Fork | We will add the custom feature to a polkadot JS UI fork (and make a PR to the main repo), so that the user can see the pallet in action, end to end. | + + +## Future Plans + +- After success with supersig being a system level chain, maintain it, and work on future versions, as well as XCM accesibility. + +## Additional Information :heavy_plus_sign: + +*Who can vouch for Ramsey(Decentration)?* Josh Muir (Kusama Council and Dat Dot), Dan Shields, Will Chevdor, Sacha Lanski... From 26174465b48b87fbdd533b07a1deaf46d7fee737 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 27 Mar 2023 10:48:02 +0200 Subject: [PATCH 275/578] Update index.md Update decentration --- applications/index.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 90f695727f1..e736a792c3b 100644 --- a/applications/index.md +++ b/applications/index.md @@ -70,6 +70,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Bright Inventions](https://brightinventions.pl/) | [High-availability validator setup](High_availability_validator_setup.md) | [GitHub](https://github.com/bright/) | ☐ | ☐ | ☐ | | [DIA Data](https://www.diadata.org/) | [Bridges Attestation Oracle](DIA_Bridge_Attestation_Oracle.md) | [GitHub](https://github.com/diadata-org/) | ☐ | ☐ | ☐ | | [TogetherCrew](http://www.togethercrew.com/) | [Community Health Check](community-health-check.md) | [GitHub](https://github.com/RnDAO) | ☐ | ☐ | ☐ | +| [Decentration](https://www.decentration.org/) | [Supersig Phase 2](./supersig_fellowship.md) | [GitHub](https://github.com/decentration) | ☐ | ☐ | ☐ | ## 2022 @@ -191,7 +192,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Keysafe Network](https://github.com/keysafe-protocol) | [A decentralized protocol for private key custody and crypto asset management](./keysafe_network.md) | [GitHub](https://github.com/keysafe-protocol) | ☐ | ☒ | ☐ | | [Fennel Labs](https://fennellabs.com/) | [Whiteflag on Fennel Protocol](./Fennel_Protocol.md) | [GitHub](https://github.com/fennelLabs) | ☐ | ☒ | ☒ | | [Relationlabs](https://relationlabs.ai/#/home) | [Relation Graph](./Relation-Graph.md) | [GitHub](https://github.com/relationlabs) | ☐ | ☐ | ☐ | -| [Decentration](https://kabocha.network) | [Supersig](./pallet_supersig.md) | [GitHub](https://github.com/kabocha-network) | ☐ | ☒ | ☒ | +| [Decentration](https://www.decentration.org/) | [Supersig](./pallet_supersig.md) | [GitHub](https://github.com/decentration) | ☐ | ☒ | ☒ | | [Web3 Labs Ltd](https://www.web3labs.com/epirus-explorer) | [Epirus Substrate Explorer](./epirus_substrate_explorer.md) | [GitHub](https://github.com/web3labs) | ☐ | ☒ | ☒ | | [727.ventures](https://727.ventures/) | [Sol2Ink](./sol2ink.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | | [727.ventures](https://727.ventures/) | [OpenBrush Phase 3](./openbrush-follow-up-2.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☒ | ☒ | From 13cefdc01ef0accd9a1fa10bc16d8059aced17dd Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 27 Mar 2023 15:18:56 +0200 Subject: [PATCH 276/578] Update Meta_Defender.md (#1639) --- applications/Meta_Defender.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/Meta_Defender.md b/applications/Meta_Defender.md index ff1cc032d33..67bc6be2795 100644 --- a/applications/Meta_Defender.md +++ b/applications/Meta_Defender.md @@ -3,7 +3,7 @@ - **Team Name:** Meta Defender Team - **Payment Address:** 25r4oZedLXEunTmdvytyH4xcmQqqWWw8KmphdiD5LqpU29pv (aUSD) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 - +- **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/1089#issuecomment-1484905533) ## Project Overview :page_facing_up: From f99a9cdbd0c5e221c59e9d736fec4cdfee95dc3a Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 27 Mar 2023 15:20:15 +0200 Subject: [PATCH 277/578] Update index.md Add openPayroll --- applications/index.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/applications/index.md b/applications/index.md index e736a792c3b..bc8fcd4caaa 100644 --- a/applications/index.md +++ b/applications/index.md @@ -71,6 +71,8 @@ Use this page for an overview of all public grants and their status. Use the sid | [DIA Data](https://www.diadata.org/) | [Bridges Attestation Oracle](DIA_Bridge_Attestation_Oracle.md) | [GitHub](https://github.com/diadata-org/) | ☐ | ☐ | ☐ | | [TogetherCrew](http://www.togethercrew.com/) | [Community Health Check](community-health-check.md) | [GitHub](https://github.com/RnDAO) | ☐ | ☐ | ☐ | | [Decentration](https://www.decentration.org/) | [Supersig Phase 2](./supersig_fellowship.md) | [GitHub](https://github.com/decentration) | ☐ | ☐ | ☐ | +| [Polkadrys Labs](https://github.com/rtomas) | [Open Payroll](./openPayroll.md) | [GitHub](https://github.com/rtomas) | ☐ | ☐ | ☐ | + ## 2022 From e796bc7ddda0c96a86e672949c8faf029c753ee9 Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Tue, 28 Mar 2023 10:34:16 +0200 Subject: [PATCH 278/578] Update index.md Accept binary merkle tree m1 --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index bc8fcd4caaa..e659559a8b2 100644 --- a/applications/index.md +++ b/applications/index.md @@ -164,7 +164,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [QSTN](https://qstn.us/) | [QSTN](./QSTN.md) | [GitHub](https://github.com/qstnus) | ☐ | ☐ | ☐ | | [CESS LAB](https://www.cess.cloud/) | [Substats (The framework of lightweight block explorer)](./substats.md) | [GitHub](https://github.com/CESSProject) | ☐ | ☒ | ☒ | | [Polket](https://toearn.fun) | [ToEarnFun](./polket_toearnfun.md) | [GitHub](https://github.com/polketio/polket-node) | ☐ | ☒ | ☒ | -| ALPHA LABS | [Binary merkle tree](./binary_merkle_tree.md) | [GitHub](https://github.com/frisitano) | ☐ | ☐ | ☐ | +| ALPHA LABS | [Binary merkle tree](./binary_merkle_tree.md) | [GitHub](https://github.com/frisitano) | ☐ | ☒ | ☐ | | [Standard Protocol](https://standard.tech/) | [New Order - a full onchain orderbook dex with indexers](./Standard_Protocol.md) | [GitHub](https://github.com/standardweb3) | ☐ | ☐ | ☐ | | [hack-ink](https://github.com/hack-ink) | [Subalfred](./subalfred.md) | [GitHub](https://github.com/hack-ink/subalfred) | ☐ | ☒ | ☒ | From e2a1c1f2955dae47f24329757e961ca2a26bf203 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Tue, 28 Mar 2023 16:46:40 -0400 Subject: [PATCH 279/578] Update index.md (#1640) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index e659559a8b2..f85bfdc42f4 100644 --- a/applications/index.md +++ b/applications/index.md @@ -259,7 +259,7 @@ Use this page for an overview of all public grants and their status. Use the sid | Team | Project | Link | Terminated | First Delivery | Completed | | :--------------------------------------------------------- | :---------------------------------------------------------------------------------------- | :------------------------------------------------------------------------- | :--------- | :------------: | :-------: | | Matthew Darnell | [cScale](./cScale.md) | [GitHub](https://github.com/MatthewDarnell/cScale) | ☐ | ☒ | ☐ | -| [Web3go](https://web3go.xyz/) | [Web3go](./Web3Go.md) | [GitHub](https://github.com/web3go-xyz) | ☐ | ☒ | ☐ | +| [Web3go](https://web3go.xyz/) | [Web3go](./Web3Go.md) | [GitHub](https://github.com/web3go-xyz) | ☐ | ☒ | ☒ | | [Prosopo Limited](https://prosopo.io) | [Prosopo: Human Verification Marketplace](./prosopo.md) | [GitHub](https://github.com/prosopo-io) | ☐ | ☒ | ☒ | | [Litentry](https://www.litentry.com) | [Polka SignIn](./PolkaSignIn.md) | [GitHub](https://github.com/litentry) | ☐ | ☐ | ☐ | | [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib](./php-rpc-lib.md) | [GitHub](https://github.com/gmajor-encrypt/) | ☐ | ☒ | ☒ | From f04ae51b3e360620a97dbd95469c23909f0fce17 Mon Sep 17 00:00:00 2001 From: fisher Date: Wed, 29 Mar 2023 21:38:53 +0800 Subject: [PATCH 280/578] Solidity implementation of an on-chain accountable light client verifier (#1546) * overview & project details * update * update * update * update * update * update * update * Initialize pull request for solidity verifier grant * update * update * update to add more details --------- Co-authored-by: Aki Wu --- ...y-verifier-for-accountable-light-client.md | 145 ++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 applications/solidity-verifier-for-accountable-light-client.md diff --git a/applications/solidity-verifier-for-accountable-light-client.md b/applications/solidity-verifier-for-accountable-light-client.md new file mode 100644 index 00000000000..0cb7b33ef94 --- /dev/null +++ b/applications/solidity-verifier-for-accountable-light-client.md @@ -0,0 +1,145 @@ +# Solidity Verifier Implementation for Accountable Light Client + +- **Team Name:** Itering +- **Payment Address:** 0x5FD8bCC6180eCd977813465bDd0A76A5a9F88B47 (Ethereum USDC) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 3 + +## Project Overview :page_facing_up: + +### Overview + +As a developer company contributing to Darwinia, Itering is working on implementing an on-chain accountable light client verifier using the Solidity language. The accountable light client design is based on a recent [paper](https://eprint.iacr.org/2022/1205) published by the Web3 Foundation. + +Darwinia is constantly following innovations in the cross-chain space, especially from the Web3 Foundation and Polkadot, with a goal of implementing these innovations in practical settings. Currently, Darwinia is prioritizing the development of on-chain light clients as the cross-chain solution. We recognize the importance of the accountable light client system presented in the paper. + +### Project Details + +After reading the paper, we found it to be extremely valuable. It presents an efficient method for utilizing SNARK to verify the aggregated public key of signers, while still holding those signers accountable. This approach greatly improves the speed and cost-effectiveness of proof generation. + +Darwinia has created [a beacon light client from ethereum to darwinia](https://darwinia.subscan.io/account/0xD2A37C4523542F2dFD7Cb792D2aeAd5c61C1bAAE), which is based on the BLS aggregate signature verification. The cross-chain gas is effectively reduced by aggregate signatures, but it is still too high because the light client smart contract needs to be aware of the entire list of public keys. If there are too many pubkeys, this could be a serious issue. + +So, we are searching for a more effective solution to the aggregate signature pubkeys problem. We concentrate on the honest computation provided by zero-knowledge proof solutions. It allows us to off-chain the verification step. But through our study, we discovered that the generic SNARK solutions have so many limits that not only took a long time to produce the proof, but also required an extremely powerful device. We were stuck here until we came across this paper and Alistair's explanation [video](https://www.youtube.com/watch?v=MCvX9ZZhO4I&list=PLOyWqupZ-WGvywLqJDsMIYdCn8QEa2ShQ&index=19) and [slides](https://docs.google.com/presentation/d/16LlsXWY2Q6_6QGZxkg84evaJqWNk6szX). + +This verifier will be implemented based on the BLS12-377 and BW6-761 elliptic curves, which is consistent with the implementation in the paper and [W3F's PoC implementation](https://github.com/w3f/apk-proofs). + +### Ecosystem Fit + +- Where and how does your project fit into the ecosystem? + + When Polkadot/Substrate/Kusama bridges to a blockchain that is EVM-compatible, this verifier will be helpful. + +- Who is your target audience (parachain/dapp/wallet/UI developers, designers, your own user base, some dapp's userbase, yourself)? + + The users of this verifier will be the cross-chain messaging/bridge service providers. + +- What need(s) does your project meet? + + Precompiled versions of BLS12-377 and BW6-761 should ideally be supported by the blockchains that use this verifier. + + If gas and speed are not a concern, you can also use the no-precompiled curves. + +- Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem? + + This kind of verifier hasn't been implemented in solidity yet, as far as we know. + +## Team :busts_in_silhouette: + +### Team members + +- Denny, denny.wang@itering.io +- Echo, echo.hu@itering.io +- Aki, aki.wu@itering.io +- Nada, nada.fu@darwiniadao.xyz + +### Contact + +- **Contact Name:** Aki Wu +- **Contact Email:** aki.wu@itering.io +- **Website:** https://github.com/wuminzhe + +### Legal Structure + +- **Registered Address:** 3 FRASER STREET #05-25 DUO TOWER SINGAPORE (189352) +- **Registered Legal Entity:** ITERING TECH PTE. LTD. + +### Team's experience + +Itering is a team of passionate blockchain technology enthusiasts. We believe that blockchains should be interoperable with each other. Itering has accumulated significant expertise in the field of cross-chain technology through several years of experience. Our expertise spans various cross-chain approaches, with a focus on light client. + +We are well-versed in Polkadot/Substrate technology. We leverage the Polkadot/Substrate technology stack to power most of our blockchain development. Our blockchains, Darwinia and its canary network Crab, are based on Substrate and currently operate as parachains of Polkadot and Kusama respectively. + +Additionally, we have extensive experience with the Solidity programming language. Notably, we have already implemented a beacon light client in Solidity that has been successfully running on the Darwinia Chain. + +### Team Code Repos + +- https://github.com/darwinia-network/darwinia-messages-sol +- https://github.com/darwinia-network/darwinia-messages-substrate +- https://github.com/darwinia-network/darwinia +- https://github.com/darwinia-network/darwinia-common + +Github accounts of team members: + +- Denny: https://github.com/hackfisher +- Echo: https://github.com/hujw77 +- Aki: https://github.com/wuminzhe + +## Development Status :open_book: + +- references to conversations you might have had related to this project with anyone from the Web3 Foundation, + https://forum.polkadot.network/t/decentralized-dot-eth-bridges-a-comparison-thread/777/33 + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 6 months +- **Full-Time Equivalent (FTE):** 2 FTE +- **Total Costs:** 60,000 USD + +### Milestone 1 — Curve precompiles + +- **Estimated duration:** 2 month +- **FTE:** 2 +- **Costs:** 20,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | MIT | +| **0b.** | Documentation | We will provide both **inline documentation** of the code. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | BLS12-377 precompile | We will create a [EIP-2539](https://eips.ethereum.org/EIPS/eip-2539) compatible BLS12-377 precompile which can run inside [frontier](https://github.com/paritytech/frontier). It will be developed using Rust programming language. The libraries we plan to use are [arkworks-rs/curves](https://github.com/arkworks-rs/curves) library or the substrate host function calls provided by this [Pull Request](https://github.com/paritytech/substrate/pull/13031).
Other references:
https://github.com/celo-org/celo-blockchain/pull/1157
https://github.com/celo-org/celo-blockchain/pull/1341 | +| 2. | BW6-761 precompile | We will create a [EIP-3026](https://eips.ethereum.org/EIPS/eip-3026) compatible BW6-761 precompile which can run inside [frontier](https://github.com/paritytech/frontier). The programming language and libs to use are the same as BLS12-377 precompile.
Other references:
https://github.com/celo-org/celo-blockchain/pull/1282 | + +### Milestone 2 — Basic & Packed verifier + +- **Estimated Duration:** 4 month +- **FTE:** 2 +- **Costs:** 40,000 USD + +| Number | Deliverable | Specification | +| ------: | ------------------------- | ------------------------------------------------------------ | +| **0a.** | License | MIT | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and an example to verify the proof generated from [W3F's PoC example](https://github.com/w3f/apk-proofs/blob/main/bw6/examples/recursive.rs). | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Libraries preparation | We will prepare the import libraries which are critical to the implementation of the verifier in solidity.
1. Fiat-shamir transformation. A solidity friendly replacement to the Merlin::Transcript.
2. Lagrange evaluation.
3. KZG verification. We will write a froniter precompile to do it. | +| 2. | Basic APK verifier | We will implement the basic verifer which will check the apk is correct. We plan to use the PoC code from [apk-proofs](https://github.com/w3f/apk-proofs) as a reference to implement this verifier. It can verify the proofs generated by [the PoC example](https://github.com/w3f/apk-proofs/blob/main/bw6/examples/recursive.rs). We will implement it using Solidity language. | +| 3. | Packed APK verifier | We will implement the packed verifer which will check the apk is correct. We plan to use the PoC code from [apk-proofs](https://github.com/w3f/apk-proofs) as a reference to implement this verifier. We will implement it using Solidity language. | +| 4. | BLS verifier | We will implement the bls verifier which will check if the aggregate signature is signed by the apk. We will use the BLS12-377 precompile implemented in Milestone 1. We will implement it using Solidity language. | +| 5. | Signers threshold checker | Check if the bitvector of pubkeys contains enough signers. We will implement it using Solidity language. | + +## Future Plans + +- We intend to leverage this verifier to develop our on-chain light clients after the grant is completed. +- Adapt to other EVM chains that satisfy the curves' requirements. +- Follow the revision of the W3F paper. + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Web3 Foundation Website / personal recommendation + +Additional information: + +- [Darwinia truth layer](https://github.com/darwinia-network/darwinia-messages-sol/tree/master/contracts/bridge/src/truth) currently include Beacon light client, BSC light client and Darwinia light client. +- [Helix Bridge](https://helixbridge.app/en) which have bridges based on Darwinia cross-chain messaging protocol. From 59a23c0ee8fae0e6ff2d5b80f506c60aa5a5de9b Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 29 Mar 2023 15:41:53 +0200 Subject: [PATCH 281/578] Update index.md Add Solidity Verifier Implementation for Accountable Light Client --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index f85bfdc42f4..a6c562f22bd 100644 --- a/applications/index.md +++ b/applications/index.md @@ -72,6 +72,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [TogetherCrew](http://www.togethercrew.com/) | [Community Health Check](community-health-check.md) | [GitHub](https://github.com/RnDAO) | ☐ | ☐ | ☐ | | [Decentration](https://www.decentration.org/) | [Supersig Phase 2](./supersig_fellowship.md) | [GitHub](https://github.com/decentration) | ☐ | ☐ | ☐ | | [Polkadrys Labs](https://github.com/rtomas) | [Open Payroll](./openPayroll.md) | [GitHub](https://github.com/rtomas) | ☐ | ☐ | ☐ | +| [Itering](https://www.itering.io/) | [Solidity Verifier Implementation for Accountable Light Client](./solidity-verifier-for-accountable-light-client.md) | [GitHub](https://github.com/darwinia-network) | ☐ | ☐ | ☐ | ## 2022 From a90c6dfa6238d52f9da357a15789b0676a73a558 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Wed, 29 Mar 2023 11:52:23 -0400 Subject: [PATCH 282/578] Update index.md (#1641) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index a6c562f22bd..7c31bd74142 100644 --- a/applications/index.md +++ b/applications/index.md @@ -152,7 +152,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Primis Labs](https://github.com/Primis-Labs) | [Primis](./Primis.md) | [GitHub](https://github.com/Primis-Labs/client) | ☐ | ☒ | ☒ | | [Uke](https://github.com/Uke-Messaging) | [Uke Messaging - PoC - Phase 1](./uke.md) | [GitHub](https://github.com/Uke-Messaging) | ☒ | ☐ | ☐ | | [Redstone Network](https://github.com/difttt) | [Redstone Network](./RedStone%20Network.md) | [GitHub](https://github.com/difttt) | ☐ | ☒ | ☐ | -| [JURIMETRIC TECNOLOGIA LTDA](https://www.jurimetric.com.br/) | [Polkadart](./Polkadart.md) | [GitHub](https://github.com/rankanizer/polkadart) | ☐ | ☒ | ☐ | +| [JURIMETRIC TECNOLOGIA LTDA](https://www.jurimetric.com.br/) | [Polkadart](./Polkadart.md) | [GitHub](https://github.com/rankanizer/polkadart) | ☐ | ☒ | ☒ | | [Skye Kiwi](https://skye.kiwi/) | [Choko Wallet](./choko_wallet.md) | [GitHub](https://github.com/skyekiwi) | ☐ | ☒ | ☐ | | [Popular Coding](https://www.popularcoding.com/) | [Ventur](./ventur.md) | [GitHub](https://github.com/popular_coding) | ☐ | ☒ | ☒ | | [Asylum](https://asylum.space/) | [Asylum follow-up 1](./asylum_follow_up_1.md) | [GitHub](https://gitlab.com/asylum-space/) | ☒ | ☒ | ☐ | From 0d82600e6f15d9f6aac1b97b5018f5d7a6a5dc90 Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Thu, 30 Mar 2023 11:58:31 +0200 Subject: [PATCH 283/578] Update index.md --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 7c31bd74142..d07b45668ee 100644 --- a/applications/index.md +++ b/applications/index.md @@ -50,7 +50,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☐ | ☐ | | [Zeeve](https://www.zeeve.io) | [Parachain deployment zoombienet testing automation](Zeeve_Parachain_deployment_zoombienet_testing_automation.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | | [Polytope Labs](https://research.polytope.technology/) | [Trie Verifier Implementation](solidity-trie-verifier.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | -| Off-Narrative Labs | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☐ | ☐ | +| Off-Narrative Labs | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☒ | ☐ | | [FuzzLand](https://fuzz.land/) | [FuzzLand](FuzzLand.md) | [GitHub](https://github.com/fuzzland) | ☐ | ☐ | ☐ | | [Fuu](https://github.com/ff13dfly/) | [Anchor, On-chain Linked List pallet and Name Service](Anchor.md) | [GitHub](https://github.com/ff13dfly/Anchor) | ☐ | ☒ | ☒ | | [hack-ink](https://hack.ink/) | [Slothunter](slothunter.md) | [GitHub](https://github.com/hack-ink) | ☐ | ☐ | ☐ | From de52e509f968b46e1a486aafc6fac8972db525b0 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 31 Mar 2023 09:31:27 +0200 Subject: [PATCH 284/578] Update README.md Add ink!ubator --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 440d94601da..587cc982033 100644 --- a/README.md +++ b/README.md @@ -316,7 +316,7 @@ The best way to find out about upcoming hackathons is by following Polkadot on t ### Other Grant Programs -Below is a list of other grant programs in the Polkadot/Substrate ecosystem: +Below is a list of other grant and bounty programs in the Polkadot/Substrate ecosystem: - [Acala Grants Program](https://acala.network/ecosystem-program) - [Astar / Shiden Network Builders Program](https://github.com/PlasmNetwork/Builders-Program) @@ -324,6 +324,7 @@ Below is a list of other grant programs in the Polkadot/Substrate ecosystem: - [Darwinia Grants Program](https://github.com/darwinia-network/collaboration/blob/master/grant/README.md#grant-program) - [Edgeware Grants and Bounties](https://gov.edgewa.re/discussion/1132-edgeware-proposal-process-and-template) - [HydraDX Grants and Bounties](https://docs.hydradx.io/new_deal/) +- [ink!ubator](https://use.ink/ubator/) - [Interlay Labs Grants Program](https://github.com/interlay/Grants-Program) - [Moonbeam Grants Program](https://moonbeam.foundation/grants/) - [OAK’s Developer Grants](https://oak.tech/community/grants/) From 3cfb91e82a5473d58b76d68ec513b0c1c06ed6a3 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 31 Mar 2023 09:33:25 +0200 Subject: [PATCH 285/578] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 587cc982033..7f0dca4ee3b 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ - [Substrate Builders Program](#substrate-builders-program) - [Treasury](#treasury) - [Hackathons](#hackathons) - - [Other Grant Programs](#other-grant-programs) + - [Other Grant or Bounty Programs](#other-grant-or-bounty-programs) ## :wave: Introduction @@ -314,7 +314,7 @@ From time to time, Web3 Foundation and/or Parity organise hackathons to promote The best way to find out about upcoming hackathons is by following Polkadot on the various social channels, such as Element or Twitter. -### Other Grant Programs +### Other Grant or Bounty Programs Below is a list of other grant and bounty programs in the Polkadot/Substrate ecosystem: From d9bf5eeea8738c3c74940c18c2935168637cf82c Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 31 Mar 2023 09:33:28 +0200 Subject: [PATCH 286/578] Update funding.md --- docs/funding.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/funding.md b/docs/funding.md index 6067e9a2e6f..77cdfa95bcf 100644 --- a/docs/funding.md +++ b/docs/funding.md @@ -20,9 +20,9 @@ From time to time, Web3 Foundation and/or Parity organise hackathons to promote The best way to find out about upcoming hackathons is by following Polkadot on the various social channels, such as Element or Twitter. -### Other Grant Programs +### Other Grant or Bounty Programs -Below is a list of other grant programs in the Polkadot/Substrate ecosystem: +Below is a list of other grant and bounty programs in the Polkadot/Substrate ecosystem: - [Acala Grants Program](https://acala.network/ecosystem-program) - [Astar / Shiden Network Builders Program](https://github.com/PlasmNetwork/Builders-Program) @@ -30,6 +30,7 @@ Below is a list of other grant programs in the Polkadot/Substrate ecosystem: - [Darwinia Grants Program](https://github.com/darwinia-network/collaboration/blob/master/grant/README.md#grant-program) - [Edgeware Grants and Bounties](https://gov.edgewa.re/discussion/1132-edgeware-proposal-process-and-template) - [HydraDX Grants and Bounties](https://docs.hydradx.io/new_deal/) +- [ink!ubator](https://use.ink/ubator/) - [Interlay Labs Grants Program](https://github.com/interlay/Grants-Program) - [Moonbeam Grants Program](https://moonbeam.foundation/grants/) - [OAK’s Developer Grants](https://oak.tech/community/grants/) From 74d11795cad26fdaf8df650a19bd23e55e83d0a3 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 3 Apr 2023 13:44:40 +0200 Subject: [PATCH 287/578] Update index.md Adding wave 18 --- applications/index.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index d07b45668ee..5abb8c8b906 100644 --- a/applications/index.md +++ b/applications/index.md @@ -13,7 +13,7 @@ Use this page for an overview of all public grants and their status. Use the sid ## Menu -- [2023](#2023): [17](#%EF%B8%8F-wave-17---first-quarter-2023) +- [2023](#2023): [18](#%EF%B8%8F-wave-18---second-quarter-2023), [17](#%EF%B8%8F-wave-17---first-quarter-2023) - [2022](#2022): [16](#%EF%B8%8F-wave-16---fourth-quarter-2022), [15](#%EF%B8%8F-wave-15---third-quarter-2022), [14](#%EF%B8%8F-wave-14---second-quarter-2022), [13](#%EF%B8%8F-wave-13---first-quarter-2022) - [2021](#2021): [12](#%EF%B8%8F-wave-12---fourth-quarter-2021), [11](#%EF%B8%8F-wave-11---third-quarter-2021), [10](#%EF%B8%8F-wave-10---second-quarter-2021), [9](#%EF%B8%8F-wave-9---first-quarter-2021) - [2020](#2020): [8](#%EF%B8%8F-wave-8---fourth-quarter-2020), [7](#%EF%B8%8F-wave-7---third-quarter-2020), [6](#%EF%B8%8F-wave-6---second-quarter-2020), [5](#%EF%B8%8F-wave-5---first-quarter-2020) @@ -21,6 +21,14 @@ Use this page for an overview of all public grants and their status. Use the sid ## 2023 +### 🏄‍♀️ Wave 18 - Second Quarter 2023 + +[Menu🔝](#menu) + +| Team | Project | Link | Terminated | First Delivery | Completed | +| :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------------------------------- | :--------- | :------------: | :--------: | + + ### 🏄‍♀️ Wave 17 - First Quarter 2023 [Menu🔝](#menu) From fd9086f925f6cb2e324bb7db8f4b143422e36ff3 Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Mon, 3 Apr 2023 17:26:36 +0200 Subject: [PATCH 288/578] Update xcm-tool.md fix typos --- docs/RFPs/Open/xcm-tool.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/docs/RFPs/Open/xcm-tool.md b/docs/RFPs/Open/xcm-tool.md index 7f0eaa91c0c..d36ae0fa8e1 100644 --- a/docs/RFPs/Open/xcm-tool.md +++ b/docs/RFPs/Open/xcm-tool.md @@ -8,18 +8,17 @@ XCM is the crosschain communication standard that will be used by all the parachains. Currently XCM is still in early stage but is already support some main usecases such as crosschain transfer of fungible tokens. -There are currently two major areas of XCM that still awaiting to be improves: +There are currently two major areas of XCM that are still awaiting to be improved: - Extend & improve [xcm-format](https://github.com/paritytech/xcm-format) to support more use cases - We have few issues & PRs so we are on track on getting this done but of couse more helps as always welcome - Implement library & tools to ease the development of XCM related code - - [xtokens](https://github.com/w3f/Open-Grants-Program/blob/master/applications/xtokens.md) handles the fungible asset implement, and we also need simialr one for NFT - - We need some tool to allow developer to test XCM related code: https://github.com/paritytech/polkadot/issues/2544 + - [xtokens](https://github.com/w3f/Open-Grants-Program/blob/master/applications/xtokens.md) handles the fungible asset implementations, and we also need a similar one for NFTs + - We need some tool to allow developers to test XCM related code: https://github.com/paritytech/polkadot/issues/2544 - To implement more complicated XCM scenarios, we need some tools to help with async programming The scope of the new project count be one of: -- Develop tools to help developer to test XCM related code -- Develop pallets or utility libraies to better handle the async nature of XCM communication -- Develop pallet to handle crosschain transfer of NFT - +- Develop tools to help developer to test XCM-related code +- Develop pallets or utility libraries to better handle the async nature of XCM communication +- Develop a pallet to handle crosschain transfers of NFTs From fc338f8182ce56139b14ba8dd8a3c65079b95b7e Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Mon, 3 Apr 2023 15:50:11 -0300 Subject: [PATCH 289/578] Update index.md (#1648) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 5abb8c8b906..b69052fe26f 100644 --- a/applications/index.md +++ b/applications/index.md @@ -36,7 +36,7 @@ Use this page for an overview of all public grants and their status. Use the sid | Team | Project | Link | Terminated | First Delivery | Completed | | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------------------------------- | :--------- | :------------: | :--------: | | [Deep Ink Ventures GmbH](http://deep-ink.ventures/) | [GenesisDAO](GenesisDAO.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☒ | ☐ | -| [ArtZero](https://artzero.io/) | [ArtZero & InkWhale](ArtZero_InkWhale.md) | [GitHub](https://github.com/artzero-io) | ☐ | ☐ | ☐ | +| [ArtZero](https://artzero.io/) | [ArtZero & InkWhale](ArtZero_InkWhale.md) | [GitHub](https://github.com/artzero-io) | ☐ | ☒ | ☐ | | EightFish | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☐ | ☐ | | [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☐ | ☐ | | [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☐ | ☐ | From 3862855c6af080de5e2de4a35667d24f3c5b38de Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Tue, 4 Apr 2023 03:08:12 -0400 Subject: [PATCH 290/578] Update index.md (#1652) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index b69052fe26f..55712a40bc1 100644 --- a/applications/index.md +++ b/applications/index.md @@ -92,7 +92,7 @@ Use this page for an overview of all public grants and their status. Use the sid | Team | Project | Link | Terminated | First Delivery | Completed | | :----------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------- | :--------- | :------------: | :-------: | | [CrossChain Labs](https://github.com/CrossChainLabs) | [DotPulse](DotPulse.md) | [GitHub](https://github.com/CrossChainLabs) | ☐ | ☒ | ☒ | -| [Jett Hays](https://github.com/jettblu) | [Distributed Key Management](DistributedKeyManagement.md) | [GitHub](https://github.com/KryptikApp) | ☐ | ☒ | ☐ | +| [Jett Hays](https://github.com/jettblu) | [Distributed Key Management](DistributedKeyManagement.md) | [GitHub](https://github.com/KryptikApp) | ☐ | ☒ | ☒ | | [NexToken Technology](https://github.com/NexTokenTech) | [TREX - Timed Release Encryption Xing chains](TREX_Network.md) | [GitHub](https://github.com/NexTokenTech/TREX) | ☐ | ☒ | ☒ | | [Blockcoders](http://blockcoders.io/) | [Cross-Consensus Messaging Software Development Kit](xcm-sdk.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☒ | | [Keystone Wallet](https://keyst.one/) | [Polkadot Snap](PolkadotSnap.md) | [GitHub](https://github.com/KeystoneHQ) | ☐ | ☐ | ☐ | From 89c76532af756b57c9229e7d3f6c5375f8a9c048 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Tue, 4 Apr 2023 03:08:33 -0400 Subject: [PATCH 291/578] Update index.md (#1650) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 55712a40bc1..2c70b4c91b1 100644 --- a/applications/index.md +++ b/applications/index.md @@ -47,7 +47,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☒ | ☒ | | [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | | [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☐ | ☒ | ☐ | -| [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☒ | ☐ | +| [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☒ | ☒ | | [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☐ | | [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☐ | ☐ | | [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | From f186dfd8f5bba592fd6aeecca8b1d504909a6ad9 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Tue, 4 Apr 2023 08:50:02 -0300 Subject: [PATCH 292/578] Update index.md to check societal as finished (#1653) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 2c70b4c91b1..0bac3785d06 100644 --- a/applications/index.md +++ b/applications/index.md @@ -48,7 +48,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | | [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☐ | ☒ | ☐ | | [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☒ | ☒ | -| [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☐ | +| [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☒ | | [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☐ | ☐ | | [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | | [Aviraj Khare](https://github.com/avirajkhare00) | [Polkasearch](polkasearch.md) | [GitHub](https://github.com/avirajkhare00) | ☐ | ☐ | ☐ | From 6380fa0c236acc945df0d96b4cf312e921a87d4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Tue, 4 Apr 2023 15:32:19 +0200 Subject: [PATCH 293/578] Update index.md Coong Wallet M1 --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 0bac3785d06..4898be027fa 100644 --- a/applications/index.md +++ b/applications/index.md @@ -126,7 +126,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Blaize.tech](https://blaize.tech/) | [Unified deployment for the collator node](unified_collator_node_deployment.md) | [GitHub](https://github.com/babebort-blaize) | ☐ | ☒ | ☒ | | [Odyssey B.V.](https://odyssey.org/) | [Momentum, an open source, metaverse for digital societies](odyssey_momentum.md) | [GitHub](https://github.com/momentum-xyz) | ☐ | ☐ | ☐ | | [Bela Supernova](https://bsn.si/) | [Rubeus Keeper Stage 2](Rubeus_keeper_st2.md) | [GitHub](https://github.com/bsn-si) | ☐ | ☒ | ☒ | -| [Coong Team](https://coong.xyz/) | [Coong Wallet](coong_wallet.md) | [GitHub](https://github.com/CoongCrafts) | ☐ | ☐ | ☐ | +| [Coong Team](https://coong.xyz/) | [Coong Wallet](coong_wallet.md) | [GitHub](https://github.com/CoongCrafts) | ☐ | ☒ | ☐ | | OCamlMyCaml | [PrivaDEX: Cross-Chain DEX Aggregator MVP](PrivaDEX_aggregator.md) | [GitHub](https://github.com/kapilsinha/privadex) | ☐ | ☒ | ☒ | | [Aband-Network](https://a.band/) | [Substrate Parachain PoS Template](substrate-parachain-PoS-template.md) | [GitHub](https://github.com/Aband-Network/substrate-parachain-PoS-template) | ☐ | ☒ | ☒ | | [MangoBOX labs](https://www.mangobox.xyz/) | [MangoSale Protocol](MangoSale_Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☒ | ☐ | From 514788722c391d44ca0369681404c1e6a8ea5cf7 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Wed, 5 Apr 2023 10:00:47 +0200 Subject: [PATCH 294/578] Yarn update --- yarn.lock | 8720 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 8720 insertions(+) create mode 100644 yarn.lock diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000000..c6f06f36c54 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,8720 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@algolia/autocomplete-core@1.7.4": + version "1.7.4" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.7.4.tgz#85ff36b2673654a393c8c505345eaedd6eaa4f70" + integrity sha512-daoLpQ3ps/VTMRZDEBfU8ixXd+amZcNJ4QSP3IERGyzqnL5Ch8uSRFt/4G8pUvW9c3o6GA4vtVv4I4lmnkdXyg== + dependencies: + "@algolia/autocomplete-shared" "1.7.4" + +"@algolia/autocomplete-preset-algolia@1.7.4": + version "1.7.4" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.4.tgz#610ee1d887962f230b987cba2fd6556478000bc3" + integrity sha512-s37hrvLEIfcmKY8VU9LsAXgm2yfmkdHT3DnA3SgHaY93yjZ2qL57wzb5QweVkYuEBZkT2PIREvRoLXC2sxTbpQ== + dependencies: + "@algolia/autocomplete-shared" "1.7.4" + +"@algolia/autocomplete-shared@1.7.4": + version "1.7.4" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.4.tgz#78aea1140a50c4d193e1f06a13b7f12c5e2cbeea" + integrity sha512-2VGCk7I9tA9Ge73Km99+Qg87w0wzW4tgUruvWAn/gfey1ZXgmxZtyIRBebk35R1O8TbK77wujVtCnpsGpRy1kg== + +"@algolia/cache-browser-local-storage@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.17.0.tgz#4c54a9b1795dcc1cd9f9533144f7df3057984d39" + integrity sha512-myRSRZDIMYB8uCkO+lb40YKiYHi0fjpWRtJpR/dgkaiBlSD0plRyB6lLOh1XIfmMcSeBOqDE7y9m8xZMrXYfyQ== + dependencies: + "@algolia/cache-common" "4.17.0" + +"@algolia/cache-common@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.17.0.tgz#bc3da15548df585b44d76c55e66b0056a2b3f917" + integrity sha512-g8mXzkrcUBIPZaulAuqE7xyHhLAYAcF2xSch7d9dABheybaU3U91LjBX6eJTEB7XVhEsgK4Smi27vWtAJRhIKQ== + +"@algolia/cache-in-memory@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.17.0.tgz#eb55a92cb8eb8641903a2b23fd6d05ebdaca2010" + integrity sha512-PT32ciC/xI8z919d0oknWVu3kMfTlhQn3MKxDln3pkn+yA7F7xrxSALysxquv+MhFfNAcrtQ/oVvQVBAQSHtdw== + dependencies: + "@algolia/cache-common" "4.17.0" + +"@algolia/client-account@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.17.0.tgz#4b13e5a8e50a06be1f3289d9db337096ebc66b73" + integrity sha512-sSEHx9GA6m7wrlsSMNBGfyzlIfDT2fkz2u7jqfCCd6JEEwmxt8emGmxAU/0qBfbhRSuGvzojoLJlr83BSZAKjA== + dependencies: + "@algolia/client-common" "4.17.0" + "@algolia/client-search" "4.17.0" + "@algolia/transporter" "4.17.0" + +"@algolia/client-analytics@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.17.0.tgz#1b36ffbe913b7b4d8900bc15982ca431f47a473c" + integrity sha512-84ooP8QA3mQ958hQ9wozk7hFUbAO+81CX1CjAuerxBqjKIInh1fOhXKTaku05O/GHBvcfExpPLIQuSuLYziBXQ== + dependencies: + "@algolia/client-common" "4.17.0" + "@algolia/client-search" "4.17.0" + "@algolia/requester-common" "4.17.0" + "@algolia/transporter" "4.17.0" + +"@algolia/client-common@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.17.0.tgz#67fd898006e3ac359ea3e3ed61abfc26147ffa53" + integrity sha512-jHMks0ZFicf8nRDn6ma8DNNsdwGgP/NKiAAL9z6rS7CymJ7L0+QqTJl3rYxRW7TmBhsUH40wqzmrG6aMIN/DrQ== + dependencies: + "@algolia/requester-common" "4.17.0" + "@algolia/transporter" "4.17.0" + +"@algolia/client-personalization@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.17.0.tgz#428d9f4762c22856b6062bb54351eb31834db6c1" + integrity sha512-RMzN4dZLIta1YuwT7QC9o+OeGz2cU6eTOlGNE/6RcUBLOU3l9tkCOdln5dPE2jp8GZXPl2yk54b2nSs1+pAjqw== + dependencies: + "@algolia/client-common" "4.17.0" + "@algolia/requester-common" "4.17.0" + "@algolia/transporter" "4.17.0" + +"@algolia/client-search@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.17.0.tgz#0053c682f5f588e006c20791c27e8bcb0aa5b53c" + integrity sha512-x4P2wKrrRIXszT8gb7eWsMHNNHAJs0wE7/uqbufm4tZenAp+hwU/hq5KVsY50v+PfwM0LcDwwn/1DroujsTFoA== + dependencies: + "@algolia/client-common" "4.17.0" + "@algolia/requester-common" "4.17.0" + "@algolia/transporter" "4.17.0" + +"@algolia/events@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@algolia/events/-/events-4.0.1.tgz#fd39e7477e7bc703d7f893b556f676c032af3950" + integrity sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ== + +"@algolia/logger-common@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.17.0.tgz#0fcea39c9485554edb4cdbfd965c5748b0b837ac" + integrity sha512-DGuoZqpTmIKJFDeyAJ7M8E/LOenIjWiOsg1XJ1OqAU/eofp49JfqXxbfgctlVZVmDABIyOz8LqEoJ6ZP4DTyvw== + +"@algolia/logger-console@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.17.0.tgz#8ac56ef4259c4fa3eb9eb6586c7b4b4ed942e8da" + integrity sha512-zMPvugQV/gbXUvWBCzihw6m7oxIKp48w37QBIUu/XqQQfxhjoOE9xyfJr1KldUt5FrYOKZJVsJaEjTsu+bIgQg== + dependencies: + "@algolia/logger-common" "4.17.0" + +"@algolia/requester-browser-xhr@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.17.0.tgz#f52fdeeac2f3c531f00838920af33a73066a159b" + integrity sha512-aSOX/smauyTkP21Pf52pJ1O2LmNFJ5iHRIzEeTh0mwBeADO4GdG94cAWDILFA9rNblq/nK3EDh3+UyHHjplZ1A== + dependencies: + "@algolia/requester-common" "4.17.0" + +"@algolia/requester-common@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.17.0.tgz#746020d2cbc829213e7cede8eef2182c7a71e32b" + integrity sha512-XJjmWFEUlHu0ijvcHBoixuXfEoiRUdyzQM6YwTuB8usJNIgShua8ouFlRWF8iCeag0vZZiUm4S2WCVBPkdxFgg== + +"@algolia/requester-node-http@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.17.0.tgz#262276d94c25a4ec2128b1bdfb9471529528d8b9" + integrity sha512-bpb/wDA1aC6WxxM8v7TsFspB7yBN3nqCGs2H1OADolQR/hiAIjAxusbuMxVbRFOdaUvAIqioIIkWvZdpYNIn8w== + dependencies: + "@algolia/requester-common" "4.17.0" + +"@algolia/transporter@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.17.0.tgz#6aabdbc20c475d72d83c8e6519f1191f1a51fb37" + integrity sha512-6xL6H6fe+Fi0AEP3ziSgC+G04RK37iRb4uUUqVAH9WPYFI8g+LYFq6iv5HS8Cbuc5TTut+Bwj6G+dh/asdb9uA== + dependencies: + "@algolia/cache-common" "4.17.0" + "@algolia/logger-common" "4.17.0" + "@algolia/requester-common" "4.17.0" + +"@ampproject/remapping@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + dependencies: + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.21.4", "@babel/code-frame@^7.8.3": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" + integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.4.tgz#457ffe647c480dff59c2be092fc3acf71195c87f" + integrity sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g== + +"@babel/core@7.12.9": + version "7.12.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" + integrity sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.5" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.5" + "@babel/parser" "^7.12.7" + "@babel/template" "^7.12.7" + "@babel/traverse" "^7.12.9" + "@babel/types" "^7.12.7" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/core@^7.12.3", "@babel/core@^7.18.6", "@babel/core@^7.19.6": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.4.tgz#c6dc73242507b8e2a27fd13a9c1814f9fa34a659" + integrity sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.21.4" + "@babel/generator" "^7.21.4" + "@babel/helper-compilation-targets" "^7.21.4" + "@babel/helper-module-transforms" "^7.21.2" + "@babel/helpers" "^7.21.0" + "@babel/parser" "^7.21.4" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.4" + "@babel/types" "^7.21.4" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.2" + semver "^6.3.0" + +"@babel/generator@^7.12.5", "@babel/generator@^7.18.7", "@babel/generator@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.4.tgz#64a94b7448989f421f919d5239ef553b37bb26bc" + integrity sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA== + dependencies: + "@babel/types" "^7.21.4" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" + integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz#acd4edfd7a566d1d51ea975dff38fd52906981bb" + integrity sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.18.6" + "@babel/types" "^7.18.9" + +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz#770cd1ce0889097ceacb99418ee6934ef0572656" + integrity sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg== + dependencies: + "@babel/compat-data" "^7.21.4" + "@babel/helper-validator-option" "^7.21.0" + browserslist "^4.21.3" + lru-cache "^5.1.1" + semver "^6.3.0" + +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.4.tgz#3a017163dc3c2ba7deb9a7950849a9586ea24c18" + integrity sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.21.0" + "@babel/helper-member-expression-to-functions" "^7.21.0" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-replace-supers" "^7.20.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/helper-split-export-declaration" "^7.18.6" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.20.5": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.4.tgz#40411a8ab134258ad2cf3a3d987ec6aa0723cee5" + integrity sha512-M00OuhU+0GyZ5iBBN9czjugzWrEq2vDpf/zCYHxxf93ul/Q5rv+a5h+/+0WnI1AebHNVtl5bFV0qsJoH23DbfA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + regexpu-core "^5.3.1" + +"@babel/helper-define-polyfill-provider@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a" + integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww== + dependencies: + "@babel/helper-compilation-targets" "^7.17.7" + "@babel/helper-plugin-utils" "^7.16.7" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + +"@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== + +"@babel/helper-explode-assignable-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096" + integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0", "@babel/helper-function-name@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4" + integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg== + dependencies: + "@babel/template" "^7.20.7" + "@babel/types" "^7.21.0" + +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-member-expression-to-functions@^7.20.7", "@babel/helper-member-expression-to-functions@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz#319c6a940431a133897148515877d2f3269c3ba5" + integrity sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q== + dependencies: + "@babel/types" "^7.21.0" + +"@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz#ac88b2f76093637489e718a90cec6cf8a9b029af" + integrity sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg== + dependencies: + "@babel/types" "^7.21.4" + +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.20.11", "@babel/helper-module-transforms@^7.21.2": + version "7.21.2" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz#160caafa4978ac8c00ac66636cb0fa37b024e2d2" + integrity sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.20.2" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.19.1" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.2" + "@babel/types" "^7.21.2" + +"@babel/helper-optimise-call-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" + integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-plugin-utils@7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" + integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== + +"@babel/helper-remap-async-to-generator@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" + integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-wrap-function" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz#243ecd2724d2071532b2c8ad2f0f9f083bcae331" + integrity sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.20.7" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.20.7" + "@babel/types" "^7.20.7" + +"@babel/helper-simple-access@^7.20.2": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" + integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== + dependencies: + "@babel/types" "^7.20.2" + +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684" + integrity sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg== + dependencies: + "@babel/types" "^7.20.0" + +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-string-parser@^7.19.4": + version "7.19.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" + integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== + +"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== + +"@babel/helper-validator-option@^7.18.6", "@babel/helper-validator-option@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" + integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== + +"@babel/helper-wrap-function@^7.18.9": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz#75e2d84d499a0ab3b31c33bcfe59d6b8a45f62e3" + integrity sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q== + dependencies: + "@babel/helper-function-name" "^7.19.0" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.20.5" + "@babel/types" "^7.20.5" + +"@babel/helpers@^7.12.5", "@babel/helpers@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.21.0.tgz#9dd184fb5599862037917cdc9eecb84577dc4e7e" + integrity sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA== + dependencies: + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.0" + "@babel/types" "^7.21.0" + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.12.7", "@babel/parser@^7.18.8", "@babel/parser@^7.20.7", "@babel/parser@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.4.tgz#94003fdfc520bbe2875d4ae557b43ddb6d880f17" + integrity sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw== + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" + integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz#d9c85589258539a22a901033853101a6198d4ef1" + integrity sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/plugin-proposal-optional-chaining" "^7.20.7" + +"@babel/plugin-proposal-async-generator-functions@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz#bfb7276d2d573cb67ba379984a2334e262ba5326" + integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-remap-async-to-generator" "^7.18.9" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-class-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" + integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-class-static-block@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz#77bdd66fb7b605f3a61302d224bdfacf5547977d" + integrity sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.21.0" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-proposal-dynamic-import@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" + integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-proposal-export-namespace-from@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" + integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" + integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-proposal-logical-assignment-operators@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz#dfbcaa8f7b4d37b51e8bfb46d94a5aea2bb89d83" + integrity sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" + integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" + integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" + integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.12.1" + +"@babel/plugin-proposal-object-rest-spread@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a" + integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== + dependencies: + "@babel/compat-data" "^7.20.5" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.20.7" + +"@babel/plugin-proposal-optional-catch-binding@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" + integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-proposal-optional-chaining@^7.20.7", "@babel/plugin-proposal-optional-chaining@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" + integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-private-methods@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" + integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-private-property-in-object@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz#19496bd9883dd83c23c7d7fc45dcd9ad02dfa1dc" + integrity sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.21.0" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" + integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-import-assertions@^7.20.0": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz#bb50e0d4bea0957235390641209394e87bdb9cc4" + integrity sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ== + dependencies: + "@babel/helper-plugin-utils" "^7.19.0" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz#9d9d357cc818aa7ae7935917c1257f67677a0926" + integrity sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-jsx@^7.18.6", "@babel/plugin-syntax-jsx@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz#f264ed7bf40ffc9ec239edabc17a50c4f5b6fea2" + integrity sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@7.8.3", "@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.20.0": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz#2751948e9b7c6d771a8efa59340c15d4a2891ff8" + integrity sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-arrow-functions@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz#bea332b0e8b2dab3dafe55a163d8227531ab0551" + integrity sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-async-to-generator@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz#dfee18623c8cb31deb796aa3ca84dda9cea94354" + integrity sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q== + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-remap-async-to-generator" "^7.18.9" + +"@babel/plugin-transform-block-scoped-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" + integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-block-scoping@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz#e737b91037e5186ee16b76e7ae093358a5634f02" + integrity sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-classes@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz#f469d0b07a4c5a7dbb21afad9e27e57b47031665" + integrity sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.21.0" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-replace-supers" "^7.20.7" + "@babel/helper-split-export-declaration" "^7.18.6" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz#704cc2fd155d1c996551db8276d55b9d46e4d0aa" + integrity sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/template" "^7.20.7" + +"@babel/plugin-transform-destructuring@^7.21.3": + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz#73b46d0fd11cd6ef57dea8a381b1215f4959d401" + integrity sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" + integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-duplicate-keys@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" + integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-exponentiation-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd" + integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-for-of@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz#964108c9988de1a60b4be2354a7d7e245f36e86e" + integrity sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-function-name@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0" + integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== + dependencies: + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc" + integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-member-expression-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" + integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-modules-amd@^7.20.11": + version "7.20.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz#3daccca8e4cc309f03c3a0c4b41dc4b26f55214a" + integrity sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g== + dependencies: + "@babel/helper-module-transforms" "^7.20.11" + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-modules-commonjs@^7.21.2": + version "7.21.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz#6ff5070e71e3192ef2b7e39820a06fb78e3058e7" + integrity sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA== + dependencies: + "@babel/helper-module-transforms" "^7.21.2" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-simple-access" "^7.20.2" + +"@babel/plugin-transform-modules-systemjs@^7.20.11": + version "7.20.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz#467ec6bba6b6a50634eea61c9c232654d8a4696e" + integrity sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw== + dependencies: + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-module-transforms" "^7.20.11" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-validator-identifier" "^7.19.1" + +"@babel/plugin-transform-modules-umd@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" + integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== + dependencies: + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.20.5": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz#626298dd62ea51d452c3be58b285d23195ba69a8" + integrity sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.20.5" + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-new-target@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8" + integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-object-super@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" + integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.6" + +"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.21.3": + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz#18fc4e797cf6d6d972cb8c411dbe8a809fa157db" + integrity sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-property-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" + integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-react-constant-elements@^7.12.1", "@babel/plugin-transform-react-constant-elements@^7.18.12": + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.21.3.tgz#b32a5556100d424b25e388dd689050d78396884d" + integrity sha512-4DVcFeWe/yDYBLp0kBmOGFJ6N2UYg7coGid1gdxb4co62dy/xISDMaYBXBVXEDhfgMk7qkbcYiGtwd5Q/hwDDQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-react-display-name@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz#8b1125f919ef36ebdfff061d664e266c666b9415" + integrity sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-react-jsx-development@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5" + integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.18.6" + +"@babel/plugin-transform-react-jsx@^7.18.6": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.0.tgz#656b42c2fdea0a6d8762075d58ef9d4e3c4ab8a2" + integrity sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-jsx" "^7.18.6" + "@babel/types" "^7.21.0" + +"@babel/plugin-transform-react-pure-annotations@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz#561af267f19f3e5d59291f9950fd7b9663d0d844" + integrity sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-regenerator@^7.20.5": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz#57cda588c7ffb7f4f8483cc83bdcea02a907f04d" + integrity sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + regenerator-transform "^0.15.1" + +"@babel/plugin-transform-reserved-words@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" + integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-runtime@^7.18.6": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.21.4.tgz#2e1da21ca597a7d01fc96b699b21d8d2023191aa" + integrity sha512-1J4dhrw1h1PqnNNpzwxQ2UBymJUF8KuPjAAnlLwZcGhHAIqUigFW7cdK6GHoB64ubY4qXQNYknoUeks4Wz7CUA== + dependencies: + "@babel/helper-module-imports" "^7.21.4" + "@babel/helper-plugin-utils" "^7.20.2" + babel-plugin-polyfill-corejs2 "^0.3.3" + babel-plugin-polyfill-corejs3 "^0.6.0" + babel-plugin-polyfill-regenerator "^0.4.1" + semver "^6.3.0" + +"@babel/plugin-transform-shorthand-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" + integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-spread@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz#c2d83e0b99d3bf83e07b11995ee24bf7ca09401e" + integrity sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + +"@babel/plugin-transform-sticky-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc" + integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-template-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e" + integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-typeof-symbol@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0" + integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-typescript@^7.21.3": + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.3.tgz#316c5be579856ea890a57ebc5116c5d064658f2b" + integrity sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.21.0" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-typescript" "^7.20.0" + +"@babel/plugin-transform-unicode-escapes@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz#1ecfb0eda83d09bbcb77c09970c2dd55832aa246" + integrity sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-unicode-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" + integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/preset-env@^7.12.1", "@babel/preset-env@^7.18.6", "@babel/preset-env@^7.19.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.21.4.tgz#a952482e634a8dd8271a3fe5459a16eb10739c58" + integrity sha512-2W57zHs2yDLm6GD5ZpvNn71lZ0B/iypSdIeq25OurDKji6AdzV07qp4s3n1/x5BqtiGaTrPN3nerlSCaC5qNTw== + dependencies: + "@babel/compat-data" "^7.21.4" + "@babel/helper-compilation-targets" "^7.21.4" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-validator-option" "^7.21.0" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.20.7" + "@babel/plugin-proposal-async-generator-functions" "^7.20.7" + "@babel/plugin-proposal-class-properties" "^7.18.6" + "@babel/plugin-proposal-class-static-block" "^7.21.0" + "@babel/plugin-proposal-dynamic-import" "^7.18.6" + "@babel/plugin-proposal-export-namespace-from" "^7.18.9" + "@babel/plugin-proposal-json-strings" "^7.18.6" + "@babel/plugin-proposal-logical-assignment-operators" "^7.20.7" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" + "@babel/plugin-proposal-numeric-separator" "^7.18.6" + "@babel/plugin-proposal-object-rest-spread" "^7.20.7" + "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" + "@babel/plugin-proposal-optional-chaining" "^7.21.0" + "@babel/plugin-proposal-private-methods" "^7.18.6" + "@babel/plugin-proposal-private-property-in-object" "^7.21.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.20.0" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.20.7" + "@babel/plugin-transform-async-to-generator" "^7.20.7" + "@babel/plugin-transform-block-scoped-functions" "^7.18.6" + "@babel/plugin-transform-block-scoping" "^7.21.0" + "@babel/plugin-transform-classes" "^7.21.0" + "@babel/plugin-transform-computed-properties" "^7.20.7" + "@babel/plugin-transform-destructuring" "^7.21.3" + "@babel/plugin-transform-dotall-regex" "^7.18.6" + "@babel/plugin-transform-duplicate-keys" "^7.18.9" + "@babel/plugin-transform-exponentiation-operator" "^7.18.6" + "@babel/plugin-transform-for-of" "^7.21.0" + "@babel/plugin-transform-function-name" "^7.18.9" + "@babel/plugin-transform-literals" "^7.18.9" + "@babel/plugin-transform-member-expression-literals" "^7.18.6" + "@babel/plugin-transform-modules-amd" "^7.20.11" + "@babel/plugin-transform-modules-commonjs" "^7.21.2" + "@babel/plugin-transform-modules-systemjs" "^7.20.11" + "@babel/plugin-transform-modules-umd" "^7.18.6" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.20.5" + "@babel/plugin-transform-new-target" "^7.18.6" + "@babel/plugin-transform-object-super" "^7.18.6" + "@babel/plugin-transform-parameters" "^7.21.3" + "@babel/plugin-transform-property-literals" "^7.18.6" + "@babel/plugin-transform-regenerator" "^7.20.5" + "@babel/plugin-transform-reserved-words" "^7.18.6" + "@babel/plugin-transform-shorthand-properties" "^7.18.6" + "@babel/plugin-transform-spread" "^7.20.7" + "@babel/plugin-transform-sticky-regex" "^7.18.6" + "@babel/plugin-transform-template-literals" "^7.18.9" + "@babel/plugin-transform-typeof-symbol" "^7.18.9" + "@babel/plugin-transform-unicode-escapes" "^7.18.10" + "@babel/plugin-transform-unicode-regex" "^7.18.6" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.21.4" + babel-plugin-polyfill-corejs2 "^0.3.3" + babel-plugin-polyfill-corejs3 "^0.6.0" + babel-plugin-polyfill-regenerator "^0.4.1" + core-js-compat "^3.25.1" + semver "^6.3.0" + +"@babel/preset-modules@^0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" + integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-react@^7.12.5", "@babel/preset-react@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d" + integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-transform-react-display-name" "^7.18.6" + "@babel/plugin-transform-react-jsx" "^7.18.6" + "@babel/plugin-transform-react-jsx-development" "^7.18.6" + "@babel/plugin-transform-react-pure-annotations" "^7.18.6" + +"@babel/preset-typescript@^7.18.6": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.21.4.tgz#b913ac8e6aa8932e47c21b01b4368d8aa239a529" + integrity sha512-sMLNWY37TCdRH/bJ6ZeeOH1nPuanED7Ai9Y/vH31IPqalioJ6ZNFUWONsakhv4r4n+I6gm5lmoE0olkgib/j/A== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-validator-option" "^7.21.0" + "@babel/plugin-syntax-jsx" "^7.21.4" + "@babel/plugin-transform-modules-commonjs" "^7.21.2" + "@babel/plugin-transform-typescript" "^7.21.3" + +"@babel/regjsgen@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" + integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== + +"@babel/runtime-corejs3@^7.18.6": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.21.0.tgz#6e4939d9d9789ff63e2dc58e88f13a3913a24eba" + integrity sha512-TDD4UJzos3JJtM+tHX+w2Uc+KWj7GV+VKKFdMVd2Rx8sdA19hcc3P3AHFYd5LVOw+pYuSd5lICC3gm52B6Rwxw== + dependencies: + core-js-pure "^3.25.1" + regenerator-runtime "^0.13.11" + +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.6", "@babel/runtime@^7.20.13", "@babel/runtime@^7.8.4": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673" + integrity sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw== + dependencies: + regenerator-runtime "^0.13.11" + +"@babel/template@^7.12.7", "@babel/template@^7.18.10", "@babel/template@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" + integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + +"@babel/traverse@^7.12.9", "@babel/traverse@^7.18.8", "@babel/traverse@^7.20.5", "@babel/traverse@^7.20.7", "@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2", "@babel/traverse@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.4.tgz#a836aca7b116634e97a6ed99976236b3282c9d36" + integrity sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q== + dependencies: + "@babel/code-frame" "^7.21.4" + "@babel/generator" "^7.21.4" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.21.0" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.21.4" + "@babel/types" "^7.21.4" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.12.6", "@babel/types@^7.12.7", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.21.4", "@babel/types@^7.4.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.4.tgz#2d5d6bb7908699b3b416409ffd3b5daa25b030d4" + integrity sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA== + dependencies: + "@babel/helper-string-parser" "^7.19.4" + "@babel/helper-validator-identifier" "^7.19.1" + to-fast-properties "^2.0.0" + +"@braintree/sanitize-url@^6.0.0": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz#6110f918d273fe2af8ea1c4398a88774bb9fc12f" + integrity sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg== + +"@colors/colors@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== + +"@discoveryjs/json-ext@0.5.7": + version "0.5.7" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" + integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== + +"@docsearch/css@3.3.3": + version "3.3.3" + resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.3.3.tgz#f9346c9e24602218341f51b8ba91eb9109add434" + integrity sha512-6SCwI7P8ao+se1TUsdZ7B4XzL+gqeQZnBc+2EONZlcVa0dVrk0NjETxozFKgMv0eEGH8QzP1fkN+A1rH61l4eg== + +"@docsearch/react@^3.1.1": + version "3.3.3" + resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.3.3.tgz#907b6936a565f880b4c0892624b4f7a9f132d298" + integrity sha512-pLa0cxnl+G0FuIDuYlW+EBK6Rw2jwLw9B1RHIeS4N4s2VhsfJ/wzeCi3CWcs5yVfxLd5ZK50t//TMA5e79YT7Q== + dependencies: + "@algolia/autocomplete-core" "1.7.4" + "@algolia/autocomplete-preset-algolia" "1.7.4" + "@docsearch/css" "3.3.3" + algoliasearch "^4.0.0" + +"@docusaurus/core@2.4.0", "@docusaurus/core@^2.2.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.4.0.tgz#a12c175cb2e5a7e4582e65876a50813f6168913d" + integrity sha512-J55/WEoIpRcLf3afO5POHPguVZosKmJEQWKBL+K7TAnfuE7i+Y0NPLlkKtnWCehagGsgTqClfQEexH/UT4kELA== + dependencies: + "@babel/core" "^7.18.6" + "@babel/generator" "^7.18.7" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-transform-runtime" "^7.18.6" + "@babel/preset-env" "^7.18.6" + "@babel/preset-react" "^7.18.6" + "@babel/preset-typescript" "^7.18.6" + "@babel/runtime" "^7.18.6" + "@babel/runtime-corejs3" "^7.18.6" + "@babel/traverse" "^7.18.8" + "@docusaurus/cssnano-preset" "2.4.0" + "@docusaurus/logger" "2.4.0" + "@docusaurus/mdx-loader" "2.4.0" + "@docusaurus/react-loadable" "5.5.2" + "@docusaurus/utils" "2.4.0" + "@docusaurus/utils-common" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + "@slorber/static-site-generator-webpack-plugin" "^4.0.7" + "@svgr/webpack" "^6.2.1" + autoprefixer "^10.4.7" + babel-loader "^8.2.5" + babel-plugin-dynamic-import-node "^2.3.3" + boxen "^6.2.1" + chalk "^4.1.2" + chokidar "^3.5.3" + clean-css "^5.3.0" + cli-table3 "^0.6.2" + combine-promises "^1.1.0" + commander "^5.1.0" + copy-webpack-plugin "^11.0.0" + core-js "^3.23.3" + css-loader "^6.7.1" + css-minimizer-webpack-plugin "^4.0.0" + cssnano "^5.1.12" + del "^6.1.1" + detect-port "^1.3.0" + escape-html "^1.0.3" + eta "^2.0.0" + file-loader "^6.2.0" + fs-extra "^10.1.0" + html-minifier-terser "^6.1.0" + html-tags "^3.2.0" + html-webpack-plugin "^5.5.0" + import-fresh "^3.3.0" + leven "^3.1.0" + lodash "^4.17.21" + mini-css-extract-plugin "^2.6.1" + postcss "^8.4.14" + postcss-loader "^7.0.0" + prompts "^2.4.2" + react-dev-utils "^12.0.1" + react-helmet-async "^1.3.0" + react-loadable "npm:@docusaurus/react-loadable@5.5.2" + react-loadable-ssr-addon-v5-slorber "^1.0.1" + react-router "^5.3.3" + react-router-config "^5.1.1" + react-router-dom "^5.3.3" + rtl-detect "^1.0.4" + semver "^7.3.7" + serve-handler "^6.1.3" + shelljs "^0.8.5" + terser-webpack-plugin "^5.3.3" + tslib "^2.4.0" + update-notifier "^5.1.0" + url-loader "^4.1.1" + wait-on "^6.0.1" + webpack "^5.73.0" + webpack-bundle-analyzer "^4.5.0" + webpack-dev-server "^4.9.3" + webpack-merge "^5.8.0" + webpackbar "^5.0.2" + +"@docusaurus/cssnano-preset@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.4.0.tgz#9213586358e0cce517f614af041eb7d184f8add6" + integrity sha512-RmdiA3IpsLgZGXRzqnmTbGv43W4OD44PCo+6Q/aYjEM2V57vKCVqNzuafE94jv0z/PjHoXUrjr69SaRymBKYYw== + dependencies: + cssnano-preset-advanced "^5.3.8" + postcss "^8.4.14" + postcss-sort-media-queries "^4.2.1" + tslib "^2.4.0" + +"@docusaurus/logger@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-2.4.0.tgz#393d91ad9ecdb9a8f80167dd6a34d4b45219b835" + integrity sha512-T8+qR4APN+MjcC9yL2Es+xPJ2923S9hpzDmMtdsOcUGLqpCGBbU1vp3AAqDwXtVgFkq+NsEk7sHdVsfLWR/AXw== + dependencies: + chalk "^4.1.2" + tslib "^2.4.0" + +"@docusaurus/mdx-loader@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.4.0.tgz#c6310342904af2f203e7df86a9df623f86840f2d" + integrity sha512-GWoH4izZKOmFoC+gbI2/y8deH/xKLvzz/T5BsEexBye8EHQlwsA7FMrVa48N063bJBH4FUOiRRXxk5rq9cC36g== + dependencies: + "@babel/parser" "^7.18.8" + "@babel/traverse" "^7.18.8" + "@docusaurus/logger" "2.4.0" + "@docusaurus/utils" "2.4.0" + "@mdx-js/mdx" "^1.6.22" + escape-html "^1.0.3" + file-loader "^6.2.0" + fs-extra "^10.1.0" + image-size "^1.0.1" + mdast-util-to-string "^2.0.0" + remark-emoji "^2.2.0" + stringify-object "^3.3.0" + tslib "^2.4.0" + unified "^9.2.2" + unist-util-visit "^2.0.3" + url-loader "^4.1.1" + webpack "^5.73.0" + +"@docusaurus/module-type-aliases@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-2.4.0.tgz#6961605d20cd46f86163ed8c2d83d438b02b4028" + integrity sha512-YEQO2D3UXs72qCn8Cr+RlycSQXVGN9iEUyuHwTuK4/uL/HFomB2FHSU0vSDM23oLd+X/KibQ3Ez6nGjQLqXcHg== + dependencies: + "@docusaurus/react-loadable" "5.5.2" + "@docusaurus/types" "2.4.0" + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router-config" "*" + "@types/react-router-dom" "*" + react-helmet-async "*" + react-loadable "npm:@docusaurus/react-loadable@5.5.2" + +"@docusaurus/plugin-content-blog@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.4.0.tgz#50dbfbc7b51f152ae660385fd8b34076713374c3" + integrity sha512-YwkAkVUxtxoBAIj/MCb4ohN0SCtHBs4AS75jMhPpf67qf3j+U/4n33cELq7567hwyZ6fMz2GPJcVmctzlGGThQ== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/logger" "2.4.0" + "@docusaurus/mdx-loader" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils" "2.4.0" + "@docusaurus/utils-common" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + cheerio "^1.0.0-rc.12" + feed "^4.2.2" + fs-extra "^10.1.0" + lodash "^4.17.21" + reading-time "^1.5.0" + tslib "^2.4.0" + unist-util-visit "^2.0.3" + utility-types "^3.10.0" + webpack "^5.73.0" + +"@docusaurus/plugin-content-docs@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.4.0.tgz#36e235adf902325735b873b4f535205884363728" + integrity sha512-ic/Z/ZN5Rk/RQo+Io6rUGpToOtNbtPloMR2JcGwC1xT2riMu6zzfSwmBi9tHJgdXH6CB5jG+0dOZZO8QS5tmDg== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/logger" "2.4.0" + "@docusaurus/mdx-loader" "2.4.0" + "@docusaurus/module-type-aliases" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + "@types/react-router-config" "^5.0.6" + combine-promises "^1.1.0" + fs-extra "^10.1.0" + import-fresh "^3.3.0" + js-yaml "^4.1.0" + lodash "^4.17.21" + tslib "^2.4.0" + utility-types "^3.10.0" + webpack "^5.73.0" + +"@docusaurus/plugin-content-pages@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.4.0.tgz#6169909a486e1eae0ddffff0b1717ce4332db4d4" + integrity sha512-Pk2pOeOxk8MeU3mrTU0XLIgP9NZixbdcJmJ7RUFrZp1Aj42nd0RhIT14BGvXXyqb8yTQlk4DmYGAzqOfBsFyGw== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/mdx-loader" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + fs-extra "^10.1.0" + tslib "^2.4.0" + webpack "^5.73.0" + +"@docusaurus/plugin-debug@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-2.4.0.tgz#1ad513fe9bcaf017deccf62df8b8843faeeb7d37" + integrity sha512-KC56DdYjYT7Txyux71vXHXGYZuP6yYtqwClvYpjKreWIHWus5Zt6VNi23rMZv3/QKhOCrN64zplUbdfQMvddBQ== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils" "2.4.0" + fs-extra "^10.1.0" + react-json-view "^1.21.3" + tslib "^2.4.0" + +"@docusaurus/plugin-google-analytics@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.4.0.tgz#8062d7a09d366329dfd3ce4e8a619da8624b6cc3" + integrity sha512-uGUzX67DOAIglygdNrmMOvEp8qG03X20jMWadeqVQktS6nADvozpSLGx4J0xbkblhJkUzN21WiilsP9iVP+zkw== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + tslib "^2.4.0" + +"@docusaurus/plugin-google-gtag@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.4.0.tgz#a8efda476f971410dfb3aab1cfe1f0f7d269adc5" + integrity sha512-adj/70DANaQs2+TF/nRdMezDXFAV/O/pjAbUgmKBlyOTq5qoMe0Tk4muvQIwWUmiUQxFJe+sKlZGM771ownyOg== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + tslib "^2.4.0" + +"@docusaurus/plugin-google-tag-manager@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-2.4.0.tgz#9a94324ac496835fc34e233cc60441df4e04dfdd" + integrity sha512-E66uGcYs4l7yitmp/8kMEVQftFPwV9iC62ORh47Veqzs6ExwnhzBkJmwDnwIysHBF1vlxnzET0Fl2LfL5fRR3A== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + tslib "^2.4.0" + +"@docusaurus/plugin-sitemap@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.4.0.tgz#ba0eb43565039fe011bdd874b5c5d7252b19d709" + integrity sha512-pZxh+ygfnI657sN8a/FkYVIAmVv0CGk71QMKqJBOfMmDHNN1FeDeFkBjWP49ejBqpqAhjufkv5UWq3UOu2soCw== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/logger" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils" "2.4.0" + "@docusaurus/utils-common" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + fs-extra "^10.1.0" + sitemap "^7.1.1" + tslib "^2.4.0" + +"@docusaurus/preset-classic@^2.2.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-2.4.0.tgz#92fdcfab35d8d0ffb8c38bcbf439e4e1cb0566a3" + integrity sha512-/5z5o/9bc6+P5ool2y01PbJhoGddEGsC0ej1MF6mCoazk8A+kW4feoUd68l7Bnv01rCnG3xy7kHUQP97Y0grUA== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/plugin-content-blog" "2.4.0" + "@docusaurus/plugin-content-docs" "2.4.0" + "@docusaurus/plugin-content-pages" "2.4.0" + "@docusaurus/plugin-debug" "2.4.0" + "@docusaurus/plugin-google-analytics" "2.4.0" + "@docusaurus/plugin-google-gtag" "2.4.0" + "@docusaurus/plugin-google-tag-manager" "2.4.0" + "@docusaurus/plugin-sitemap" "2.4.0" + "@docusaurus/theme-classic" "2.4.0" + "@docusaurus/theme-common" "2.4.0" + "@docusaurus/theme-search-algolia" "2.4.0" + "@docusaurus/types" "2.4.0" + +"@docusaurus/react-loadable@5.5.2", "react-loadable@npm:@docusaurus/react-loadable@5.5.2": + version "5.5.2" + resolved "https://registry.yarnpkg.com/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz#81aae0db81ecafbdaee3651f12804580868fa6ce" + integrity sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ== + dependencies: + "@types/react" "*" + prop-types "^15.6.2" + +"@docusaurus/theme-classic@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-2.4.0.tgz#a5404967b00adec3472efca4c3b3f6a5e2021c78" + integrity sha512-GMDX5WU6Z0OC65eQFgl3iNNEbI9IMJz9f6KnOyuMxNUR6q0qVLsKCNopFUDfFNJ55UU50o7P7o21yVhkwpfJ9w== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/mdx-loader" "2.4.0" + "@docusaurus/module-type-aliases" "2.4.0" + "@docusaurus/plugin-content-blog" "2.4.0" + "@docusaurus/plugin-content-docs" "2.4.0" + "@docusaurus/plugin-content-pages" "2.4.0" + "@docusaurus/theme-common" "2.4.0" + "@docusaurus/theme-translations" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils" "2.4.0" + "@docusaurus/utils-common" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + "@mdx-js/react" "^1.6.22" + clsx "^1.2.1" + copy-text-to-clipboard "^3.0.1" + infima "0.2.0-alpha.43" + lodash "^4.17.21" + nprogress "^0.2.0" + postcss "^8.4.14" + prism-react-renderer "^1.3.5" + prismjs "^1.28.0" + react-router-dom "^5.3.3" + rtlcss "^3.5.0" + tslib "^2.4.0" + utility-types "^3.10.0" + +"@docusaurus/theme-common@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-2.4.0.tgz#626096fe9552d240a2115b492c7e12099070cf2d" + integrity sha512-IkG/l5f/FLY6cBIxtPmFnxpuPzc5TupuqlOx+XDN+035MdQcAh8wHXXZJAkTeYDeZ3anIUSUIvWa7/nRKoQEfg== + dependencies: + "@docusaurus/mdx-loader" "2.4.0" + "@docusaurus/module-type-aliases" "2.4.0" + "@docusaurus/plugin-content-blog" "2.4.0" + "@docusaurus/plugin-content-docs" "2.4.0" + "@docusaurus/plugin-content-pages" "2.4.0" + "@docusaurus/utils" "2.4.0" + "@docusaurus/utils-common" "2.4.0" + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router-config" "*" + clsx "^1.2.1" + parse-numeric-range "^1.3.0" + prism-react-renderer "^1.3.5" + tslib "^2.4.0" + use-sync-external-store "^1.2.0" + utility-types "^3.10.0" + +"@docusaurus/theme-search-algolia@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.4.0.tgz#07d297d50c44446d6bc5a37be39afb8f014084e1" + integrity sha512-pPCJSCL1Qt4pu/Z0uxBAuke0yEBbxh0s4fOvimna7TEcBLPq0x06/K78AaABXrTVQM6S0vdocFl9EoNgU17hqA== + dependencies: + "@docsearch/react" "^3.1.1" + "@docusaurus/core" "2.4.0" + "@docusaurus/logger" "2.4.0" + "@docusaurus/plugin-content-docs" "2.4.0" + "@docusaurus/theme-common" "2.4.0" + "@docusaurus/theme-translations" "2.4.0" + "@docusaurus/utils" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + algoliasearch "^4.13.1" + algoliasearch-helper "^3.10.0" + clsx "^1.2.1" + eta "^2.0.0" + fs-extra "^10.1.0" + lodash "^4.17.21" + tslib "^2.4.0" + utility-types "^3.10.0" + +"@docusaurus/theme-translations@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-2.4.0.tgz#62dacb7997322f4c5a828b3ab66177ec6769eb33" + integrity sha512-kEoITnPXzDPUMBHk3+fzEzbopxLD3fR5sDoayNH0vXkpUukA88/aDL1bqkhxWZHA3LOfJ3f0vJbOwmnXW5v85Q== + dependencies: + fs-extra "^10.1.0" + tslib "^2.4.0" + +"@docusaurus/types@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-2.4.0.tgz#f94f89a0253778b617c5d40ac6f16b17ec55ce41" + integrity sha512-xaBXr+KIPDkIaef06c+i2HeTqVNixB7yFut5fBXPGI2f1rrmEV2vLMznNGsFwvZ5XmA3Quuefd4OGRkdo97Dhw== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + commander "^5.1.0" + joi "^17.6.0" + react-helmet-async "^1.3.0" + utility-types "^3.10.0" + webpack "^5.73.0" + webpack-merge "^5.8.0" + +"@docusaurus/utils-common@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-2.4.0.tgz#eb2913871860ed32e73858b4c7787dd820c5558d" + integrity sha512-zIMf10xuKxddYfLg5cS19x44zud/E9I7lj3+0bv8UIs0aahpErfNrGhijEfJpAfikhQ8tL3m35nH3hJ3sOG82A== + dependencies: + tslib "^2.4.0" + +"@docusaurus/utils-validation@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-2.4.0.tgz#1ed92bfab5da321c4a4d99cad28a15627091aa90" + integrity sha512-IrBsBbbAp6y7mZdJx4S4pIA7dUyWSA0GNosPk6ZJ0fX3uYIEQgcQSGIgTeSC+8xPEx3c16o03en1jSDpgQgz/w== + dependencies: + "@docusaurus/logger" "2.4.0" + "@docusaurus/utils" "2.4.0" + joi "^17.6.0" + js-yaml "^4.1.0" + tslib "^2.4.0" + +"@docusaurus/utils@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.4.0.tgz#fdf0c3545819e48bb57eafc5057495fd4d50e900" + integrity sha512-89hLYkvtRX92j+C+ERYTuSUK6nF9bGM32QThcHPg2EDDHVw6FzYQXmX6/p+pU5SDyyx5nBlE4qXR92RxCAOqfg== + dependencies: + "@docusaurus/logger" "2.4.0" + "@svgr/webpack" "^6.2.1" + escape-string-regexp "^4.0.0" + file-loader "^6.2.0" + fs-extra "^10.1.0" + github-slugger "^1.4.0" + globby "^11.1.0" + gray-matter "^4.0.3" + js-yaml "^4.1.0" + lodash "^4.17.21" + micromatch "^4.0.5" + resolve-pathname "^3.0.0" + shelljs "^0.8.5" + tslib "^2.4.0" + url-loader "^4.1.1" + webpack "^5.73.0" + +"@hapi/hoek@^9.0.0": + version "9.3.0" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" + integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== + +"@hapi/topo@^5.0.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" + integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@jest/schemas@^29.4.3": + version "29.4.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.3.tgz#39cf1b8469afc40b6f5a2baaa146e332c4151788" + integrity sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg== + dependencies: + "@sinclair/typebox" "^0.25.16" + +"@jest/types@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.5.0.tgz#f59ef9b031ced83047c67032700d8c807d6e1593" + integrity sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog== + dependencies: + "@jest/schemas" "^29.4.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" + integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== + dependencies: + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/source-map@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" + integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.17" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" + integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + +"@leichtgewicht/ip-codec@^2.0.1": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" + integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== + +"@mdx-js/mdx@^1.6.22": + version "1.6.22" + resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-1.6.22.tgz#8a723157bf90e78f17dc0f27995398e6c731f1ba" + integrity sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA== + dependencies: + "@babel/core" "7.12.9" + "@babel/plugin-syntax-jsx" "7.12.1" + "@babel/plugin-syntax-object-rest-spread" "7.8.3" + "@mdx-js/util" "1.6.22" + babel-plugin-apply-mdx-type-prop "1.6.22" + babel-plugin-extract-import-names "1.6.22" + camelcase-css "2.0.1" + detab "2.0.4" + hast-util-raw "6.0.1" + lodash.uniq "4.5.0" + mdast-util-to-hast "10.0.1" + remark-footnotes "2.0.0" + remark-mdx "1.6.22" + remark-parse "8.0.3" + remark-squeeze-paragraphs "4.0.0" + style-to-object "0.3.0" + unified "9.2.0" + unist-builder "2.0.3" + unist-util-visit "2.0.3" + +"@mdx-js/react@^1.6.21", "@mdx-js/react@^1.6.22": + version "1.6.22" + resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.6.22.tgz#ae09b4744fddc74714ee9f9d6f17a66e77c43573" + integrity sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg== + +"@mdx-js/util@1.6.22": + version "1.6.22" + resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.6.22.tgz#219dfd89ae5b97a8801f015323ffa4b62f45718b" + integrity sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@polka/url@^1.0.0-next.20": + version "1.0.0-next.21" + resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" + integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== + +"@rollup/plugin-babel@^6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-6.0.3.tgz#07ccde15de278c581673034ad6accdb4a153dfeb" + integrity sha512-fKImZKppa1A/gX73eg4JGo+8kQr/q1HBQaCGKECZ0v4YBBv3lFqi14+7xyApECzvkLTHCifx+7ntcrvtBIRcpg== + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@rollup/pluginutils" "^5.0.1" + +"@rollup/pluginutils@^5.0.1": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.2.tgz#012b8f53c71e4f6f9cb317e311df1404f56e7a33" + integrity sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA== + dependencies: + "@types/estree" "^1.0.0" + estree-walker "^2.0.2" + picomatch "^2.3.1" + +"@sideway/address@^4.1.3": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" + integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@sideway/formula@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f" + integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== + +"@sideway/pinpoint@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" + integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== + +"@sinclair/typebox@^0.25.16": + version "0.25.24" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718" + integrity sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ== + +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + +"@slorber/static-site-generator-webpack-plugin@^4.0.7": + version "4.0.7" + resolved "https://registry.yarnpkg.com/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz#fc1678bddefab014e2145cbe25b3ce4e1cfc36f3" + integrity sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA== + dependencies: + eval "^0.1.8" + p-map "^4.0.0" + webpack-sources "^3.2.2" + +"@svgr/babel-plugin-add-jsx-attribute@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz#81ef61947bb268eb9d50523446f9c638fb355906" + integrity sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg== + +"@svgr/babel-plugin-add-jsx-attribute@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz#74a5d648bd0347bda99d82409d87b8ca80b9a1ba" + integrity sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ== + +"@svgr/babel-plugin-remove-jsx-attribute@*": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-7.0.0.tgz#91da77a009dc38e8d30da45d9b62ef8736f2d90a" + integrity sha512-iiZaIvb3H/c7d3TH2HBeK91uI2rMhZNwnsIrvd7ZwGLkFw6mmunOCoVnjdYua662MqGFxlN9xTq4fv9hgR4VXQ== + +"@svgr/babel-plugin-remove-jsx-attribute@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz#6b2c770c95c874654fd5e1d5ef475b78a0a962ef" + integrity sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg== + +"@svgr/babel-plugin-remove-jsx-empty-expression@*": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-7.0.0.tgz#5154ff1213509e36ab315974c8c2fd48dafb827b" + integrity sha512-sQQmyo+qegBx8DfFc04PFmIO1FP1MHI1/QEpzcIcclo5OAISsOJPW76ZIs0bDyO/DBSJEa/tDa1W26pVtt0FRw== + +"@svgr/babel-plugin-remove-jsx-empty-expression@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz#25621a8915ed7ad70da6cea3d0a6dbc2ea933efd" + integrity sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA== + +"@svgr/babel-plugin-replace-jsx-attribute-value@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz#0b221fc57f9fcd10e91fe219e2cd0dd03145a897" + integrity sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ== + +"@svgr/babel-plugin-replace-jsx-attribute-value@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz#fb9d22ea26d2bc5e0a44b763d4c46d5d3f596c60" + integrity sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg== + +"@svgr/babel-plugin-svg-dynamic-title@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz#139b546dd0c3186b6e5db4fefc26cb0baea729d7" + integrity sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg== + +"@svgr/babel-plugin-svg-dynamic-title@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz#01b2024a2b53ffaa5efceaa0bf3e1d5a4c520ce4" + integrity sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw== + +"@svgr/babel-plugin-svg-em-dimensions@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz#6543f69526632a133ce5cabab965deeaea2234a0" + integrity sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw== + +"@svgr/babel-plugin-svg-em-dimensions@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz#dd3fa9f5b24eb4f93bcf121c3d40ff5facecb217" + integrity sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA== + +"@svgr/babel-plugin-transform-react-native-svg@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz#00bf9a7a73f1cad3948cdab1f8dfb774750f8c80" + integrity sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q== + +"@svgr/babel-plugin-transform-react-native-svg@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz#1d8e945a03df65b601551097d8f5e34351d3d305" + integrity sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg== + +"@svgr/babel-plugin-transform-svg-component@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz#583a5e2a193e214da2f3afeb0b9e8d3250126b4a" + integrity sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ== + +"@svgr/babel-plugin-transform-svg-component@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz#48620b9e590e25ff95a80f811544218d27f8a250" + integrity sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ== + +"@svgr/babel-preset@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-5.5.0.tgz#8af54f3e0a8add7b1e2b0fcd5a882c55393df327" + integrity sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "^5.4.0" + "@svgr/babel-plugin-remove-jsx-attribute" "^5.4.0" + "@svgr/babel-plugin-remove-jsx-empty-expression" "^5.0.1" + "@svgr/babel-plugin-replace-jsx-attribute-value" "^5.0.1" + "@svgr/babel-plugin-svg-dynamic-title" "^5.4.0" + "@svgr/babel-plugin-svg-em-dimensions" "^5.4.0" + "@svgr/babel-plugin-transform-react-native-svg" "^5.4.0" + "@svgr/babel-plugin-transform-svg-component" "^5.5.0" + +"@svgr/babel-preset@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-6.5.1.tgz#b90de7979c8843c5c580c7e2ec71f024b49eb828" + integrity sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "^6.5.1" + "@svgr/babel-plugin-remove-jsx-attribute" "*" + "@svgr/babel-plugin-remove-jsx-empty-expression" "*" + "@svgr/babel-plugin-replace-jsx-attribute-value" "^6.5.1" + "@svgr/babel-plugin-svg-dynamic-title" "^6.5.1" + "@svgr/babel-plugin-svg-em-dimensions" "^6.5.1" + "@svgr/babel-plugin-transform-react-native-svg" "^6.5.1" + "@svgr/babel-plugin-transform-svg-component" "^6.5.1" + +"@svgr/core@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-5.5.0.tgz#82e826b8715d71083120fe8f2492ec7d7874a579" + integrity sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ== + dependencies: + "@svgr/plugin-jsx" "^5.5.0" + camelcase "^6.2.0" + cosmiconfig "^7.0.0" + +"@svgr/core@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-6.5.1.tgz#d3e8aa9dbe3fbd747f9ee4282c1c77a27410488a" + integrity sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw== + dependencies: + "@babel/core" "^7.19.6" + "@svgr/babel-preset" "^6.5.1" + "@svgr/plugin-jsx" "^6.5.1" + camelcase "^6.2.0" + cosmiconfig "^7.0.1" + +"@svgr/hast-util-to-babel-ast@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz#5ee52a9c2533f73e63f8f22b779f93cd432a5461" + integrity sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ== + dependencies: + "@babel/types" "^7.12.6" + +"@svgr/hast-util-to-babel-ast@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz#81800bd09b5bcdb968bf6ee7c863d2288fdb80d2" + integrity sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw== + dependencies: + "@babel/types" "^7.20.0" + entities "^4.4.0" + +"@svgr/plugin-jsx@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz#1aa8cd798a1db7173ac043466d7b52236b369000" + integrity sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA== + dependencies: + "@babel/core" "^7.12.3" + "@svgr/babel-preset" "^5.5.0" + "@svgr/hast-util-to-babel-ast" "^5.5.0" + svg-parser "^2.0.2" + +"@svgr/plugin-jsx@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz#0e30d1878e771ca753c94e69581c7971542a7072" + integrity sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw== + dependencies: + "@babel/core" "^7.19.6" + "@svgr/babel-preset" "^6.5.1" + "@svgr/hast-util-to-babel-ast" "^6.5.1" + svg-parser "^2.0.4" + +"@svgr/plugin-svgo@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz#02da55d85320549324e201c7b2e53bf431fcc246" + integrity sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ== + dependencies: + cosmiconfig "^7.0.0" + deepmerge "^4.2.2" + svgo "^1.2.2" + +"@svgr/plugin-svgo@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz#0f91910e988fc0b842f88e0960c2862e022abe84" + integrity sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ== + dependencies: + cosmiconfig "^7.0.1" + deepmerge "^4.2.2" + svgo "^2.8.0" + +"@svgr/webpack@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-5.5.0.tgz#aae858ee579f5fa8ce6c3166ef56c6a1b381b640" + integrity sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g== + dependencies: + "@babel/core" "^7.12.3" + "@babel/plugin-transform-react-constant-elements" "^7.12.1" + "@babel/preset-env" "^7.12.1" + "@babel/preset-react" "^7.12.5" + "@svgr/core" "^5.5.0" + "@svgr/plugin-jsx" "^5.5.0" + "@svgr/plugin-svgo" "^5.5.0" + loader-utils "^2.0.0" + +"@svgr/webpack@^6.2.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-6.5.1.tgz#ecf027814fc1cb2decc29dc92f39c3cf691e40e8" + integrity sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA== + dependencies: + "@babel/core" "^7.19.6" + "@babel/plugin-transform-react-constant-elements" "^7.18.12" + "@babel/preset-env" "^7.19.4" + "@babel/preset-react" "^7.18.6" + "@babel/preset-typescript" "^7.18.6" + "@svgr/core" "^6.5.1" + "@svgr/plugin-jsx" "^6.5.1" + "@svgr/plugin-svgo" "^6.5.1" + +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + +"@trysound/sax@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" + integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== + +"@types/body-parser@*": + version "1.19.2" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" + integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/bonjour@^3.5.9": + version "3.5.10" + resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.10.tgz#0f6aadfe00ea414edc86f5d106357cda9701e275" + integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw== + dependencies: + "@types/node" "*" + +"@types/connect-history-api-fallback@^1.3.5": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae" + integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw== + dependencies: + "@types/express-serve-static-core" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.35" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" + integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + dependencies: + "@types/node" "*" + +"@types/eslint-scope@^3.7.3": + version "3.7.4" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" + integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "8.37.0" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.37.0.tgz#29cebc6c2a3ac7fea7113207bf5a828fdf4d7ef1" + integrity sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*", "@types/estree@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" + integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== + +"@types/estree@^0.0.51": + version "0.0.51" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" + integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== + +"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": + version "4.17.33" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz#de35d30a9d637dc1450ad18dd583d75d5733d543" + integrity sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express@*", "@types/express@^4.17.13": + version "4.17.17" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4" + integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.33" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/hast@^2.0.0": + version "2.3.4" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.4.tgz#8aa5ef92c117d20d974a82bdfb6a648b08c0bafc" + integrity sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g== + dependencies: + "@types/unist" "*" + +"@types/history@^4.7.11": + version "4.7.11" + resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.11.tgz#56588b17ae8f50c53983a524fc3cc47437969d64" + integrity sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA== + +"@types/html-minifier-terser@^6.0.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" + integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== + +"@types/http-proxy@^1.17.8": + version "1.17.10" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.10.tgz#e576c8e4a0cc5c6a138819025a88e167ebb38d6c" + integrity sha512-Qs5aULi+zV1bwKAg5z1PWnDXWmsn+LxIvUGv6E2+OOMYhclZMO+OXd9pYVf2gLykf2I7IV2u7oTHwChPNsvJ7g== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@types/mdast@^3.0.0": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.11.tgz#dc130f7e7d9306124286f6d6cee40cf4d14a3dc0" + integrity sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw== + dependencies: + "@types/unist" "*" + +"@types/mime@*": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" + integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== + +"@types/minimatch@^3.0.3": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== + +"@types/node@*": + version "18.15.11" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.11.tgz#b3b790f09cb1696cffcec605de025b088fa4225f" + integrity sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q== + +"@types/node@^17.0.5": + version "17.0.45" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" + integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + +"@types/parse5@^5.0.0": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-5.0.3.tgz#e7b5aebbac150f8b5fdd4a46e7f0bd8e65e19109" + integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw== + +"@types/prop-types@*": + version "15.7.5" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" + integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== + +"@types/q@^1.5.1": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df" + integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ== + +"@types/qs@*": + version "6.9.7" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + +"@types/range-parser@*": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" + integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== + +"@types/react-router-config@*", "@types/react-router-config@^5.0.6": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@types/react-router-config/-/react-router-config-5.0.6.tgz#87c5c57e72d241db900d9734512c50ccec062451" + integrity sha512-db1mx37a1EJDf1XeX8jJN7R3PZABmJQXR8r28yUjVMFSjkmnQo6X6pOEEmNl+Tp2gYQOGPdYbFIipBtdElZ3Yg== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router" "*" + +"@types/react-router-dom@*": + version "5.3.3" + resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.3.tgz#e9d6b4a66fcdbd651a5f106c2656a30088cc1e83" + integrity sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router" "*" + +"@types/react-router@*": + version "5.1.20" + resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.20.tgz#88eccaa122a82405ef3efbcaaa5dcdd9f021387c" + integrity sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + +"@types/react@*": + version "18.0.33" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.33.tgz#a1575160cb4376787c2f5fe0312302f824baa61e" + integrity sha512-sHxzVxeanvQyQ1lr8NSHaj0kDzcNiGpILEVt69g9S31/7PfMvNCKLKcsHw4lYKjs3cGNJjXSP4mYzX43QlnjNA== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + +"@types/retry@0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" + integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== + +"@types/sax@^1.2.1": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/sax/-/sax-1.2.4.tgz#8221affa7f4f3cb21abd22f244cfabfa63e6a69e" + integrity sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw== + dependencies: + "@types/node" "*" + +"@types/scheduler@*": + version "0.16.3" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5" + integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== + +"@types/serve-index@^1.9.1": + version "1.9.1" + resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" + integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg== + dependencies: + "@types/express" "*" + +"@types/serve-static@*", "@types/serve-static@^1.13.10": + version "1.15.1" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.1.tgz#86b1753f0be4f9a1bee68d459fcda5be4ea52b5d" + integrity sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ== + dependencies: + "@types/mime" "*" + "@types/node" "*" + +"@types/sockjs@^0.3.33": + version "0.3.33" + resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f" + integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw== + dependencies: + "@types/node" "*" + +"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" + integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== + +"@types/ws@^8.5.1": + version "8.5.4" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.4.tgz#bb10e36116d6e570dd943735f86c933c1587b8a5" + integrity sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg== + dependencies: + "@types/node" "*" + +"@types/yargs-parser@*": + version "21.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" + integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== + +"@types/yargs@^17.0.8": + version "17.0.24" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.24.tgz#b3ef8d50ad4aa6aecf6ddc97c580a00f5aa11902" + integrity sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw== + dependencies: + "@types/yargs-parser" "*" + +"@webassemblyjs/ast@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" + integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + +"@webassemblyjs/floating-point-hex-parser@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" + integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== + +"@webassemblyjs/helper-api-error@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" + integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== + +"@webassemblyjs/helper-buffer@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" + integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== + +"@webassemblyjs/helper-numbers@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" + integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" + integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== + +"@webassemblyjs/helper-wasm-section@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" + integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + +"@webassemblyjs/ieee754@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" + integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" + integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" + integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== + +"@webassemblyjs/wasm-edit@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" + integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/helper-wasm-section" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-opt" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + "@webassemblyjs/wast-printer" "1.11.1" + +"@webassemblyjs/wasm-gen@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" + integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wasm-opt@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" + integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + +"@webassemblyjs/wasm-parser@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" + integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wast-printer@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" + integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-import-assertions@^1.7.6: + version "1.8.0" + resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" + integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== + +acorn-walk@^8.0.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^8.0.4, acorn@^8.5.0, acorn@^8.7.1: + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + +address@^1.0.1, address@^1.1.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e" + integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA== + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + +ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv-keywords@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" + integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== + dependencies: + fast-deep-equal "^3.1.3" + +ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.0, ajv@^8.8.0: + version "8.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +algoliasearch-helper@^3.10.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.12.0.tgz#0fe39d49b0290e4aa5e1fe733bd24d857d258e94" + integrity sha512-/j1U3PEwdan0n6P/QqSnSpNSLC5+cEMvyljd5CnmNmUjDlGrys+vFEOwjVEnqELIiAGMHEA/Nl3CiKVFBUYqyQ== + dependencies: + "@algolia/events" "^4.0.1" + +algoliasearch@^4.0.0, algoliasearch@^4.13.1: + version "4.17.0" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.17.0.tgz#46ed58b2b99509d041f11cd1ea83623edf84355f" + integrity sha512-JMRh2Mw6sEnVMiz6+APsi7lx9a2jiDFF+WUtANaUVCv6uSU9UOLdo5h9K3pdP6frRRybaM2fX8b1u0nqICS9aA== + dependencies: + "@algolia/cache-browser-local-storage" "4.17.0" + "@algolia/cache-common" "4.17.0" + "@algolia/cache-in-memory" "4.17.0" + "@algolia/client-account" "4.17.0" + "@algolia/client-analytics" "4.17.0" + "@algolia/client-common" "4.17.0" + "@algolia/client-personalization" "4.17.0" + "@algolia/client-search" "4.17.0" + "@algolia/logger-common" "4.17.0" + "@algolia/logger-console" "4.17.0" + "@algolia/requester-browser-xhr" "4.17.0" + "@algolia/requester-common" "4.17.0" + "@algolia/requester-node-http" "4.17.0" + "@algolia/transporter" "4.17.0" + +ansi-align@^3.0.0, ansi-align@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" + integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== + dependencies: + string-width "^4.1.0" + +ansi-html-community@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" + integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + +array-differ@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" + integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +array-flatten@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.reduce@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz#6b20b0daa9d9734dd6bc7ea66b5bbce395471eac" + integrity sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-array-method-boxes-properly "^1.0.0" + is-string "^1.0.7" + +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +autoprefixer@^10.4.12, autoprefixer@^10.4.7: + version "10.4.14" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.14.tgz#e28d49902f8e759dd25b153264e862df2705f79d" + integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ== + dependencies: + browserslist "^4.21.5" + caniuse-lite "^1.0.30001464" + fraction.js "^4.2.0" + normalize-range "^0.1.2" + picocolors "^1.0.0" + postcss-value-parser "^4.2.0" + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +axios@^0.25.0: + version "0.25.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.25.0.tgz#349cfbb31331a9b4453190791760a8d35b093e0a" + integrity sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g== + dependencies: + follow-redirects "^1.14.7" + +babel-loader@^8.2.5: + version "8.3.0" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.3.0.tgz#124936e841ba4fe8176786d6ff28add1f134d6a8" + integrity sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q== + dependencies: + find-cache-dir "^3.3.1" + loader-utils "^2.0.0" + make-dir "^3.1.0" + schema-utils "^2.6.5" + +babel-plugin-apply-mdx-type-prop@1.6.22: + version "1.6.22" + resolved "https://registry.yarnpkg.com/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz#d216e8fd0de91de3f1478ef3231e05446bc8705b" + integrity sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ== + dependencies: + "@babel/helper-plugin-utils" "7.10.4" + "@mdx-js/util" "1.6.22" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-extract-import-names@1.6.22: + version "1.6.22" + resolved "https://registry.yarnpkg.com/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz#de5f9a28eb12f3eb2578bf74472204e66d1a13dc" + integrity sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ== + dependencies: + "@babel/helper-plugin-utils" "7.10.4" + +babel-plugin-polyfill-corejs2@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122" + integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== + dependencies: + "@babel/compat-data" "^7.17.7" + "@babel/helper-define-polyfill-provider" "^0.3.3" + semver "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz#56ad88237137eade485a71b52f72dbed57c6230a" + integrity sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.3" + core-js-compat "^3.25.1" + +babel-plugin-polyfill-regenerator@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz#390f91c38d90473592ed43351e801a9d3e0fd747" + integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.3" + +bail@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" + integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base16@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" + integrity sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ== + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +body-parser@1.20.1: + version "1.20.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" + integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + 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" + +bonjour-service@^1.0.11: + version "1.1.1" + resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.1.1.tgz#960948fa0e0153f5d26743ab15baf8e33752c135" + integrity sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg== + 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, boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +boxen@^5.0.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" + integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^6.2.0" + chalk "^4.1.0" + cli-boxes "^2.2.1" + string-width "^4.2.2" + type-fest "^0.20.2" + widest-line "^3.1.0" + wrap-ansi "^7.0.0" + +boxen@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-6.2.1.tgz#b098a2278b2cd2845deef2dff2efc38d329b434d" + integrity sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw== + dependencies: + ansi-align "^3.0.1" + camelcase "^6.2.0" + chalk "^4.1.2" + cli-boxes "^3.0.0" + string-width "^5.0.1" + type-fest "^2.5.0" + widest-line "^4.0.1" + wrap-ansi "^8.0.1" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5: + version "4.21.5" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" + integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== + dependencies: + caniuse-lite "^1.0.30001449" + electron-to-chromium "^1.4.284" + node-releases "^2.0.8" + update-browserslist-db "^1.0.10" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camel-case@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + +camelcase-css@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + +camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001464: + version "1.0.30001474" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001474.tgz#13b6fe301a831fe666cce8ca4ef89352334133d5" + integrity sha512-iaIZ8gVrWfemh5DG3T9/YqarVZoYf0r188IjaGwx68j4Pf0SGY6CQkmJUIE+NZHkkecQGohzXmBGEwWDr9aM3Q== + +ccount@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043" + integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== + +chalk@^2.0.0, chalk@^2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +character-entities-legacy@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" + integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== + +character-entities@^1.0.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" + integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== + +character-reference-invalid@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" + integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== + +cheerio-select@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" + integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== + 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: + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" + integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== + dependencies: + cheerio-select "^2.1.0" + dom-serializer "^2.0.0" + domhandler "^5.0.3" + domutils "^3.0.1" + htmlparser2 "^8.0.1" + parse5 "^7.0.0" + parse5-htmlparser2-tree-adapter "^7.0.0" + +chokidar@^3.4.2, chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +ci-info@^3.2.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" + integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== + +clean-css@^5.2.2, clean-css@^5.3.0: + version "5.3.2" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.2.tgz#70ecc7d4d4114921f5d298349ff86a31a9975224" + integrity sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww== + dependencies: + source-map "~0.6.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-boxes@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + +cli-boxes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-3.0.0.tgz#71a10c716feeba005e4504f36329ef0b17cf3145" + integrity sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g== + +cli-table3@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" + integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== + dependencies: + string-width "^4.2.0" + optionalDependencies: + "@colors/colors" "1.5.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + +clsx@^1.1.1, clsx@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" + integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== + +coa@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" + integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== + dependencies: + "@types/q" "^1.5.1" + chalk "^2.4.1" + q "^1.1.2" + +collapse-white-space@^1.0.2: + version "1.0.6" + resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" + integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colord@^2.9.1: + version "2.9.3" + resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" + integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== + +colorette@^2.0.10: + version "2.0.19" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" + integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== + +combine-promises@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/combine-promises/-/combine-promises-1.1.0.tgz#72db90743c0ca7aab7d0d8d2052fd7b0f674de71" + integrity sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg== + +comma-separated-tokens@^1.0.0: + version "1.0.8" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" + integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== + +commander@7, commander@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== + +commander@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +configstore@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" + integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== + dependencies: + dot-prop "^5.2.0" + graceful-fs "^4.1.2" + make-dir "^3.0.0" + unique-string "^2.0.0" + write-file-atomic "^3.0.0" + xdg-basedir "^4.0.0" + +connect-history-api-fallback@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" + integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== + +consola@^2.15.3: + version "2.15.3" + resolved "https://registry.yarnpkg.com/consola/-/consola-2.15.3.tgz#2e11f98d6a4be71ff72e0bdf07bd23e12cb61550" + integrity sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw== + +content-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + integrity sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA== + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +convert-source-map@^1.7.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +copy-text-to-clipboard@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.1.0.tgz#6bf40deef0a51ac6858efb0d76ded2c6d6a15059" + integrity sha512-PFM6BnjLnOON/lB3ta/Jg7Ywsv+l9kQGD4TWDCSlRBGmqnnTM5MrDkhAFgw+8HZt0wW6Q2BBE4cmy9sq+s9Qng== + +copy-webpack-plugin@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz#96d4dbdb5f73d02dd72d0528d1958721ab72e04a" + integrity sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ== + dependencies: + fast-glob "^3.2.11" + glob-parent "^6.0.1" + globby "^13.1.1" + normalize-path "^3.0.0" + schema-utils "^4.0.0" + serialize-javascript "^6.0.0" + +core-js-compat@^3.25.1: + version "3.30.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.30.0.tgz#99aa2789f6ed2debfa1df3232784126ee97f4d80" + integrity sha512-P5A2h/9mRYZFIAP+5Ab8ns6083IyVpSclU74UNvbGVQ8VM7n3n3/g2yF3AkKQ9NXz2O+ioxLbEWKnDtgsFamhg== + dependencies: + browserslist "^4.21.5" + +core-js-pure@^3.25.1: + version "3.30.0" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.30.0.tgz#41b6c42e5f363bd53d79999bd35093b17e42e1bf" + integrity sha512-+2KbMFGeBU0ln/csoPqTe0i/yfHbrd2EUhNMObsGtXMKS/RTtlkYyi+/3twLcevbgNR0yM/r0Psa3TEoQRpFMQ== + +core-js@^3.23.3: + version "3.30.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.30.0.tgz#64ac6f83bc7a49fd42807327051701d4b1478dea" + integrity sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cose-base@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/cose-base/-/cose-base-1.0.3.tgz#650334b41b869578a543358b80cda7e0abe0a60a" + integrity sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg== + dependencies: + layout-base "^1.0.0" + +cose-base@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cose-base/-/cose-base-2.2.0.tgz#1c395c35b6e10bb83f9769ca8b817d614add5c01" + integrity sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g== + dependencies: + layout-base "^2.0.0" + +cosmiconfig-typescript-loader@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.3.0.tgz#c4259ce474c9df0f32274ed162c0447c951ef073" + integrity sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q== + +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" + +cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" + integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +cosmiconfig@^8.1.3: + version "8.1.3" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.1.3.tgz#0e614a118fcc2d9e5afc2f87d53cd09931015689" + integrity sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw== + dependencies: + import-fresh "^3.2.1" + js-yaml "^4.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + +countup.js@^2.5.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/countup.js/-/countup.js-2.6.0.tgz#db25f37653c5ee996b4dfa03d1ab2f430c903fd1" + integrity sha512-GeORCrCcaFUHP3RNf0/dWK+XQX+fsdtrMO31mNvsbKXNNG+DMTcgZ4dWpIG9BnOS8t5+iJbaRXgaaG9oLs0N4g== + +cross-fetch@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" + integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== + dependencies: + node-fetch "2.6.7" + +cross-spawn@^7.0.0, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + +css-declaration-sorter@^6.3.1: + version "6.4.0" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz#630618adc21724484b3e9505bce812def44000ad" + integrity sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew== + +css-loader@^6.7.1: + version "6.7.3" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.7.3.tgz#1e8799f3ccc5874fdd55461af51137fcc5befbcd" + integrity sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ== + dependencies: + icss-utils "^5.1.0" + postcss "^8.4.19" + postcss-modules-extract-imports "^3.0.0" + postcss-modules-local-by-default "^4.0.0" + postcss-modules-scope "^3.0.0" + postcss-modules-values "^4.0.0" + postcss-value-parser "^4.2.0" + semver "^7.3.8" + +css-minimizer-webpack-plugin@^4.0.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.2.tgz#79f6199eb5adf1ff7ba57f105e3752d15211eb35" + integrity sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA== + dependencies: + cssnano "^5.1.8" + jest-worker "^29.1.2" + postcss "^8.4.17" + schema-utils "^4.0.0" + serialize-javascript "^6.0.0" + source-map "^0.6.1" + +css-select-base-adapter@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" + integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== + +css-select@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" + integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== + dependencies: + boolbase "^1.0.0" + css-what "^3.2.1" + domutils "^1.7.0" + nth-check "^1.0.2" + +css-select@^4.1.3: + version "4.3.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" + integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== + dependencies: + boolbase "^1.0.0" + css-what "^6.0.1" + domhandler "^4.3.1" + domutils "^2.8.0" + nth-check "^2.0.1" + +css-select@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" + integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== + dependencies: + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" + +css-tree@1.0.0-alpha.37: + version "1.0.0-alpha.37" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" + integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== + dependencies: + mdn-data "2.0.4" + source-map "^0.6.1" + +css-tree@^1.1.2, css-tree@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" + integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + +css-what@^3.2.1: + version "3.4.2" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" + integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== + +css-what@^6.0.1, css-what@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-advanced@^5.3.8: + version "5.3.10" + resolved "https://registry.yarnpkg.com/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.10.tgz#25558a1fbf3a871fb6429ce71e41be7f5aca6eef" + integrity sha512-fnYJyCS9jgMU+cmHO1rPSPf9axbQyD7iUhLO5Df6O4G+fKIOMps+ZbU0PdGFejFBBZ3Pftf18fn1eG7MAPUSWQ== + dependencies: + autoprefixer "^10.4.12" + cssnano-preset-default "^5.2.14" + postcss-discard-unused "^5.1.0" + postcss-merge-idents "^5.1.1" + postcss-reduce-idents "^5.2.0" + postcss-zindex "^5.1.0" + +cssnano-preset-default@^5.2.14: + version "5.2.14" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz#309def4f7b7e16d71ab2438052093330d9ab45d8" + integrity sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A== + dependencies: + css-declaration-sorter "^6.3.1" + cssnano-utils "^3.1.0" + postcss-calc "^8.2.3" + postcss-colormin "^5.3.1" + postcss-convert-values "^5.1.3" + postcss-discard-comments "^5.1.2" + postcss-discard-duplicates "^5.1.0" + postcss-discard-empty "^5.1.1" + postcss-discard-overridden "^5.1.0" + postcss-merge-longhand "^5.1.7" + postcss-merge-rules "^5.1.4" + postcss-minify-font-values "^5.1.0" + postcss-minify-gradients "^5.1.1" + postcss-minify-params "^5.1.4" + postcss-minify-selectors "^5.2.1" + postcss-normalize-charset "^5.1.0" + postcss-normalize-display-values "^5.1.0" + postcss-normalize-positions "^5.1.1" + postcss-normalize-repeat-style "^5.1.1" + postcss-normalize-string "^5.1.0" + postcss-normalize-timing-functions "^5.1.0" + postcss-normalize-unicode "^5.1.1" + postcss-normalize-url "^5.1.0" + postcss-normalize-whitespace "^5.1.1" + postcss-ordered-values "^5.1.3" + postcss-reduce-initial "^5.1.2" + postcss-reduce-transforms "^5.1.0" + postcss-svgo "^5.1.0" + postcss-unique-selectors "^5.1.1" + +cssnano-utils@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861" + integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== + +cssnano@^5.1.12, cssnano@^5.1.8: + version "5.1.15" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.15.tgz#ded66b5480d5127fcb44dac12ea5a983755136bf" + integrity sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw== + dependencies: + cssnano-preset-default "^5.2.14" + lilconfig "^2.0.3" + yaml "^1.10.2" + +csso@^4.0.2, csso@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" + integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== + dependencies: + css-tree "^1.1.2" + +csstype@^3.0.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" + integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== + +cytoscape-cose-bilkent@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz#762fa121df9930ffeb51a495d87917c570ac209b" + integrity sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ== + dependencies: + cose-base "^1.0.0" + +cytoscape-fcose@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz#e4d6f6490df4fab58ae9cea9e5c3ab8d7472f471" + integrity sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ== + dependencies: + cose-base "^2.2.0" + +cytoscape@^3.23.0: + version "3.23.0" + resolved "https://registry.yarnpkg.com/cytoscape/-/cytoscape-3.23.0.tgz#054ee05a6d0aa3b4f139382bbf2f4e5226df3c6d" + integrity sha512-gRZqJj/1kiAVPkrVFvz/GccxsXhF3Qwpptl32gKKypO4IlqnKBjTOu+HbXtEggSGzC5KCaHp3/F7GgENrtsFkA== + dependencies: + heap "^0.2.6" + lodash "^4.17.21" + +"d3-array@2 - 3", "d3-array@2.10.0 - 3", "d3-array@2.5.0 - 3", d3-array@3, d3-array@^3.2.0: + version "3.2.3" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-3.2.3.tgz#39f1f4954e4a09ff69ac597c2d61906b04e84740" + integrity sha512-JRHwbQQ84XuAESWhvIPaUV4/1UYTBOLiOPGWqgFDHZS1D5QN9c57FbH3QpEnQMYiOXNzKUQyGTZf+EVO7RT5TQ== + dependencies: + internmap "1 - 2" + +d3-axis@3: + version "3.0.0" + resolved "https://registry.yarnpkg.com/d3-axis/-/d3-axis-3.0.0.tgz#c42a4a13e8131d637b745fc2973824cfeaf93322" + integrity sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw== + +d3-brush@3: + version "3.0.0" + resolved "https://registry.yarnpkg.com/d3-brush/-/d3-brush-3.0.0.tgz#6f767c4ed8dcb79de7ede3e1c0f89e63ef64d31c" + integrity sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ== + dependencies: + d3-dispatch "1 - 3" + d3-drag "2 - 3" + d3-interpolate "1 - 3" + d3-selection "3" + d3-transition "3" + +d3-chord@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-chord/-/d3-chord-3.0.1.tgz#d156d61f485fce8327e6abf339cb41d8cbba6966" + integrity sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g== + dependencies: + d3-path "1 - 3" + +"d3-color@1 - 3", d3-color@3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-3.1.0.tgz#395b2833dfac71507f12ac2f7af23bf819de24e2" + integrity sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA== + +d3-contour@4: + version "4.0.2" + resolved "https://registry.yarnpkg.com/d3-contour/-/d3-contour-4.0.2.tgz#bb92063bc8c5663acb2422f99c73cbb6c6ae3bcc" + integrity sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA== + dependencies: + d3-array "^3.2.0" + +d3-delaunay@6: + version "6.0.4" + resolved "https://registry.yarnpkg.com/d3-delaunay/-/d3-delaunay-6.0.4.tgz#98169038733a0a5babbeda55054f795bb9e4a58b" + integrity sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A== + dependencies: + delaunator "5" + +"d3-dispatch@1 - 3", d3-dispatch@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-3.0.1.tgz#5fc75284e9c2375c36c839411a0cf550cbfc4d5e" + integrity sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg== + +"d3-drag@2 - 3", d3-drag@3: + version "3.0.0" + resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-3.0.0.tgz#994aae9cd23c719f53b5e10e3a0a6108c69607ba" + integrity sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg== + dependencies: + d3-dispatch "1 - 3" + d3-selection "3" + +"d3-dsv@1 - 3", d3-dsv@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-3.0.1.tgz#c63af978f4d6a0d084a52a673922be2160789b73" + integrity sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q== + dependencies: + commander "7" + iconv-lite "0.6" + rw "1" + +"d3-ease@1 - 3", d3-ease@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-3.0.1.tgz#9658ac38a2140d59d346160f1f6c30fda0bd12f4" + integrity sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w== + +d3-fetch@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-fetch/-/d3-fetch-3.0.1.tgz#83141bff9856a0edb5e38de89cdcfe63d0a60a22" + integrity sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw== + dependencies: + d3-dsv "1 - 3" + +d3-force@3: + version "3.0.0" + resolved "https://registry.yarnpkg.com/d3-force/-/d3-force-3.0.0.tgz#3e2ba1a61e70888fe3d9194e30d6d14eece155c4" + integrity sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg== + dependencies: + d3-dispatch "1 - 3" + d3-quadtree "1 - 3" + d3-timer "1 - 3" + +"d3-format@1 - 3", d3-format@3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-3.1.0.tgz#9260e23a28ea5cb109e93b21a06e24e2ebd55641" + integrity sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA== + +d3-geo@3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-3.1.0.tgz#74fd54e1f4cebd5185ac2039217a98d39b0a4c0e" + integrity sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA== + dependencies: + d3-array "2.5.0 - 3" + +d3-hierarchy@3: + version "3.1.2" + resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz#b01cd42c1eed3d46db77a5966cf726f8c09160c6" + integrity sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA== + +"d3-interpolate@1 - 3", "d3-interpolate@1.2.0 - 3", d3-interpolate@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz#3c47aa5b32c5b3dfb56ef3fd4342078a632b400d" + integrity sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g== + dependencies: + d3-color "1 - 3" + +"d3-path@1 - 3", d3-path@3, d3-path@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-3.1.0.tgz#22df939032fb5a71ae8b1800d61ddb7851c42526" + integrity sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ== + +d3-polygon@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-polygon/-/d3-polygon-3.0.1.tgz#0b45d3dd1c48a29c8e057e6135693ec80bf16398" + integrity sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg== + +"d3-quadtree@1 - 3", d3-quadtree@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-quadtree/-/d3-quadtree-3.0.1.tgz#6dca3e8be2b393c9a9d514dabbd80a92deef1a4f" + integrity sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw== + +d3-random@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-random/-/d3-random-3.0.1.tgz#d4926378d333d9c0bfd1e6fa0194d30aebaa20f4" + integrity sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ== + +d3-scale-chromatic@3: + version "3.0.0" + resolved "https://registry.yarnpkg.com/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz#15b4ceb8ca2bb0dcb6d1a641ee03d59c3b62376a" + integrity sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g== + dependencies: + d3-color "1 - 3" + d3-interpolate "1 - 3" + +d3-scale@4: + version "4.0.2" + resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-4.0.2.tgz#82b38e8e8ff7080764f8dcec77bd4be393689396" + integrity sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ== + dependencies: + d3-array "2.10.0 - 3" + d3-format "1 - 3" + d3-interpolate "1.2.0 - 3" + d3-time "2.1.1 - 3" + d3-time-format "2 - 4" + +"d3-selection@2 - 3", d3-selection@3: + version "3.0.0" + resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-3.0.0.tgz#c25338207efa72cc5b9bd1458a1a41901f1e1b31" + integrity sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ== + +d3-shape@3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-3.2.0.tgz#a1a839cbd9ba45f28674c69d7f855bcf91dfc6a5" + integrity sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA== + dependencies: + d3-path "^3.1.0" + +"d3-time-format@2 - 4", d3-time-format@4: + version "4.1.0" + resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-4.1.0.tgz#7ab5257a5041d11ecb4fe70a5c7d16a195bb408a" + integrity sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg== + dependencies: + d3-time "1 - 3" + +"d3-time@1 - 3", "d3-time@2.1.1 - 3", d3-time@3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-3.1.0.tgz#9310db56e992e3c0175e1ef385e545e48a9bb5c7" + integrity sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q== + dependencies: + d3-array "2 - 3" + +"d3-timer@1 - 3", d3-timer@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-3.0.1.tgz#6284d2a2708285b1abb7e201eda4380af35e63b0" + integrity sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA== + +"d3-transition@2 - 3", d3-transition@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-3.0.1.tgz#6869fdde1448868077fdd5989200cb61b2a1645f" + integrity sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w== + dependencies: + d3-color "1 - 3" + d3-dispatch "1 - 3" + d3-ease "1 - 3" + d3-interpolate "1 - 3" + d3-timer "1 - 3" + +d3-zoom@3: + version "3.0.0" + resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-3.0.0.tgz#d13f4165c73217ffeaa54295cd6969b3e7aee8f3" + integrity sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw== + dependencies: + d3-dispatch "1 - 3" + d3-drag "2 - 3" + d3-interpolate "1 - 3" + d3-selection "2 - 3" + d3-transition "2 - 3" + +d3@^7.4.0, d3@^7.8.2: + version "7.8.4" + resolved "https://registry.yarnpkg.com/d3/-/d3-7.8.4.tgz#e35d45800e4068cab07e59e5d883a4bb42ab217f" + integrity sha512-q2WHStdhiBtD8DMmhDPyJmXUxr6VWRngKyiJ5EfXMxPw+tqT6BhNjhJZ4w3BHsNm3QoVfZLY8Orq/qPFczwKRA== + dependencies: + d3-array "3" + d3-axis "3" + d3-brush "3" + d3-chord "3" + d3-color "3" + d3-contour "4" + d3-delaunay "6" + d3-dispatch "3" + d3-drag "3" + d3-dsv "3" + d3-ease "3" + d3-fetch "3" + d3-force "3" + d3-format "3" + d3-geo "3" + d3-hierarchy "3" + d3-interpolate "3" + d3-path "3" + d3-polygon "3" + d3-quadtree "3" + d3-random "3" + d3-scale "4" + d3-scale-chromatic "3" + d3-selection "3" + d3-shape "3" + d3-time "3" + d3-time-format "4" + d3-timer "3" + d3-transition "3" + d3-zoom "3" + +dagre-d3-es@7.0.9: + version "7.0.9" + resolved "https://registry.yarnpkg.com/dagre-d3-es/-/dagre-d3-es-7.0.9.tgz#aca12fccd9d09955a4430029ba72ee6934542a8d" + integrity sha512-rYR4QfVmy+sR44IBDvVtcAmOReGBvRCWDpO2QjYwqgh9yijw6eSHBqaPG/LIOEy7aBsniLvtMW6pg19qJhq60w== + dependencies: + d3 "^7.8.2" + lodash-es "^4.17.21" + +dayjs@^1.11.7: + version "1.11.7" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.7.tgz#4b296922642f70999544d1144a2c25730fce63e2" + integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ== + +debug@2.6.9, debug@^2.6.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4, debug@^4.1.0, debug@^4.1.1: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== + dependencies: + mimic-response "^1.0.0" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +default-gateway@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" + integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== + dependencies: + execa "^5.0.0" + +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.3, define-properties@^1.1.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" + integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +del@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" + integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg== + dependencies: + globby "^11.0.1" + graceful-fs "^4.2.4" + is-glob "^4.0.1" + is-path-cwd "^2.2.0" + is-path-inside "^3.0.2" + p-map "^4.0.0" + rimraf "^3.0.2" + slash "^3.0.0" + +delaunator@5: + version "5.0.0" + resolved "https://registry.yarnpkg.com/delaunator/-/delaunator-5.0.0.tgz#60f052b28bd91c9b4566850ebf7756efe821d81b" + integrity sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw== + dependencies: + robust-predicates "^3.0.0" + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detab@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detab/-/detab-2.0.4.tgz#b927892069aff405fbb9a186fe97a44a92a94b43" + integrity sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g== + dependencies: + repeat-string "^1.5.4" + +detect-node@^2.0.4: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + +detect-port-alt@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" + integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== + dependencies: + address "^1.0.1" + debug "^2.6.0" + +detect-port@^1.3.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.5.1.tgz#451ca9b6eaf20451acb0799b8ab40dff7718727b" + integrity sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ== + dependencies: + address "^1.0.1" + debug "4" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== + +dns-packet@^5.2.2: + version "5.5.0" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.5.0.tgz#f59cbf3396c130957c56a6ad5fd3959ccdc30065" + integrity sha512-USawdAUzRkV6xrqTjiAEp6M9YagZEzWcSUaZTcIFAiyQWW1SoI6KyId8y2+/71wbgHKQAKd+iupLv4YvEwYWvA== + dependencies: + "@leichtgewicht/ip-codec" "^2.0.1" + +dom-converter@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-serializer@0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +dom-serializer@^1.0.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +domelementtype@1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== + dependencies: + domelementtype "^2.2.0" + +domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +dompurify@2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.4.3.tgz#f4133af0e6a50297fc8874e2eaedc13a3c308c03" + integrity sha512-q6QaLcakcRjebxjg8/+NP+h0rPfatOgOzc46Fst9VAA3jF2ApfKBNKMzdP4DYTqtUMXSCd5pRS/8Po/OmoCHZQ== + +domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^2.5.2, domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +domutils@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c" + integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.1" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +dot-prop@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +duplexer3@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" + integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== + +duplexer@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +electron-to-chromium@^1.4.284: + version "1.4.352" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.352.tgz#be96bd7c2f4b980deebc9338a49a67430a33ed73" + integrity sha512-ikFUEyu5/q+wJpMOxWxTaEVk2M1qKqTGKKyfJmod1CPZxKfYnxVS41/GCBQg21ItBpZybyN8sNpRqCUGm+Zc4Q== + +elkjs@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/elkjs/-/elkjs-0.8.2.tgz#c37763c5a3e24e042e318455e0147c912a7c248e" + integrity sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +emoticon@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/emoticon/-/emoticon-3.2.0.tgz#c008ca7d7620fac742fe1bf4af8ff8fed154ae7f" + integrity sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@^5.10.0: + version "5.12.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634" + integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +entities@^4.2.0, entities@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174" + integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.20.4: + version "1.21.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff" + integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg== + dependencies: + array-buffer-byte-length "^1.0.0" + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.2.0" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.10" + is-weakref "^1.0.2" + object-inspect "^1.12.3" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.7" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.9" + +es-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + +es-module-lexer@^0.9.0: + version "0.9.3" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" + integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== + +es-set-tostringtag@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" + integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + has-tostringtag "^1.0.0" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-goat@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" + integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== + +escape-html@^1.0.3, escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-scope@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +estree-walker@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +eta@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/eta/-/eta-2.0.1.tgz#199e675359cb6e19d38f29e1f405e1ba0e79a6df" + integrity sha512-46E2qDPDm7QA+usjffUWz9KfXsxVZclPOuKsXs4ZWZdI/X1wpDF7AO424pt7fdYohCzWsIkXAhNGXSlwo5naAg== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +eval@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/eval/-/eval-0.1.8.tgz#2b903473b8cc1d1989b83a1e7923f883eb357f85" + integrity sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw== + dependencies: + "@types/node" "*" + require-like ">= 0.1.1" + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +execa@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + 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" + +express@^4.17.3: + version "4.18.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" + integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.1" + content-disposition "0.5.4" + content-type "~1.0.4" + 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" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== + dependencies: + is-extendable "^0.1.0" + +extend@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.2.11, fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-url-parser@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/fast-url-parser/-/fast-url-parser-1.1.3.tgz#f4af3ea9f34d8a271cf58ad2b3759f431f0b318d" + integrity sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ== + dependencies: + punycode "^1.3.2" + +fastq@^1.6.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + dependencies: + reusify "^1.0.4" + +faye-websocket@^0.11.3: + version "0.11.4" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" + integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== + dependencies: + websocket-driver ">=0.5.1" + +fbemitter@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/fbemitter/-/fbemitter-3.0.0.tgz#00b2a1af5411254aab416cd75f9e6289bee4bff3" + integrity sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw== + dependencies: + fbjs "^3.0.0" + +fbjs-css-vars@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" + integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== + +fbjs@^3.0.0, fbjs@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-3.0.4.tgz#e1871c6bd3083bac71ff2da868ad5067d37716c6" + integrity sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ== + dependencies: + cross-fetch "^3.1.5" + fbjs-css-vars "^1.0.0" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.30" + +feed@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/feed/-/feed-4.2.2.tgz#865783ef6ed12579e2c44bbef3c9113bc4956a7e" + integrity sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ== + dependencies: + xml-js "^1.6.11" + +file-loader@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" + integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +filesize@^8.0.6: + version "8.0.7" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-8.0.7.tgz#695e70d80f4e47012c132d57a059e80c6b580bd8" + integrity sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ== + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + 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" + +find-cache-dir@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flux@^4.0.1: + version "4.0.4" + resolved "https://registry.yarnpkg.com/flux/-/flux-4.0.4.tgz#9661182ea81d161ee1a6a6af10d20485ef2ac572" + integrity sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw== + dependencies: + fbemitter "^3.0.0" + fbjs "^3.0.1" + +follow-redirects@^1.0.0, follow-redirects@^1.14.7: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +fork-ts-checker-webpack-plugin@^6.5.0: + version "6.5.3" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz#eda2eff6e22476a2688d10661688c47f611b37f3" + integrity sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ== + dependencies: + "@babel/code-frame" "^7.8.3" + "@types/json-schema" "^7.0.5" + chalk "^4.1.0" + chokidar "^3.4.2" + cosmiconfig "^6.0.0" + deepmerge "^4.2.2" + fs-extra "^9.0.0" + glob "^7.1.6" + memfs "^3.1.2" + minimatch "^3.0.4" + schema-utils "2.7.0" + semver "^7.3.2" + tapable "^1.0.0" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fraction.js@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" + integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs-extra@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^9.0.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-monkey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" + integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +functions-have-names@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" + integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== + +get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.0.0, get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +github-slugger@^1.4.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.5.0.tgz#17891bbc73232051474d68bd867a34625c955f7d" + integrity sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw== + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@^7.0.0, glob@^7.1.3, glob@^7.1.6: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-dirs@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.1.tgz#0c488971f066baceda21447aecb1a8b911d22485" + integrity sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA== + dependencies: + ini "2.0.0" + +global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + +globby@^11.0.1, globby@^11.0.4, globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +globby@^13.1.1: + version "13.1.3" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.3.tgz#f62baf5720bcb2c1330c8d4ef222ee12318563ff" + integrity sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw== + dependencies: + dir-glob "^3.0.1" + fast-glob "^3.2.11" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^4.0.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +got@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +gray-matter@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798" + integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q== + dependencies: + js-yaml "^3.13.1" + kind-of "^6.0.2" + section-matter "^1.0.0" + strip-bom-string "^1.0.0" + +gzip-size@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" + integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== + dependencies: + duplexer "^0.1.2" + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has-yarn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" + integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hast-to-hyperscript@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz#9b67fd188e4c81e8ad66f803855334173920218d" + integrity sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA== + dependencies: + "@types/unist" "^2.0.3" + comma-separated-tokens "^1.0.0" + property-information "^5.3.0" + space-separated-tokens "^1.0.0" + style-to-object "^0.3.0" + unist-util-is "^4.0.0" + web-namespaces "^1.0.0" + +hast-util-from-parse5@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz#554e34abdeea25ac76f5bd950a1f0180e0b3bc2a" + integrity sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA== + dependencies: + "@types/parse5" "^5.0.0" + hastscript "^6.0.0" + property-information "^5.0.0" + vfile "^4.0.0" + vfile-location "^3.2.0" + web-namespaces "^1.0.0" + +hast-util-parse-selector@^2.0.0: + version "2.2.5" + resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a" + integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ== + +hast-util-raw@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-6.0.1.tgz#973b15930b7529a7b66984c98148b46526885977" + integrity sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig== + dependencies: + "@types/hast" "^2.0.0" + hast-util-from-parse5 "^6.0.0" + hast-util-to-parse5 "^6.0.0" + html-void-elements "^1.0.0" + parse5 "^6.0.0" + unist-util-position "^3.0.0" + vfile "^4.0.0" + web-namespaces "^1.0.0" + xtend "^4.0.0" + zwitch "^1.0.0" + +hast-util-to-parse5@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz#1ec44650b631d72952066cea9b1445df699f8479" + integrity sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ== + dependencies: + hast-to-hyperscript "^9.0.0" + property-information "^5.0.0" + web-namespaces "^1.0.0" + xtend "^4.0.0" + zwitch "^1.0.0" + +hastscript@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-6.0.0.tgz#e8768d7eac56c3fdeac8a92830d58e811e5bf640" + integrity sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w== + dependencies: + "@types/hast" "^2.0.0" + comma-separated-tokens "^1.0.0" + hast-util-parse-selector "^2.0.0" + property-information "^5.0.0" + space-separated-tokens "^1.0.0" + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +heap@^0.2.6: + version "0.2.7" + resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.7.tgz#1e6adf711d3f27ce35a81fe3b7bd576c2260a8fc" + integrity sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg== + +history@^4.9.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" + integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== + dependencies: + "@babel/runtime" "^7.1.2" + loose-envify "^1.2.0" + resolve-pathname "^3.0.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + value-equal "^1.0.1" + +hoist-non-react-statics@^3.1.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +html-entities@^2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" + integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== + +html-minifier-terser@^6.0.2, html-minifier-terser@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" + integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== + dependencies: + camel-case "^4.1.2" + clean-css "^5.2.2" + commander "^8.3.0" + he "^1.2.0" + param-case "^3.0.4" + relateurl "^0.2.7" + terser "^5.10.0" + +html-tags@^3.2.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce" + integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== + +html-void-elements@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.5.tgz#ce9159494e86d95e45795b166c2021c2cfca4483" + integrity sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w== + +html-webpack-plugin@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz#c3911936f57681c1f9f4d8b68c158cd9dfe52f50" + integrity sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw== + dependencies: + "@types/html-minifier-terser" "^6.0.0" + html-minifier-terser "^6.0.2" + lodash "^4.17.21" + pretty-error "^4.0.0" + tapable "^2.0.0" + +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + +htmlparser2@^8.0.1: + version "8.0.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" + integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + entities "^4.4.0" + +http-cache-semantics@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-parser-js@>=0.5.1: + version "0.5.8" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" + integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== + +http-proxy-middleware@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" + integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== + dependencies: + "@types/http-proxy" "^1.17.8" + http-proxy "^1.18.1" + is-glob "^4.0.1" + is-plain-obj "^3.0.0" + micromatch "^4.0.2" + +http-proxy@^1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@0.6: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +icss-utils@^5.0.0, icss-utils@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== + +ignore@^5.1.4, ignore@^5.2.0: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + +image-size@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-1.0.2.tgz#d778b6d0ab75b2737c1556dd631652eb963bc486" + integrity sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg== + dependencies: + queue "6.0.2" + +immer@^9.0.7: + version "9.0.21" + resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.21.tgz#1e025ea31a40f24fb064f1fef23e931496330176" + integrity sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA== + +import-fresh@^3.1.0, import-fresh@^3.2.1, import-fresh@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A== + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +infima@0.2.0-alpha.43: + version "0.2.0-alpha.43" + resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.43.tgz#f7aa1d7b30b6c08afef441c726bac6150228cbe0" + integrity sha512-2uw57LvUqW0rK/SWYnd/2rRfxNA5DDNOh33jxF7fy46VWoNhGxiUQyVZHbBMjQ33mQem0cjdDVwgWVAmlRfgyQ== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== + +ini@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" + integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== + +ini@^1.3.5, ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +inline-style-parser@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" + integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== + +internal-slot@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" + integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + dependencies: + get-intrinsic "^1.2.0" + has "^1.0.3" + side-channel "^1.0.4" + +"internmap@1 - 2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/internmap/-/internmap-2.0.3.tgz#6685f23755e43c524e251d29cbc97248e3061009" + integrity sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg== + +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + +invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +ipaddr.js@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0" + integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== + +is-alphabetical@1.0.4, is-alphabetical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" + integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== + +is-alphanumerical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" + integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== + dependencies: + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-buffer@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-core-module@^2.9.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== + dependencies: + has "^1.0.3" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-decimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" + integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extendable@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-hexadecimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" + integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== + +is-installed-globally@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" + integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== + dependencies: + global-dirs "^3.0.0" + is-path-inside "^3.0.2" + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-npm@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8" + integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-cwd@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-inside@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-plain-obj@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-plain-obj@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" + integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== + +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== + +is-root@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" + integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.10, is-typed-array@^1.1.9: + version "1.1.10" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" + integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + +is-typedarray@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-whitespace-character@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7" + integrity sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w== + +is-word-character@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230" + integrity sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA== + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +is-yarn-global@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" + integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +jest-util@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.5.0.tgz#24a4d3d92fc39ce90425311b23c27a6e0ef16b8f" + integrity sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ== + dependencies: + "@jest/types" "^29.5.0" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-worker@^27.4.5: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest-worker@^29.1.2: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.5.0.tgz#bdaefb06811bd3384d93f009755014d8acb4615d" + integrity sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA== + dependencies: + "@types/node" "*" + jest-util "^29.5.0" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +joi@^17.6.0: + version "17.9.1" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.9.1.tgz#74899b9fa3646904afa984a11df648eca66c9018" + integrity sha512-FariIi9j6QODKATGBrEX7HZcja8Bsh3rfdGYy/Sb65sGlZWK/QWesU1ghk7aJWDj95knjXlQfSmzFSPPkLVsfw== + dependencies: + "@hapi/hoek" "^9.0.0" + "@hapi/topo" "^5.0.0" + "@sideway/address" "^4.1.3" + "@sideway/formula" "^3.0.1" + "@sideway/pinpoint" "^2.0.0" + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== + +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json5@^2.1.2, json5@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + +khroma@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/khroma/-/khroma-2.0.0.tgz#7577de98aed9f36c7a474c4d453d94c0d6c6588b" + integrity sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +klona@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22" + integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== + +latest-version@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" + integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== + dependencies: + package-json "^6.3.0" + +launch-editor@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.0.tgz#4c0c1a6ac126c572bd9ff9a30da1d2cae66defd7" + integrity sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ== + dependencies: + picocolors "^1.0.0" + shell-quote "^1.7.3" + +layout-base@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/layout-base/-/layout-base-1.0.2.tgz#1291e296883c322a9dd4c5dd82063721b53e26e2" + integrity sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg== + +layout-base@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/layout-base/-/layout-base-2.0.1.tgz#d0337913586c90f9c2c075292069f5c2da5dd285" + integrity sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg== + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +lilconfig@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" + integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +loader-runner@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + +loader-utils@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" + integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +loader-utils@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.2.1.tgz#4fb104b599daafd82ef3e1a41fb9265f87e1f576" + integrity sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw== + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash-es@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + +lodash.curry@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" + integrity sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA== + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.flow@^3.3.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" + integrity sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw== + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +lodash.uniq@4.5.0, lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== + +lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +markdown-escapes@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535" + integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg== + +mdast-squeeze-paragraphs@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz#7c4c114679c3bee27ef10b58e2e015be79f1ef97" + integrity sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ== + dependencies: + unist-util-remove "^2.0.0" + +mdast-util-definitions@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz#c5c1a84db799173b4dcf7643cda999e440c24db2" + integrity sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ== + dependencies: + unist-util-visit "^2.0.0" + +mdast-util-to-hast@10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz#0cfc82089494c52d46eb0e3edb7a4eb2aea021eb" + integrity sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + mdast-util-definitions "^4.0.0" + mdurl "^1.0.0" + unist-builder "^2.0.0" + unist-util-generated "^1.0.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +mdast-util-to-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" + integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== + +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== + +mdn-data@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" + integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== + +mdurl@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== + +mdx-mermaid@^1.2.3: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mdx-mermaid/-/mdx-mermaid-1.3.2.tgz#9a9d335368de88f0c771daf12dde855bc6b67d57" + integrity sha512-8kw0tg3isKKBFzFwoe2DhIaEgKYtVeJXQtxZCCrdTPO0CTpXHnTHT0atDqsp7YkXi5iUCp/zAZPZu1cmr68T3w== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +memfs@^3.1.2, memfs@^3.4.3: + version "3.4.13" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.13.tgz#248a8bd239b3c240175cd5ec548de5227fc4f345" + integrity sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg== + dependencies: + fs-monkey "^1.0.3" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +mermaid@^9.1.3: + version "9.4.3" + resolved "https://registry.yarnpkg.com/mermaid/-/mermaid-9.4.3.tgz#62cf210c246b74972ea98c19837519b6f03427f2" + integrity sha512-TLkQEtqhRSuEHSE34lh5bCa94KATCyluAXmFnNI2PRZwOpXFeqiJWwZl+d2CcemE1RS6QbbueSSq9QIg8Uxcyw== + dependencies: + "@braintree/sanitize-url" "^6.0.0" + cytoscape "^3.23.0" + cytoscape-cose-bilkent "^4.1.0" + cytoscape-fcose "^2.1.0" + d3 "^7.4.0" + dagre-d3-es "7.0.9" + dayjs "^1.11.7" + dompurify "2.4.3" + elkjs "^0.8.2" + khroma "^2.0.0" + lodash-es "^4.17.21" + non-layered-tidy-tree-layout "^2.0.2" + stylis "^4.1.2" + ts-dedent "^2.2.0" + uuid "^9.0.0" + web-worker "^1.2.0" + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-db@~1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" + integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ== + +mime-types@2.1.18: + version "2.1.18" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" + integrity sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ== + dependencies: + mime-db "~1.33.0" + +mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mini-css-extract-plugin@^2.6.1: + version "2.7.5" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.5.tgz#afbb344977659ec0f1f6e050c7aea456b121cfc5" + integrity sha512-9HaR++0mlgom81s95vvNjxkg52n2b5s//3ZTI1EtzFb98awsLSivs2LMsVqnQ3ay0PVhqWcGNyDaTE961FOcjQ== + dependencies: + schema-utils "^4.0.0" + +minimalistic-assert@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimatch@3.1.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +mkdirp@~0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mri@^1.1.5: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" + integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== + +mrmime@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" + integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multicast-dns@^7.2.5: + version "7.2.5" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" + integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== + dependencies: + dns-packet "^5.2.2" + thunky "^1.0.2" + +multimatch@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-4.0.0.tgz#8c3c0f6e3e8449ada0af3dd29efb491a375191b3" + integrity sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ== + dependencies: + "@types/minimatch" "^3.0.3" + array-differ "^3.0.0" + array-union "^2.1.0" + arrify "^2.0.1" + minimatch "^3.0.4" + +nanoid@^3.3.4: + version "3.3.6" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" + integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +node-emoji@^1.10.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" + integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== + dependencies: + lodash "^4.17.21" + +node-fetch@2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-forge@^1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== + +node-releases@^2.0.8: + version "2.0.10" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" + integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== + +non-layered-tidy-tree-layout@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz#57d35d13c356643fc296a55fb11ac15e74da7804" + integrity sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== + +normalize-url@^4.1.0: + version "4.5.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" + integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +npm-run-path@^4.0.0, npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +nprogress@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" + integrity sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA== + +nth-check@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.12.3, object-inspect@^1.9.0: + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.0, object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.getownpropertydescriptors@^2.1.0: + version "2.1.5" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz#db5a9002489b64eef903df81d6623c07e5b4b4d3" + integrity sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw== + dependencies: + array.prototype.reduce "^1.0.5" + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +object.values@^1.1.0: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" + integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.0, onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^8.0.9, open@^8.4.0: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +opener@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" + integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== + +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-retry@^4.5.0: + version "4.6.2" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" + integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== + dependencies: + "@types/retry" "0.12.0" + retry "^0.13.1" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +package-json@^6.3.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" + integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== + dependencies: + got "^9.6.0" + registry-auth-token "^4.0.0" + registry-url "^5.0.0" + semver "^6.2.0" + +param-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-entities@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" + integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse-numeric-range@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz#7c63b61190d61e4d53a1197f0c83c47bb670ffa3" + integrity sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ== + +parse5-htmlparser2-tree-adapter@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" + integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== + dependencies: + domhandler "^5.0.2" + parse5 "^7.0.0" + +parse5@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +parse5@^7.0.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" + integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + dependencies: + entities "^4.4.0" + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-is-inside@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +path-to-regexp@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-2.2.1.tgz#90b617025a16381a879bc82a38d4e8bdeb2bcf45" + integrity sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ== + +path-to-regexp@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" + integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== + dependencies: + isarray "0.0.1" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pkg-up@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" + integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== + dependencies: + find-up "^3.0.0" + +postcss-calc@^8.2.3: + version "8.2.4" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.2.4.tgz#77b9c29bfcbe8a07ff6693dc87050828889739a5" + integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q== + dependencies: + postcss-selector-parser "^6.0.9" + postcss-value-parser "^4.2.0" + +postcss-colormin@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.3.1.tgz#86c27c26ed6ba00d96c79e08f3ffb418d1d1988f" + integrity sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ== + dependencies: + browserslist "^4.21.4" + caniuse-api "^3.0.0" + colord "^2.9.1" + postcss-value-parser "^4.2.0" + +postcss-convert-values@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz#04998bb9ba6b65aa31035d669a6af342c5f9d393" + integrity sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA== + dependencies: + browserslist "^4.21.4" + postcss-value-parser "^4.2.0" + +postcss-discard-comments@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz#8df5e81d2925af2780075840c1526f0660e53696" + integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== + +postcss-discard-duplicates@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848" + integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== + +postcss-discard-empty@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz#e57762343ff7f503fe53fca553d18d7f0c369c6c" + integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== + +postcss-discard-overridden@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e" + integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== + +postcss-discard-unused@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz#8974e9b143d887677304e558c1166d3762501142" + integrity sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-loader@^7.0.0: + version "7.2.4" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.2.4.tgz#2884f4ca172de633b2cf1f93dc852968f0632ba9" + integrity sha512-F88rpxxNspo5hatIc+orYwZDtHFaVFOSIVAx+fBfJC1GmhWbVmPWtmg2gXKE1OxJbneOSGn8PWdIwsZFcruS+w== + dependencies: + cosmiconfig "^8.1.3" + cosmiconfig-typescript-loader "^4.3.0" + klona "^2.0.6" + semver "^7.3.8" + +postcss-merge-idents@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz#7753817c2e0b75d0853b56f78a89771e15ca04a1" + integrity sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw== + dependencies: + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-merge-longhand@^5.1.7: + version "5.1.7" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz#24a1bdf402d9ef0e70f568f39bdc0344d568fb16" + integrity sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ== + dependencies: + postcss-value-parser "^4.2.0" + stylehacks "^5.1.1" + +postcss-merge-rules@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz#2f26fa5cacb75b1402e213789f6766ae5e40313c" + integrity sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g== + dependencies: + browserslist "^4.21.4" + caniuse-api "^3.0.0" + cssnano-utils "^3.1.0" + postcss-selector-parser "^6.0.5" + +postcss-minify-font-values@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz#f1df0014a726083d260d3bd85d7385fb89d1f01b" + integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-minify-gradients@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz#f1fe1b4f498134a5068240c2f25d46fcd236ba2c" + integrity sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw== + dependencies: + colord "^2.9.1" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-minify-params@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz#c06a6c787128b3208b38c9364cfc40c8aa5d7352" + integrity sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw== + dependencies: + browserslist "^4.21.4" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-minify-selectors@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz#d4e7e6b46147b8117ea9325a915a801d5fe656c6" + integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-modules-extract-imports@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" + integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== + +postcss-modules-local-by-default@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" + integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== + dependencies: + icss-utils "^5.0.0" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" + integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== + dependencies: + postcss-selector-parser "^6.0.4" + +postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== + dependencies: + icss-utils "^5.0.0" + +postcss-normalize-charset@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed" + integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== + +postcss-normalize-display-values@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz#72abbae58081960e9edd7200fcf21ab8325c3da8" + integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-positions@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz#ef97279d894087b59325b45c47f1e863daefbb92" + integrity sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-repeat-style@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz#e9eb96805204f4766df66fd09ed2e13545420fb2" + integrity sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-string@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228" + integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-timing-functions@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz#d5614410f8f0b2388e9f240aa6011ba6f52dafbb" + integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-unicode@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz#f67297fca3fea7f17e0d2caa40769afc487aa030" + integrity sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA== + dependencies: + browserslist "^4.21.4" + postcss-value-parser "^4.2.0" + +postcss-normalize-url@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz#ed9d88ca82e21abef99f743457d3729a042adcdc" + integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew== + dependencies: + normalize-url "^6.0.1" + postcss-value-parser "^4.2.0" + +postcss-normalize-whitespace@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz#08a1a0d1ffa17a7cc6efe1e6c9da969cc4493cfa" + integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-ordered-values@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz#b6fd2bd10f937b23d86bc829c69e7732ce76ea38" + integrity sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ== + dependencies: + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-reduce-idents@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz#c89c11336c432ac4b28792f24778859a67dfba95" + integrity sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-reduce-initial@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz#798cd77b3e033eae7105c18c9d371d989e1382d6" + integrity sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg== + dependencies: + browserslist "^4.21.4" + caniuse-api "^3.0.0" + +postcss-reduce-transforms@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz#333b70e7758b802f3dd0ddfe98bb1ccfef96b6e9" + integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: + version "6.0.11" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" + integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-sort-media-queries@^4.2.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/postcss-sort-media-queries/-/postcss-sort-media-queries-4.3.0.tgz#f48a77d6ce379e86676fc3f140cf1b10a06f6051" + integrity sha512-jAl8gJM2DvuIJiI9sL1CuiHtKM4s5aEIomkU8G3LFvbP+p8i7Sz8VV63uieTgoewGqKbi+hxBTiOKJlB35upCg== + dependencies: + sort-css-media-queries "2.1.0" + +postcss-svgo@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz#0a317400ced789f233a28826e77523f15857d80d" + integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA== + dependencies: + postcss-value-parser "^4.2.0" + svgo "^2.7.0" + +postcss-unique-selectors@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6" + integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss-zindex@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-5.1.0.tgz#4a5c7e5ff1050bd4c01d95b1847dfdcc58a496ff" + integrity sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A== + +postcss@^8.3.11, postcss@^8.4.14, postcss@^8.4.17, postcss@^8.4.19: + version "8.4.21" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" + integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== + +prettier@^2.6.2: + version "2.8.7" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.7.tgz#bb79fc8729308549d28fe3a98fce73d2c0656450" + integrity sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw== + +pretty-error@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" + integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== + dependencies: + lodash "^4.17.20" + renderkid "^3.0.0" + +pretty-quick@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/pretty-quick/-/pretty-quick-3.1.3.tgz#15281108c0ddf446675157ca40240099157b638e" + integrity sha512-kOCi2FJabvuh1as9enxYmrnBC6tVMoVOenMaBqRfsvBHB0cbpYHjdQEpSglpASDFEXVwplpcGR4CLEaisYAFcA== + dependencies: + chalk "^3.0.0" + execa "^4.0.0" + find-up "^4.1.0" + ignore "^5.1.4" + mri "^1.1.5" + multimatch "^4.0.0" + +pretty-time@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e" + integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA== + +prism-react-renderer@^1.2.1, prism-react-renderer@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz#786bb69aa6f73c32ba1ee813fbe17a0115435085" + integrity sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg== + +prismjs@^1.28.0: + version "1.29.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.29.0.tgz#f113555a8fa9b57c35e637bba27509dcf802dd12" + integrity sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== + dependencies: + asap "~2.0.3" + +prompts@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +prop-types@^15.6.2, prop-types@^15.7.2: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +property-information@^5.0.0, property-information@^5.3.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.6.0.tgz#61675545fb23002f245c6540ec46077d4da3ed69" + integrity sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA== + dependencies: + xtend "^4.0.0" + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^1.3.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== + +punycode@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + +pupa@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" + integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== + dependencies: + escape-goat "^2.0.0" + +pure-color@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e" + integrity sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA== + +q@^1.1.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== + +qs@6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +queue@6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/queue/-/queue-6.0.2.tgz#b91525283e2315c7553d2efa18d83e76432fed65" + integrity sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA== + dependencies: + inherits "~2.0.3" + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +range-parser@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + integrity sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A== + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +rc@1.2.8, rc@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-base16-styling@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.6.0.tgz#ef2156d66cf4139695c8a167886cb69ea660792c" + integrity sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ== + dependencies: + base16 "^1.0.0" + lodash.curry "^4.0.1" + lodash.flow "^3.3.0" + pure-color "^1.2.0" + +react-countup@^6.4.0: + version "6.4.2" + resolved "https://registry.yarnpkg.com/react-countup/-/react-countup-6.4.2.tgz#cf8564c9381958a36c7c25f7c0769f7a472e4c99" + integrity sha512-wdDrNb2lPFGbLb+i0FTgswPbWziubS6KZRII8NRpXmUCoZsi15PFbIHgBz60Dyxd4KPuRvwsK5aawIU4OPP3jA== + dependencies: + "@rollup/plugin-babel" "^6.0.3" + countup.js "^2.5.0" + +react-dev-utils@^12.0.1: + version "12.0.1" + resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-12.0.1.tgz#ba92edb4a1f379bd46ccd6bcd4e7bc398df33e73" + integrity sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ== + dependencies: + "@babel/code-frame" "^7.16.0" + address "^1.1.2" + browserslist "^4.18.1" + chalk "^4.1.2" + cross-spawn "^7.0.3" + detect-port-alt "^1.1.6" + escape-string-regexp "^4.0.0" + filesize "^8.0.6" + find-up "^5.0.0" + fork-ts-checker-webpack-plugin "^6.5.0" + global-modules "^2.0.0" + globby "^11.0.4" + gzip-size "^6.0.0" + immer "^9.0.7" + is-root "^2.1.0" + loader-utils "^3.2.0" + open "^8.4.0" + pkg-up "^3.1.0" + prompts "^2.4.2" + react-error-overlay "^6.0.11" + recursive-readdir "^2.2.2" + shell-quote "^1.7.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +react-dom@^17.0.1: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" + integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + scheduler "^0.20.2" + +react-error-overlay@^6.0.11: + version "6.0.11" + resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb" + integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== + +react-fast-compare@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.1.tgz#53933d9e14f364281d6cba24bfed7a4afb808b5f" + integrity sha512-xTYf9zFim2pEif/Fw16dBiXpe0hoy5PxcD8+OwBnTtNLfIm3g6WxhKNurY+6OmdH1u6Ta/W/Vl6vjbYP1MFnDg== + +react-helmet-async@*, react-helmet-async@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-1.3.0.tgz#7bd5bf8c5c69ea9f02f6083f14ce33ef545c222e" + integrity sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg== + dependencies: + "@babel/runtime" "^7.12.5" + invariant "^2.2.4" + prop-types "^15.7.2" + react-fast-compare "^3.2.0" + shallowequal "^1.1.0" + +react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-json-view@^1.21.3: + version "1.21.3" + resolved "https://registry.yarnpkg.com/react-json-view/-/react-json-view-1.21.3.tgz#f184209ee8f1bf374fb0c41b0813cff54549c475" + integrity sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw== + dependencies: + flux "^4.0.1" + react-base16-styling "^0.6.0" + react-lifecycles-compat "^3.0.4" + react-textarea-autosize "^8.3.2" + +react-lifecycles-compat@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== + +react-loadable-ssr-addon-v5-slorber@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz#2cdc91e8a744ffdf9e3556caabeb6e4278689883" + integrity sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A== + dependencies: + "@babel/runtime" "^7.10.3" + +react-router-config@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/react-router-config/-/react-router-config-5.1.1.tgz#0f4263d1a80c6b2dc7b9c1902c9526478194a988" + integrity sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg== + dependencies: + "@babel/runtime" "^7.1.2" + +react-router-dom@^5.3.3: + version "5.3.4" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.4.tgz#2ed62ffd88cae6db134445f4a0c0ae8b91d2e5e6" + integrity sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ== + dependencies: + "@babel/runtime" "^7.12.13" + history "^4.9.0" + loose-envify "^1.3.1" + prop-types "^15.6.2" + react-router "5.3.4" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-router@5.3.4, react-router@^5.3.3: + version "5.3.4" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.3.4.tgz#8ca252d70fcc37841e31473c7a151cf777887bb5" + integrity sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA== + dependencies: + "@babel/runtime" "^7.12.13" + history "^4.9.0" + hoist-non-react-statics "^3.1.0" + loose-envify "^1.3.1" + path-to-regexp "^1.7.0" + prop-types "^15.6.2" + react-is "^16.6.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-textarea-autosize@^8.3.2: + version "8.4.1" + resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.4.1.tgz#bcfc5462727014b808b14ee916c01e275e8a8335" + integrity sha512-aD2C+qK6QypknC+lCMzteOdIjoMbNlgSFmJjCV+DrfTPwp59i/it9mMNf2HDzvRjQgKAyBDPyLJhcrzElf2U4Q== + dependencies: + "@babel/runtime" "^7.20.13" + use-composed-ref "^1.3.0" + use-latest "^1.2.1" + +react@^17.0.1: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" + integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +readable-stream@^2.0.1: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.6: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +reading-time@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/reading-time/-/reading-time-1.5.0.tgz#d2a7f1b6057cb2e169beaf87113cc3411b5bc5bb" + integrity sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg== + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== + dependencies: + resolve "^1.1.6" + +recursive-readdir@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.3.tgz#e726f328c0d69153bcabd5c322d3195252379372" + integrity sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA== + dependencies: + minimatch "^3.0.5" + +regenerate-unicode-properties@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" + integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.13.11: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + +regenerator-transform@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56" + integrity sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg== + dependencies: + "@babel/runtime" "^7.8.4" + +regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + functions-have-names "^1.2.2" + +regexpu-core@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" + integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== + 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@^4.0.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.2.tgz#f02d49c3668884612ca031419491a13539e21fac" + integrity sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg== + dependencies: + rc "1.2.8" + +registry-url@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" + integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== + dependencies: + rc "^1.2.8" + +regjsparser@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== + dependencies: + jsesc "~0.5.0" + +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== + +remark-emoji@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/remark-emoji/-/remark-emoji-2.2.0.tgz#1c702090a1525da5b80e15a8f963ef2c8236cac7" + integrity sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w== + dependencies: + emoticon "^3.2.0" + node-emoji "^1.10.0" + unist-util-visit "^2.0.3" + +remark-footnotes@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/remark-footnotes/-/remark-footnotes-2.0.0.tgz#9001c4c2ffebba55695d2dd80ffb8b82f7e6303f" + integrity sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ== + +remark-mdx@1.6.22: + version "1.6.22" + resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-1.6.22.tgz#06a8dab07dcfdd57f3373af7f86bd0e992108bbd" + integrity sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ== + dependencies: + "@babel/core" "7.12.9" + "@babel/helper-plugin-utils" "7.10.4" + "@babel/plugin-proposal-object-rest-spread" "7.12.1" + "@babel/plugin-syntax-jsx" "7.12.1" + "@mdx-js/util" "1.6.22" + is-alphabetical "1.0.4" + remark-parse "8.0.3" + unified "9.2.0" + +remark-parse@8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-8.0.3.tgz#9c62aa3b35b79a486454c690472906075f40c7e1" + integrity sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q== + dependencies: + ccount "^1.0.0" + collapse-white-space "^1.0.2" + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + is-whitespace-character "^1.0.0" + is-word-character "^1.0.0" + markdown-escapes "^1.0.0" + parse-entities "^2.0.0" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + trim "0.0.1" + trim-trailing-lines "^1.0.0" + unherit "^1.0.4" + unist-util-remove-position "^2.0.0" + vfile-location "^3.0.0" + xtend "^4.0.1" + +remark-squeeze-paragraphs@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz#76eb0e085295131c84748c8e43810159c5653ead" + integrity sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw== + dependencies: + mdast-squeeze-paragraphs "^4.0.0" + +renderkid@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" + integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== + dependencies: + css-select "^4.1.3" + dom-converter "^0.2.0" + htmlparser2 "^6.1.0" + lodash "^4.17.21" + strip-ansi "^6.0.1" + +repeat-string@^1.5.4: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +"require-like@>= 0.1.1": + version "0.1.2" + resolved "https://registry.yarnpkg.com/require-like/-/require-like-0.1.2.tgz#ad6f30c13becd797010c468afa775c0c0a6b47fa" + integrity sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-pathname@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" + integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== + +resolve@^1.1.6, resolve@^1.14.2, resolve@^1.3.2: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== + dependencies: + lowercase-keys "^1.0.0" + +retry@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +robust-predicates@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/robust-predicates/-/robust-predicates-3.0.1.tgz#ecde075044f7f30118682bd9fb3f123109577f9a" + integrity sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g== + +rtl-detect@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/rtl-detect/-/rtl-detect-1.0.4.tgz#40ae0ea7302a150b96bc75af7d749607392ecac6" + integrity sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ== + +rtlcss@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/rtlcss/-/rtlcss-3.5.0.tgz#c9eb91269827a102bac7ae3115dd5d049de636c3" + integrity sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A== + dependencies: + find-up "^5.0.0" + picocolors "^1.0.0" + postcss "^8.3.11" + strip-json-comments "^3.1.1" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rw@1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" + integrity sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ== + +rxjs@^7.5.4: + version "7.8.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.0.tgz#90a938862a82888ff4c7359811a595e14e1e09a4" + integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== + dependencies: + tslib "^2.1.0" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sax@^1.2.4, sax@~1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +scheduler@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" + integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +schema-utils@2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" + integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== + dependencies: + "@types/json-schema" "^7.0.4" + ajv "^6.12.2" + ajv-keywords "^3.4.1" + +schema-utils@^2.6.5: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" + integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +schema-utils@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7" + integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.8.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.0.0" + +section-matter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" + integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== + dependencies: + extend-shallow "^2.0.1" + kind-of "^6.0.0" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== + +selfsigned@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61" + integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== + dependencies: + node-forge "^1" + +semver-diff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" + integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== + dependencies: + semver "^6.3.0" + +semver@^5.4.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.2, semver@^7.3.4, semver@^7.3.7, semver@^7.3.8: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + 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" + +serialize-javascript@^6.0.0, serialize-javascript@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" + integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== + dependencies: + randombytes "^2.1.0" + +serve-handler@^6.1.3: + version "6.1.5" + resolved "https://registry.yarnpkg.com/serve-handler/-/serve-handler-6.1.5.tgz#a4a0964f5c55c7e37a02a633232b6f0d6f068375" + integrity sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg== + 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: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shallowequal@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.7.3: + version "1.8.0" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.0.tgz#20d078d0eaf71d54f43bd2ba14a1b5b9bfa5c8ba" + integrity sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ== + +shelljs@^0.8.5: + version "0.8.5" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" + integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.2, signal-exit@^3.0.3: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +sirv@^1.0.7: + version "1.0.19" + resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.19.tgz#1d73979b38c7fe91fcba49c85280daa9c2363b49" + integrity sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ== + dependencies: + "@polka/url" "^1.0.0-next.20" + mrmime "^1.0.0" + totalist "^1.0.0" + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +sitemap@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/sitemap/-/sitemap-7.1.1.tgz#eeed9ad6d95499161a3eadc60f8c6dce4bea2bef" + integrity sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg== + dependencies: + "@types/node" "^17.0.5" + "@types/sax" "^1.2.1" + arg "^5.0.0" + sax "^1.2.4" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slash@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" + integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== + +sockjs@^0.3.24: + version "0.3.24" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" + integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== + dependencies: + faye-websocket "^0.11.3" + uuid "^8.3.2" + websocket-driver "^0.7.4" + +sort-css-media-queries@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz#7c85e06f79826baabb232f5560e9745d7a78c4ce" + integrity sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA== + +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.5.0: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +space-separated-tokens@^1.0.0: + version "1.1.5" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" + integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +state-toggle@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe" + integrity sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ== + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +"statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +std-env@^3.0.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.3.2.tgz#af27343b001616015534292178327b202b9ee955" + integrity sha512-uUZI65yrV2Qva5gqE0+A7uVAvO40iPo6jGhs7s8keRfHCmtg+uB2X6EiLGCI9IgL1J17xGhvoOqSz79lzICPTA== + +string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string.prototype.trim@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" + integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimend@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" + integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimstart@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" + integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +stringify-object@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" + integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== + dependencies: + ansi-regex "^6.0.1" + +strip-bom-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" + integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +style-to-object@0.3.0, style-to-object@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.3.0.tgz#b1b790d205991cc783801967214979ee19a76e46" + integrity sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA== + dependencies: + inline-style-parser "0.1.1" + +stylehacks@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.1.tgz#7934a34eb59d7152149fa69d6e9e56f2fc34bcc9" + integrity sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw== + dependencies: + browserslist "^4.21.4" + postcss-selector-parser "^6.0.4" + +stylis@^4.1.2: + version "4.1.3" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.1.3.tgz#fd2fbe79f5fed17c55269e16ed8da14c84d069f7" + integrity sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA== + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +svg-parser@^2.0.2, svg-parser@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" + integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== + +svgo@^1.2.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" + integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== + dependencies: + chalk "^2.4.1" + coa "^2.0.2" + css-select "^2.0.0" + css-select-base-adapter "^0.1.1" + css-tree "1.0.0-alpha.37" + csso "^4.0.2" + js-yaml "^3.13.1" + mkdirp "~0.5.1" + object.values "^1.1.0" + sax "~1.2.4" + stable "^0.1.8" + unquote "~1.1.1" + util.promisify "~1.0.0" + +svgo@^2.7.0, svgo@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" + integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== + dependencies: + "@trysound/sax" "0.2.0" + commander "^7.2.0" + css-select "^4.1.3" + css-tree "^1.1.3" + csso "^4.2.0" + picocolors "^1.0.0" + stable "^0.1.8" + +tapable@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.3.3: + version "5.3.7" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz#ef760632d24991760f339fe9290deb936ad1ffc7" + integrity sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw== + dependencies: + "@jridgewell/trace-mapping" "^0.3.17" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.1" + terser "^5.16.5" + +terser@^5.10.0, terser@^5.16.5: + version "5.16.8" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.8.tgz#ccde583dabe71df3f4ed02b65eb6532e0fae15d5" + integrity sha512-QI5g1E/ef7d+PsDifb+a6nnVgC4F22Bg6T0xrBrz6iloVB4PUkkunp6V8nzoOOZJIzjWVdAGqCdlKlhLq/TbIA== + dependencies: + "@jridgewell/source-map" "^0.3.2" + acorn "^8.5.0" + commander "^2.20.0" + source-map-support "~0.5.20" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +tiny-invariant@^1.0.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642" + integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw== + +tiny-warning@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +totalist@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df" + integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +trim-trailing-lines@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz#bd4abbec7cc880462f10b2c8b5ce1d8d1ec7c2c0" + integrity sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ== + +trim@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" + integrity sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ== + +trough@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" + integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== + +ts-dedent@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/ts-dedent/-/ts-dedent-2.2.0.tgz#39e4bd297cd036292ae2394eb3412be63f563bb5" + integrity sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ== + +tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" + integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^2.5.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" + integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +ua-parser-js@^0.7.30: + version "0.7.35" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.35.tgz#8bda4827be4f0b1dda91699a29499575a1f1d307" + integrity sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +unherit@^1.0.4: + version "1.1.3" + resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22" + integrity sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ== + dependencies: + inherits "^2.0.0" + xtend "^4.0.0" + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" + integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== + +unified@9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.0.tgz#67a62c627c40589edebbf60f53edfd4d822027f8" + integrity sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-buffer "^2.0.0" + is-plain-obj "^2.0.0" + trough "^1.0.0" + vfile "^4.0.0" + +unified@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.2.tgz#67649a1abfc3ab85d2969502902775eb03146975" + integrity sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-buffer "^2.0.0" + is-plain-obj "^2.0.0" + trough "^1.0.0" + vfile "^4.0.0" + +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.0.0" + +unist-builder@2.0.3, unist-builder@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-2.0.3.tgz#77648711b5d86af0942f334397a33c5e91516436" + integrity sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw== + +unist-util-generated@^1.0.0: + version "1.1.6" + resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.6.tgz#5ab51f689e2992a472beb1b35f2ce7ff2f324d4b" + integrity sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg== + +unist-util-is@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.1.0.tgz#976e5f462a7a5de73d94b706bac1b90671b57797" + integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg== + +unist-util-position@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.1.0.tgz#1c42ee6301f8d52f47d14f62bbdb796571fa2d47" + integrity sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA== + +unist-util-remove-position@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz#5d19ca79fdba712301999b2b73553ca8f3b352cc" + integrity sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA== + dependencies: + unist-util-visit "^2.0.0" + +unist-util-remove@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unist-util-remove/-/unist-util-remove-2.1.0.tgz#b0b4738aa7ee445c402fda9328d604a02d010588" + integrity sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q== + dependencies: + unist-util-is "^4.0.0" + +unist-util-stringify-position@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" + integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== + dependencies: + "@types/unist" "^2.0.2" + +unist-util-visit-parents@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz#65a6ce698f78a6b0f56aa0e88f13801886cdaef6" + integrity sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^4.0.0" + +unist-util-visit@2.0.3, unist-util-visit@^2.0.0, unist-util-visit@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c" + integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^4.0.0" + unist-util-visit-parents "^3.0.0" + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +unquote@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" + integrity sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg== + +update-browserslist-db@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" + integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +update-notifier@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9" + integrity sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw== + dependencies: + boxen "^5.0.0" + chalk "^4.1.0" + configstore "^5.0.1" + has-yarn "^2.1.0" + import-lazy "^2.1.0" + is-ci "^2.0.0" + is-installed-globally "^0.4.0" + is-npm "^5.0.0" + is-yarn-global "^0.3.0" + latest-version "^5.1.0" + pupa "^2.1.1" + semver "^7.3.4" + semver-diff "^3.1.1" + xdg-basedir "^4.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +url-loader@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" + integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== + dependencies: + loader-utils "^2.0.0" + mime-types "^2.1.27" + schema-utils "^3.0.0" + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== + dependencies: + prepend-http "^2.0.0" + +use-composed-ref@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/use-composed-ref/-/use-composed-ref-1.3.0.tgz#3d8104db34b7b264030a9d916c5e94fbe280dbda" + integrity sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ== + +use-isomorphic-layout-effect@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb" + integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA== + +use-latest@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/use-latest/-/use-latest-1.2.1.tgz#d13dfb4b08c28e3e33991546a2cee53e14038cf2" + integrity sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw== + dependencies: + use-isomorphic-layout-effect "^1.1.1" + +use-sync-external-store@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" + integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +util.promisify@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" + integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.0" + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== + +utility-types@^3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/utility-types/-/utility-types-3.10.0.tgz#ea4148f9a741015f05ed74fd615e1d20e6bed82b" + integrity sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg== + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +uuid@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" + integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== + +value-equal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" + integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +vfile-location@^3.0.0, vfile-location@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.2.0.tgz#d8e41fbcbd406063669ebf6c33d56ae8721d0f3c" + integrity sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA== + +vfile-message@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" + integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ== + dependencies: + "@types/unist" "^2.0.0" + unist-util-stringify-position "^2.0.0" + +vfile@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.2.1.tgz#03f1dce28fc625c625bc6514350fbdb00fa9e624" + integrity sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA== + dependencies: + "@types/unist" "^2.0.0" + is-buffer "^2.0.0" + unist-util-stringify-position "^2.0.0" + vfile-message "^2.0.0" + +wait-on@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-6.0.1.tgz#16bbc4d1e4ebdd41c5b4e63a2e16dbd1f4e5601e" + integrity sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw== + dependencies: + axios "^0.25.0" + joi "^17.6.0" + lodash "^4.17.21" + minimist "^1.2.5" + rxjs "^7.5.4" + +watchpack@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" + integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +web-namespaces@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec" + integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw== + +web-worker@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/web-worker/-/web-worker-1.2.0.tgz#5d85a04a7fbc1e7db58f66595d7a3ac7c9c180da" + integrity sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA== + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +webpack-bundle-analyzer@^4.5.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.8.0.tgz#951b8aaf491f665d2ae325d8b84da229157b1d04" + integrity sha512-ZzoSBePshOKhr+hd8u6oCkZVwpVaXgpw23ScGLFpR6SjYI7+7iIWYarjN6OEYOfRt8o7ZyZZQk0DuMizJ+LEIg== + dependencies: + "@discoveryjs/json-ext" "0.5.7" + acorn "^8.0.4" + acorn-walk "^8.0.0" + chalk "^4.1.0" + commander "^7.2.0" + gzip-size "^6.0.0" + lodash "^4.17.20" + opener "^1.5.2" + sirv "^1.0.7" + ws "^7.3.1" + +webpack-dev-middleware@^5.3.1: + version "5.3.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f" + integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== + dependencies: + colorette "^2.0.10" + memfs "^3.4.3" + mime-types "^2.1.31" + range-parser "^1.2.1" + schema-utils "^4.0.0" + +webpack-dev-server@^4.9.3: + version "4.13.2" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.13.2.tgz#d97445481d78691efe6d9a3b230833d802fc31f9" + integrity sha512-5i6TrGBRxG4vnfDpB6qSQGfnB6skGBXNL5/542w2uRGLimX6qeE5BQMLrzIC3JYV/xlGOv+s+hTleI9AZKUQNw== + dependencies: + "@types/bonjour" "^3.5.9" + "@types/connect-history-api-fallback" "^1.3.5" + "@types/express" "^4.17.13" + "@types/serve-index" "^1.9.1" + "@types/serve-static" "^1.13.10" + "@types/sockjs" "^0.3.33" + "@types/ws" "^8.5.1" + ansi-html-community "^0.0.8" + bonjour-service "^1.0.11" + chokidar "^3.5.3" + colorette "^2.0.10" + compression "^1.7.4" + connect-history-api-fallback "^2.0.0" + default-gateway "^6.0.3" + express "^4.17.3" + graceful-fs "^4.2.6" + html-entities "^2.3.2" + http-proxy-middleware "^2.0.3" + ipaddr.js "^2.0.1" + launch-editor "^2.6.0" + open "^8.0.9" + p-retry "^4.5.0" + rimraf "^3.0.2" + schema-utils "^4.0.0" + selfsigned "^2.1.1" + serve-index "^1.9.1" + sockjs "^0.3.24" + spdy "^4.0.2" + webpack-dev-middleware "^5.3.1" + ws "^8.13.0" + +webpack-merge@^5.8.0: + version "5.8.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" + integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== + dependencies: + clone-deep "^4.0.1" + wildcard "^2.0.0" + +webpack-sources@^3.2.2, webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack@^5.73.0: + version "5.77.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.77.0.tgz#dea3ad16d7ea6b84aa55fa42f4eac9f30e7eb9b4" + integrity sha512-sbGNjBr5Ya5ss91yzjeJTLKyfiwo5C628AFjEa6WSXcZa4E+F57om3Cc8xLb1Jh0b243AWuSYRf3dn7HVeFQ9Q== + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^0.0.51" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/wasm-edit" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + acorn "^8.7.1" + acorn-import-assertions "^1.7.6" + browserslist "^4.14.5" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.10.0" + es-module-lexer "^0.9.0" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.9" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.1.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.1.3" + watchpack "^2.4.0" + webpack-sources "^3.2.3" + +webpackbar@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/webpackbar/-/webpackbar-5.0.2.tgz#d3dd466211c73852741dfc842b7556dcbc2b0570" + integrity sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ== + dependencies: + chalk "^4.1.0" + consola "^2.15.3" + pretty-time "^1.1.0" + std-env "^3.0.1" + +websocket-driver@>=0.5.1, websocket-driver@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-typed-array@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" + integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.10" + +which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + +widest-line@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-4.0.1.tgz#a0fc673aaba1ea6f0a0d35b3c2795c9a9cc2ebf2" + integrity sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig== + dependencies: + string-width "^5.0.1" + +wildcard@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" + integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.0.1: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +ws@^7.3.1: + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + +ws@^8.13.0: + version "8.13.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== + +xdg-basedir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" + integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== + +xml-js@^1.6.11: + version "1.6.11" + resolved "https://registry.yarnpkg.com/xml-js/-/xml-js-1.6.11.tgz#927d2f6947f7f1c19a316dd8eea3614e8b18f8e9" + integrity sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g== + dependencies: + sax "^1.2.4" + +xtend@^4.0.0, xtend@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zwitch@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920" + integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw== From 002f166c65b9ad45f9ec174670e762f720925739 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Wed, 5 Apr 2023 15:42:56 +0200 Subject: [PATCH 295/578] update dependencies --- package.json | 8 +- yarn.lock | 803 ++++++++++++--------------------------------------- 2 files changed, 187 insertions(+), 624 deletions(-) diff --git a/package.json b/package.json index c12422a7f1e..12bb4c8a297 100644 --- a/package.json +++ b/package.json @@ -17,17 +17,17 @@ "@docusaurus/core": "^2.2.0", "@docusaurus/preset-classic": "^2.2.0", "@mdx-js/react": "^1.6.21", - "@svgr/webpack": "^5.5.0", + "@svgr/webpack": "^7.0.0", "clsx": "^1.1.1", "file-loader": "^6.2.0", "mdx-mermaid": "^1.2.3", - "mermaid": "^9.1.3", + "mermaid": "^10.1.0", "prettier": "^2.6.2", "pretty-quick": "^3.1.3", "prism-react-renderer": "^1.2.1", - "react": "^17.0.1", + "react": "^18.2.0", "react-countup": "^6.4.0", - "react-dom": "^17.0.1", + "react-dom": "^18.2.0", "url-loader": "^4.1.1" }, "browserslist": { diff --git a/yarn.lock b/yarn.lock index c6f06f36c54..6452807f7eb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -172,7 +172,7 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.12.3", "@babel/core@^7.18.6", "@babel/core@^7.19.6": +"@babel/core@^7.18.6", "@babel/core@^7.19.6", "@babel/core@^7.21.3": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.4.tgz#c6dc73242507b8e2a27fd13a9c1814f9fa34a659" integrity sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA== @@ -891,7 +891,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-react-constant-elements@^7.12.1", "@babel/plugin-transform-react-constant-elements@^7.18.12": +"@babel/plugin-transform-react-constant-elements@^7.18.12", "@babel/plugin-transform-react-constant-elements@^7.21.3": version "7.21.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.21.3.tgz#b32a5556100d424b25e388dd689050d78396884d" integrity sha512-4DVcFeWe/yDYBLp0kBmOGFJ6N2UYg7coGid1gdxb4co62dy/xISDMaYBXBVXEDhfgMk7qkbcYiGtwd5Q/hwDDQ== @@ -1019,7 +1019,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/preset-env@^7.12.1", "@babel/preset-env@^7.18.6", "@babel/preset-env@^7.19.4": +"@babel/preset-env@^7.18.6", "@babel/preset-env@^7.19.4", "@babel/preset-env@^7.20.2": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.21.4.tgz#a952482e634a8dd8271a3fe5459a16eb10739c58" integrity sha512-2W57zHs2yDLm6GD5ZpvNn71lZ0B/iypSdIeq25OurDKji6AdzV07qp4s3n1/x5BqtiGaTrPN3nerlSCaC5qNTw== @@ -1111,7 +1111,7 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-react@^7.12.5", "@babel/preset-react@^7.18.6": +"@babel/preset-react@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d" integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg== @@ -1123,7 +1123,7 @@ "@babel/plugin-transform-react-jsx-development" "^7.18.6" "@babel/plugin-transform-react-pure-annotations" "^7.18.6" -"@babel/preset-typescript@^7.18.6": +"@babel/preset-typescript@^7.18.6", "@babel/preset-typescript@^7.21.0": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.21.4.tgz#b913ac8e6aa8932e47c21b01b4368d8aa239a529" integrity sha512-sMLNWY37TCdRH/bJ6ZeeOH1nPuanED7Ai9Y/vH31IPqalioJ6ZNFUWONsakhv4r4n+I6gm5lmoE0olkgib/j/A== @@ -1179,7 +1179,7 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.12.6", "@babel/types@^7.12.7", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.21.4", "@babel/types@^7.4.4": +"@babel/types@^7.12.7", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.21.3", "@babel/types@^7.21.4", "@babel/types@^7.4.4": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.4.tgz#2d5d6bb7908699b3b416409ffd3b5daa25b030d4" integrity sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA== @@ -1708,6 +1708,13 @@ "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" +"@khanacademy/simple-markdown@^0.8.6": + version "0.8.6" + resolved "https://registry.yarnpkg.com/@khanacademy/simple-markdown/-/simple-markdown-0.8.6.tgz#9c9aef1f5ce2ce60292d13849165965a57c26f25" + integrity sha512-mAUlR9lchzfqunR89pFvNI51jQKsMpJeWYsYWw0DQcUXczn/T/V6510utgvm7X0N3zN87j1SvuKk8cMbl9IAFw== + dependencies: + "@types/react" ">=16.0.0" + "@leichtgewicht/ip-codec@^2.0.1": version "2.0.4" resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" @@ -1827,99 +1834,75 @@ p-map "^4.0.0" webpack-sources "^3.2.2" -"@svgr/babel-plugin-add-jsx-attribute@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz#81ef61947bb268eb9d50523446f9c638fb355906" - integrity sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg== - "@svgr/babel-plugin-add-jsx-attribute@^6.5.1": version "6.5.1" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz#74a5d648bd0347bda99d82409d87b8ca80b9a1ba" integrity sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ== -"@svgr/babel-plugin-remove-jsx-attribute@*": +"@svgr/babel-plugin-add-jsx-attribute@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-7.0.0.tgz#80856c1b7a3b7422d232f6e079f0beb90c4a13e9" + integrity sha512-khWbXesWIP9v8HuKCl2NU2HNAyqpSQ/vkIl36Nbn4HIwEYSRWL0H7Gs6idJdha2DkpFDWlsqMELvoCE8lfFY6Q== + +"@svgr/babel-plugin-remove-jsx-attribute@*", "@svgr/babel-plugin-remove-jsx-attribute@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-7.0.0.tgz#91da77a009dc38e8d30da45d9b62ef8736f2d90a" integrity sha512-iiZaIvb3H/c7d3TH2HBeK91uI2rMhZNwnsIrvd7ZwGLkFw6mmunOCoVnjdYua662MqGFxlN9xTq4fv9hgR4VXQ== -"@svgr/babel-plugin-remove-jsx-attribute@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz#6b2c770c95c874654fd5e1d5ef475b78a0a962ef" - integrity sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg== - -"@svgr/babel-plugin-remove-jsx-empty-expression@*": +"@svgr/babel-plugin-remove-jsx-empty-expression@*", "@svgr/babel-plugin-remove-jsx-empty-expression@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-7.0.0.tgz#5154ff1213509e36ab315974c8c2fd48dafb827b" integrity sha512-sQQmyo+qegBx8DfFc04PFmIO1FP1MHI1/QEpzcIcclo5OAISsOJPW76ZIs0bDyO/DBSJEa/tDa1W26pVtt0FRw== -"@svgr/babel-plugin-remove-jsx-empty-expression@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz#25621a8915ed7ad70da6cea3d0a6dbc2ea933efd" - integrity sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA== - -"@svgr/babel-plugin-replace-jsx-attribute-value@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz#0b221fc57f9fcd10e91fe219e2cd0dd03145a897" - integrity sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ== - "@svgr/babel-plugin-replace-jsx-attribute-value@^6.5.1": version "6.5.1" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz#fb9d22ea26d2bc5e0a44b763d4c46d5d3f596c60" integrity sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg== -"@svgr/babel-plugin-svg-dynamic-title@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz#139b546dd0c3186b6e5db4fefc26cb0baea729d7" - integrity sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg== +"@svgr/babel-plugin-replace-jsx-attribute-value@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-7.0.0.tgz#7e72f44ee57fdbcb02fb0d4a7629466c5242725e" + integrity sha512-i6MaAqIZXDOJeikJuzocByBf8zO+meLwfQ/qMHIjCcvpnfvWf82PFvredEZElErB5glQFJa2KVKk8N2xV6tRRA== "@svgr/babel-plugin-svg-dynamic-title@^6.5.1": version "6.5.1" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz#01b2024a2b53ffaa5efceaa0bf3e1d5a4c520ce4" integrity sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw== -"@svgr/babel-plugin-svg-em-dimensions@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz#6543f69526632a133ce5cabab965deeaea2234a0" - integrity sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw== +"@svgr/babel-plugin-svg-dynamic-title@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-7.0.0.tgz#8caf0449c678ea29be756b89960b2b16c9f33f00" + integrity sha512-BoVSh6ge3SLLpKC0pmmN9DFlqgFy4NxNgdZNLPNJWBUU7TQpDWeBuyVuDW88iXydb5Cv0ReC+ffa5h3VrKfk1w== "@svgr/babel-plugin-svg-em-dimensions@^6.5.1": version "6.5.1" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz#dd3fa9f5b24eb4f93bcf121c3d40ff5facecb217" integrity sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA== -"@svgr/babel-plugin-transform-react-native-svg@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz#00bf9a7a73f1cad3948cdab1f8dfb774750f8c80" - integrity sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q== +"@svgr/babel-plugin-svg-em-dimensions@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-7.0.0.tgz#4db6b5af6d29e93db236b1a013fa953754071d41" + integrity sha512-tNDcBa+hYn0gO+GkP/AuNKdVtMufVhU9fdzu+vUQsR18RIJ9RWe7h/pSBY338RO08wArntwbDk5WhQBmhf2PaA== "@svgr/babel-plugin-transform-react-native-svg@^6.5.1": version "6.5.1" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz#1d8e945a03df65b601551097d8f5e34351d3d305" integrity sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg== -"@svgr/babel-plugin-transform-svg-component@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz#583a5e2a193e214da2f3afeb0b9e8d3250126b4a" - integrity sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ== +"@svgr/babel-plugin-transform-react-native-svg@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-7.0.0.tgz#236995e58b5e36ff06365d5310509ce5391aeec9" + integrity sha512-qw54u8ljCJYL2KtBOjI5z7Nzg8LnSvQOP5hPKj77H4VQL4+HdKbAT5pnkkZLmHKYwzsIHSYKXxHouD8zZamCFQ== "@svgr/babel-plugin-transform-svg-component@^6.5.1": version "6.5.1" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz#48620b9e590e25ff95a80f811544218d27f8a250" integrity sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ== -"@svgr/babel-preset@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-5.5.0.tgz#8af54f3e0a8add7b1e2b0fcd5a882c55393df327" - integrity sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig== - dependencies: - "@svgr/babel-plugin-add-jsx-attribute" "^5.4.0" - "@svgr/babel-plugin-remove-jsx-attribute" "^5.4.0" - "@svgr/babel-plugin-remove-jsx-empty-expression" "^5.0.1" - "@svgr/babel-plugin-replace-jsx-attribute-value" "^5.0.1" - "@svgr/babel-plugin-svg-dynamic-title" "^5.4.0" - "@svgr/babel-plugin-svg-em-dimensions" "^5.4.0" - "@svgr/babel-plugin-transform-react-native-svg" "^5.4.0" - "@svgr/babel-plugin-transform-svg-component" "^5.5.0" +"@svgr/babel-plugin-transform-svg-component@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-7.0.0.tgz#a9b62730acf10d22a2aa57e0f701c0ecbc270430" + integrity sha512-CcFECkDj98daOg9jE3Bh3uyD9kzevCAnZ+UtzG6+BQG/jOQ2OA3jHnX6iG4G1MCJkUQFnUvEv33NvQfqrb/F3A== "@svgr/babel-preset@^6.5.1": version "6.5.1" @@ -1935,14 +1918,19 @@ "@svgr/babel-plugin-transform-react-native-svg" "^6.5.1" "@svgr/babel-plugin-transform-svg-component" "^6.5.1" -"@svgr/core@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/core/-/core-5.5.0.tgz#82e826b8715d71083120fe8f2492ec7d7874a579" - integrity sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ== - dependencies: - "@svgr/plugin-jsx" "^5.5.0" - camelcase "^6.2.0" - cosmiconfig "^7.0.0" +"@svgr/babel-preset@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-7.0.0.tgz#55aaca4cec2ff6515a571715b6b6fa98675b66d9" + integrity sha512-EX/NHeFa30j5UjldQGVQikuuQNHUdGmbh9kEpBKofGUtF0GUPJ4T4rhoYiqDAOmBOxojyot36JIFiDUHUK1ilQ== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "^7.0.0" + "@svgr/babel-plugin-remove-jsx-attribute" "^7.0.0" + "@svgr/babel-plugin-remove-jsx-empty-expression" "^7.0.0" + "@svgr/babel-plugin-replace-jsx-attribute-value" "^7.0.0" + "@svgr/babel-plugin-svg-dynamic-title" "^7.0.0" + "@svgr/babel-plugin-svg-em-dimensions" "^7.0.0" + "@svgr/babel-plugin-transform-react-native-svg" "^7.0.0" + "@svgr/babel-plugin-transform-svg-component" "^7.0.0" "@svgr/core@^6.5.1": version "6.5.1" @@ -1955,12 +1943,15 @@ camelcase "^6.2.0" cosmiconfig "^7.0.1" -"@svgr/hast-util-to-babel-ast@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz#5ee52a9c2533f73e63f8f22b779f93cd432a5461" - integrity sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ== +"@svgr/core@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-7.0.0.tgz#def863d2670c682615583c80b408e83c095c2233" + integrity sha512-ztAoxkaKhRVloa3XydohgQQCb0/8x9T63yXovpmHzKMkHO6pkjdsIAWKOS4bE95P/2quVh1NtjSKlMRNzSBffw== dependencies: - "@babel/types" "^7.12.6" + "@babel/core" "^7.21.3" + "@svgr/babel-preset" "^7.0.0" + camelcase "^6.2.0" + cosmiconfig "^8.1.3" "@svgr/hast-util-to-babel-ast@^6.5.1": version "6.5.1" @@ -1970,15 +1961,13 @@ "@babel/types" "^7.20.0" entities "^4.4.0" -"@svgr/plugin-jsx@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz#1aa8cd798a1db7173ac043466d7b52236b369000" - integrity sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA== +"@svgr/hast-util-to-babel-ast@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-7.0.0.tgz#d457dfbe74ebc1e5a6daf97ded49e9576a3a00cf" + integrity sha512-42Ej9sDDEmsJKjrfQ1PHmiDiHagh/u9AHO9QWbeNx4KmD9yS5d1XHmXUNINfUcykAU+4431Cn+k6Vn5mWBYimQ== dependencies: - "@babel/core" "^7.12.3" - "@svgr/babel-preset" "^5.5.0" - "@svgr/hast-util-to-babel-ast" "^5.5.0" - svg-parser "^2.0.2" + "@babel/types" "^7.21.3" + entities "^4.4.0" "@svgr/plugin-jsx@^6.5.1": version "6.5.1" @@ -1990,14 +1979,15 @@ "@svgr/hast-util-to-babel-ast" "^6.5.1" svg-parser "^2.0.4" -"@svgr/plugin-svgo@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz#02da55d85320549324e201c7b2e53bf431fcc246" - integrity sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ== +"@svgr/plugin-jsx@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-7.0.0.tgz#b9e0c7d05bc890d70163ac0490ba8c41f1afab90" + integrity sha512-SWlTpPQmBUtLKxXWgpv8syzqIU8XgFRvyhfkam2So8b3BE0OS0HPe5UfmlJ2KIC+a7dpuuYovPR2WAQuSyMoPw== dependencies: - cosmiconfig "^7.0.0" - deepmerge "^4.2.2" - svgo "^1.2.2" + "@babel/core" "^7.21.3" + "@svgr/babel-preset" "^7.0.0" + "@svgr/hast-util-to-babel-ast" "^7.0.0" + svg-parser "^2.0.4" "@svgr/plugin-svgo@^6.5.1": version "6.5.1" @@ -2008,19 +1998,14 @@ deepmerge "^4.2.2" svgo "^2.8.0" -"@svgr/webpack@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-5.5.0.tgz#aae858ee579f5fa8ce6c3166ef56c6a1b381b640" - integrity sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g== - dependencies: - "@babel/core" "^7.12.3" - "@babel/plugin-transform-react-constant-elements" "^7.12.1" - "@babel/preset-env" "^7.12.1" - "@babel/preset-react" "^7.12.5" - "@svgr/core" "^5.5.0" - "@svgr/plugin-jsx" "^5.5.0" - "@svgr/plugin-svgo" "^5.5.0" - loader-utils "^2.0.0" +"@svgr/plugin-svgo@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-7.0.0.tgz#325e87cede7bf7106a8099ceaeaa5906176c4bca" + integrity sha512-263znzlu3qTKj71/ot5G9l2vpL4CW+pr2IexBFIwwB+fRAXE9Xnw2rUFgE6P4+37N9siOuC4lKkgBfUCOLFRKQ== + dependencies: + cosmiconfig "^8.1.3" + deepmerge "^4.3.1" + svgo "^3.0.2" "@svgr/webpack@^6.2.1": version "6.5.1" @@ -2036,6 +2021,20 @@ "@svgr/plugin-jsx" "^6.5.1" "@svgr/plugin-svgo" "^6.5.1" +"@svgr/webpack@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-7.0.0.tgz#609ba724a380fd121bb0bc4667b7f213f4021ea9" + integrity sha512-XWzIhLTr5WYns/cNFXpXrmFy+LFf2xp60VnNUBZCpM1CGTx47FCDuUj2DQjxirMf2L6CP2jTRELK8ef01TecFQ== + dependencies: + "@babel/core" "^7.21.3" + "@babel/plugin-transform-react-constant-elements" "^7.21.3" + "@babel/preset-env" "^7.20.2" + "@babel/preset-react" "^7.18.6" + "@babel/preset-typescript" "^7.21.0" + "@svgr/core" "^7.0.0" + "@svgr/plugin-jsx" "^7.0.0" + "@svgr/plugin-svgo" "^7.0.0" + "@szmarczak/http-timer@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" @@ -2213,11 +2212,6 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== -"@types/q@^1.5.1": - version "1.5.5" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df" - integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ== - "@types/qs@*": version "6.9.7" resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" @@ -2254,7 +2248,7 @@ "@types/history" "^4.7.11" "@types/react" "*" -"@types/react@*": +"@types/react@*", "@types/react@>=16.0.0": version "18.0.33" resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.33.tgz#a1575160cb4376787c2f5fe0312302f824baa61e" integrity sha512-sHxzVxeanvQyQ1lr8NSHaj0kDzcNiGpILEVt69g9S31/7PfMvNCKLKcsHw4lYKjs3cGNJjXSP4mYzX43QlnjNA== @@ -2625,14 +2619,6 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -array-buffer-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" - integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== - dependencies: - call-bind "^1.0.2" - is-array-buffer "^3.0.1" - array-differ@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" @@ -2653,17 +2639,6 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.reduce@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz#6b20b0daa9d9734dd6bc7ea66b5bbce395471eac" - integrity sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.7" - arrify@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" @@ -2691,11 +2666,6 @@ autoprefixer@^10.4.12, autoprefixer@^10.4.7: picocolors "^1.0.0" postcss-value-parser "^4.2.0" -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== - axios@^0.25.0: version "0.25.0" resolved "https://registry.yarnpkg.com/axios/-/axios-0.25.0.tgz#349cfbb31331a9b4453190791760a8d35b093e0a" @@ -2817,7 +2787,7 @@ bonjour-service@^1.0.11: fast-deep-equal "^3.1.3" multicast-dns "^7.2.5" -boolbase@^1.0.0, boolbase@~1.0.0: +boolbase@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== @@ -2954,7 +2924,7 @@ ccount@^1.0.0: resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043" integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== -chalk@^2.0.0, chalk@^2.4.1: +chalk@^2.0.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -3101,15 +3071,6 @@ clsx@^1.1.1, clsx@^1.2.1: resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== -coa@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" - integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== - dependencies: - "@types/q" "^1.5.1" - chalk "^2.4.1" - q "^1.1.2" - collapse-white-space@^1.0.2: version "1.0.6" resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" @@ -3332,7 +3293,7 @@ cosmiconfig@^6.0.0: path-type "^4.0.0" yaml "^1.7.2" -cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: +cosmiconfig@^7.0.1: version "7.1.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== @@ -3410,21 +3371,6 @@ css-minimizer-webpack-plugin@^4.0.0: serialize-javascript "^6.0.0" source-map "^0.6.1" -css-select-base-adapter@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" - integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== - -css-select@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" - integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== - dependencies: - boolbase "^1.0.0" - css-what "^3.2.1" - domutils "^1.7.0" - nth-check "^1.0.2" - css-select@^4.1.3: version "4.3.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" @@ -3447,14 +3393,6 @@ css-select@^5.1.0: domutils "^3.0.1" nth-check "^2.0.1" -css-tree@1.0.0-alpha.37: - version "1.0.0-alpha.37" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" - integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== - dependencies: - mdn-data "2.0.4" - source-map "^0.6.1" - css-tree@^1.1.2, css-tree@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" @@ -3463,10 +3401,21 @@ css-tree@^1.1.2, css-tree@^1.1.3: mdn-data "2.0.14" source-map "^0.6.1" -css-what@^3.2.1: - version "3.4.2" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" - integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== +css-tree@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" + integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== + dependencies: + mdn-data "2.0.30" + source-map-js "^1.0.1" + +css-tree@~2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.2.1.tgz#36115d382d60afd271e377f9c5f67d02bd48c032" + integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA== + dependencies: + mdn-data "2.0.28" + source-map-js "^1.0.1" css-what@^6.0.1, css-what@^6.1.0: version "6.1.0" @@ -3539,13 +3488,20 @@ cssnano@^5.1.12, cssnano@^5.1.8: lilconfig "^2.0.3" yaml "^1.10.2" -csso@^4.0.2, csso@^4.2.0: +csso@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== dependencies: css-tree "^1.1.2" +csso@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6" + integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ== + dependencies: + css-tree "~2.2.0" + csstype@^3.0.2: version "3.1.2" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" @@ -3817,10 +3773,10 @@ d3@^7.4.0, d3@^7.8.2: d3-transition "3" d3-zoom "3" -dagre-d3-es@7.0.9: - version "7.0.9" - resolved "https://registry.yarnpkg.com/dagre-d3-es/-/dagre-d3-es-7.0.9.tgz#aca12fccd9d09955a4430029ba72ee6934542a8d" - integrity sha512-rYR4QfVmy+sR44IBDvVtcAmOReGBvRCWDpO2QjYwqgh9yijw6eSHBqaPG/LIOEy7aBsniLvtMW6pg19qJhq60w== +dagre-d3-es@7.0.10: + version "7.0.10" + resolved "https://registry.yarnpkg.com/dagre-d3-es/-/dagre-d3-es-7.0.10.tgz#19800d4be674379a3cd8c86a8216a2ac6827cadc" + integrity sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A== dependencies: d3 "^7.8.2" lodash-es "^4.17.21" @@ -3856,7 +3812,7 @@ deep-extend@^0.6.0: resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== -deepmerge@^4.2.2: +deepmerge@^4.2.2, deepmerge@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== @@ -3878,7 +3834,7 @@ define-lazy-prop@^2.0.0: resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== -define-properties@^1.1.3, define-properties@^1.1.4: +define-properties@^1.1.4: version "1.2.0" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== @@ -3976,14 +3932,6 @@ dom-converter@^0.2.0: dependencies: utila "~0.4" -dom-serializer@0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - dom-serializer@^1.0.1: version "1.4.1" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" @@ -4002,11 +3950,6 @@ dom-serializer@^2.0.0: domhandler "^5.0.2" entities "^4.2.0" -domelementtype@1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" @@ -4026,18 +3969,10 @@ domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3: dependencies: domelementtype "^2.3.0" -dompurify@2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.4.3.tgz#f4133af0e6a50297fc8874e2eaedc13a3c308c03" - integrity sha512-q6QaLcakcRjebxjg8/+NP+h0rPfatOgOzc46Fst9VAA3jF2ApfKBNKMzdP4DYTqtUMXSCd5pRS/8Po/OmoCHZQ== - -domutils@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" +dompurify@2.4.5: + version "2.4.5" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.4.5.tgz#0e89a27601f0bad978f9a924e7a05d5d2cccdd87" + integrity sha512-jggCCd+8Iqp4Tsz0nIvpcb22InKEBrGz5dw3EQJMs8HPJDsKbFIO3STYtAvCfDx26Muevn1MHVI0XxjgFfmiSA== domutils@^2.5.2, domutils@^2.8.0: version "2.8.0" @@ -4159,74 +4094,11 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.20.4: - version "1.21.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff" - integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg== - dependencies: - array-buffer-byte-length "^1.0.0" - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-set-tostringtag "^2.0.1" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.2.0" - get-symbol-description "^1.0.0" - globalthis "^1.0.3" - gopd "^1.0.1" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" - is-callable "^1.2.7" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-typed-array "^1.1.10" - is-weakref "^1.0.2" - object-inspect "^1.12.3" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.4.3" - safe-regex-test "^1.0.0" - string.prototype.trim "^1.2.7" - string.prototype.trimend "^1.0.6" - string.prototype.trimstart "^1.0.6" - typed-array-length "^1.0.4" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.9" - -es-array-method-boxes-properly@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" - integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== - es-module-lexer@^0.9.0: version "0.9.3" resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== -es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== - dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" - has-tostringtag "^1.0.0" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -4551,13 +4423,6 @@ follow-redirects@^1.0.0, follow-redirects@^1.14.7: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - fork-ts-checker-webpack-plugin@^6.5.0: version "6.5.3" resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz#eda2eff6e22476a2688d10661688c47f611b37f3" @@ -4631,27 +4496,12 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -function.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" - -functions-have-names@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== @@ -4684,14 +4534,6 @@ get-stream@^6.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - github-slugger@^1.4.0: version "1.5.0" resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.5.0.tgz#17891bbc73232051474d68bd867a34625c955f7d" @@ -4756,13 +4598,6 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== - dependencies: - define-properties "^1.1.3" - globby@^11.0.1, globby@^11.0.4, globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" @@ -4786,13 +4621,6 @@ globby@^13.1.1: merge2 "^1.4.1" slash "^4.0.0" -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - got@^9.6.0: version "9.6.0" resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" @@ -4837,11 +4665,6 @@ handle-thing@^2.0.0: resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -4859,23 +4682,11 @@ has-property-descriptors@^1.0.0: dependencies: get-intrinsic "^1.1.1" -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - -has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: +has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - has-yarn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" @@ -5217,15 +5028,6 @@ inline-style-parser@0.1.1: resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== -internal-slot@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== - dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" - side-channel "^1.0.4" - "internmap@1 - 2": version "2.0.3" resolved "https://registry.yarnpkg.com/internmap/-/internmap-2.0.3.tgz#6685f23755e43c524e251d29cbc97248e3061009" @@ -5266,27 +5068,11 @@ is-alphanumerical@^1.0.0: is-alphabetical "^1.0.0" is-decimal "^1.0.0" -is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" - integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.0" - is-typed-array "^1.1.10" - is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -5294,24 +5080,11 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - is-buffer@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" @@ -5326,13 +5099,6 @@ is-core-module@^2.9.0: dependencies: has "^1.0.3" -is-date-object@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - is-decimal@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" @@ -5378,23 +5144,11 @@ is-installed-globally@^0.4.0: global-dirs "^3.0.0" is-path-inside "^3.0.2" -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== - is-npm@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8" integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -5437,14 +5191,6 @@ is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - is-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" @@ -5455,55 +5201,16 @@ is-root@^2.1.0: resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" - is-stream@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-typed-array@^1.1.10, is-typed-array@^1.1.9: - version "1.1.10" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" - integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - is-typedarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - is-whitespace-character@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7" @@ -5883,10 +5590,15 @@ mdn-data@2.0.14: resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== -mdn-data@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" - integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== +mdn-data@2.0.28: + version "2.0.28" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba" + integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g== + +mdn-data@2.0.30: + version "2.0.30" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" + integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== mdurl@^1.0.0: version "1.0.1" @@ -5925,19 +5637,20 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -mermaid@^9.1.3: - version "9.4.3" - resolved "https://registry.yarnpkg.com/mermaid/-/mermaid-9.4.3.tgz#62cf210c246b74972ea98c19837519b6f03427f2" - integrity sha512-TLkQEtqhRSuEHSE34lh5bCa94KATCyluAXmFnNI2PRZwOpXFeqiJWwZl+d2CcemE1RS6QbbueSSq9QIg8Uxcyw== +mermaid@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/mermaid/-/mermaid-10.1.0.tgz#6e40d5250174f4750ca6548e4ee00f6ae210855a" + integrity sha512-LYekSMNJygI1VnMizAPUddY95hZxOjwZxr7pODczILInO0dhQKuhXeu4sargtnuTwCilSuLS7Uiq/Qn7HTVrmA== dependencies: "@braintree/sanitize-url" "^6.0.0" + "@khanacademy/simple-markdown" "^0.8.6" cytoscape "^3.23.0" cytoscape-cose-bilkent "^4.1.0" cytoscape-fcose "^2.1.0" d3 "^7.4.0" - dagre-d3-es "7.0.9" + dagre-d3-es "7.0.10" dayjs "^1.11.7" - dompurify "2.4.3" + dompurify "2.4.5" elkjs "^0.8.2" khroma "^2.0.0" lodash-es "^4.17.21" @@ -6018,18 +5731,11 @@ minimatch@3.1.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1: dependencies: brace-expansion "^1.1.7" -minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: +minimist@^1.2.0, minimist@^1.2.5: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== -mkdirp@~0.5.1: - version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - mri@^1.1.5: version "1.2.0" resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" @@ -6158,13 +5864,6 @@ nprogress@^0.2.0: resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" integrity sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA== -nth-check@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - nth-check@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" @@ -6177,7 +5876,7 @@ object-assign@^4.1.0, object-assign@^4.1.1: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.12.3, object-inspect@^1.9.0: +object-inspect@^1.9.0: version "1.12.3" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== @@ -6187,7 +5886,7 @@ object-keys@^1.1.1: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@^4.1.0, object.assign@^4.1.4: +object.assign@^4.1.0: version "4.1.4" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== @@ -6197,25 +5896,6 @@ object.assign@^4.1.0, object.assign@^4.1.4: has-symbols "^1.0.3" object-keys "^1.1.1" -object.getownpropertydescriptors@^2.1.0: - version "2.1.5" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz#db5a9002489b64eef903df81d6623c07e5b4b4d3" - integrity sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw== - dependencies: - array.prototype.reduce "^1.0.5" - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -object.values@^1.1.0: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" - integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" @@ -6892,11 +6572,6 @@ pure-color@^1.2.0: resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e" integrity sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA== -q@^1.1.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== - qs@6.11.0: version "6.11.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" @@ -7001,14 +6676,13 @@ react-dev-utils@^12.0.1: strip-ansi "^6.0.1" text-table "^0.2.0" -react-dom@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" - integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== +react-dom@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler "^0.20.2" + scheduler "^0.23.0" react-error-overlay@^6.0.11: version "6.0.11" @@ -7102,13 +6776,12 @@ react-textarea-autosize@^8.3.2: use-composed-ref "^1.3.0" use-latest "^1.2.1" -react@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" - integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== +react@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" readable-stream@^2.0.1: version "2.3.8" @@ -7182,15 +6855,6 @@ regenerator-transform@^0.15.1: dependencies: "@babel/runtime" "^7.8.4" -regexp.prototype.flags@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" - regexpu-core@^5.3.1: version "5.3.2" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" @@ -7409,32 +7073,22 @@ safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-regex-test@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - is-regex "^1.1.4" - "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sax@^1.2.4, sax@~1.2.4: +sax@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -scheduler@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" - integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" schema-utils@2.7.0: version "2.7.0" @@ -7695,7 +7349,7 @@ sort-css-media-queries@2.1.0: resolved "https://registry.yarnpkg.com/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz#7c85e06f79826baabb232f5560e9745d7a78c4ce" integrity sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA== -source-map-js@^1.0.2: +source-map-js@^1.0.1, source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== @@ -7794,33 +7448,6 @@ string-width@^5.0.1: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string.prototype.trim@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" - integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -string.prototype.trimend@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" - integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -string.prototype.trimstart@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" - integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -7924,30 +7551,11 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -svg-parser@^2.0.2, svg-parser@^2.0.4: +svg-parser@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== -svgo@^1.2.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" - integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== - dependencies: - chalk "^2.4.1" - coa "^2.0.2" - css-select "^2.0.0" - css-select-base-adapter "^0.1.1" - css-tree "1.0.0-alpha.37" - csso "^4.0.2" - js-yaml "^3.13.1" - mkdirp "~0.5.1" - object.values "^1.1.0" - sax "~1.2.4" - stable "^0.1.8" - unquote "~1.1.1" - util.promisify "~1.0.0" - svgo@^2.7.0, svgo@^2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" @@ -7961,6 +7569,18 @@ svgo@^2.7.0, svgo@^2.8.0: picocolors "^1.0.0" stable "^0.1.8" +svgo@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.0.2.tgz#5e99eeea42c68ee0dc46aa16da093838c262fe0a" + integrity sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ== + dependencies: + "@trysound/sax" "0.2.0" + commander "^7.2.0" + css-select "^5.1.0" + css-tree "^2.2.1" + csso "^5.0.5" + picocolors "^1.0.0" + tapable@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" @@ -8087,15 +7707,6 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -typed-array-length@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" - integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== - dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - is-typed-array "^1.1.9" - typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -8108,16 +7719,6 @@ ua-parser-js@^0.7.30: resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.35.tgz#8bda4827be4f0b1dda91699a29499575a1f1d307" integrity sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g== -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - unherit@^1.0.4: version "1.1.3" resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22" @@ -8248,11 +7849,6 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -unquote@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" - integrity sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg== - update-browserslist-db@^1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" @@ -8331,16 +7927,6 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -util.promisify@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" - integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.2" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.0" - utila@~0.4: version "0.4.0" resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" @@ -8578,29 +8164,6 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-typed-array@^1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" - integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - is-typed-array "^1.1.10" - which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" From 262440454d4de4dec225659e899a76373b900ec6 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 5 Apr 2023 15:44:21 +0200 Subject: [PATCH 296/578] ink! Playground RFP (#1654) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Initial draft * Update docs/RFPs/Open/IDE_for_ink!_Smart_Contracts.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update docs/RFPs/Open/IDE_for_ink!_Smart_Contracts.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update ink! smart contract ide rfp * remove link * update rfps doc * Update docs/RFPs/Open/IDE_for_ink!_Smart_Contracts.md Co-authored-by: Sebastian Müller --------- Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Co-authored-by: Sebastian Müller --- .../RFPs/Open/IDE_for_ink!_Smart_Contracts.md | 22 +++++++++++++++++++ docs/rfps.md | 1 + 2 files changed, 23 insertions(+) create mode 100644 docs/RFPs/Open/IDE_for_ink!_Smart_Contracts.md diff --git a/docs/RFPs/Open/IDE_for_ink!_Smart_Contracts.md b/docs/RFPs/Open/IDE_for_ink!_Smart_Contracts.md new file mode 100644 index 00000000000..273c0449f22 --- /dev/null +++ b/docs/RFPs/Open/IDE_for_ink!_Smart_Contracts.md @@ -0,0 +1,22 @@ +# Browser based IDE for ink! Smart Contracts + +* **Status:** Open +* **Proposer:** [David Hawig](https://github.com/Noc2) + +## Project Description :page_facing_up: + +[ink!](https://github.com/paritytech/ink) is a domain-specific language for writing smart contracts in Rust and compiles to Wasm code. You can deploy ink! contracts on parachains that support the contracts pallet, as well as on stand-alone blockchains built with Substrate. + +The goal of this RFP is to find teams that would like to develop or maintain a browser-based playground for editing, compiling & sharing ink! smart contracts. The [ink! Playground](https://ink-playground.substrate.io/), previously maintained by Parity, utilizes Typescript, React, Docker, and [Monaco Editor](https://microsoft.github.io/monaco-editor/). Teams could continue to work on the [ink! Playground](https://github.com/paritytech/ink-playground), or choose to build something new if desired. For example, it might be possible to leverage GitHub Codespaces in combination with GitHub Actions or the previously developed [ink! Remix plugin](https://github.com/blockchain-it-hr/ink-remix-plugin). + +**Useful resources:** +- [ink!](https://use.ink/) +- [ink-playground](https://ink-playground.substrate.io) +- [GitHub ink-playground](https://github.com/paritytech/ink-playground) +- [GitHub: ink! Remix plugin](https://github.com/blockchain-it-hr/ink-remix-plugin) + +## Deliverables + +The structure of the grant and the milestones depends highly on the project itself. It’s therefore up to the applying team to come up with a milestone and delivery structure. + + diff --git a/docs/rfps.md b/docs/rfps.md index fbe7b431d58..857aa1885f4 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -43,6 +43,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [identity-directory.md](RFPs/Under%20Development/identity-directory.md) | 🟡 | 30.05.2022 | | [implementation-benchmarking.md](RFPs/Open/implementation-benchmarking.md) | 🟡 | 16.03.2023 | | [ink!_smart_contract_block_explorer.md](RFPs/Under%20Development/ink_smart_contract_block_explorer.md) | 🟡 | 05.07.2021 | +| [IDE_for_ink!_Smart_Contracts.md](RFPs/Open/IDE_for_ink!_Smart_Contracts.md) | 🟢 | 05.04.2023 | | [ISO_20022.md](RFPs/Open/ISO_20022.md) | 🟢 | 31.05.2022 | | [ISO_8583.md](RFPs/Open/ISO_8583.md) | 🟡 | 31.05.2022 | | [ksm-tipping-button.md](RFPs/Closed/ksm-tipping-button.md) | 🔴 | 20.07.2021 | From 26b7868b921492dcca18cc22c1f8c9b5a9008a14 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Wed, 5 Apr 2023 15:51:47 +0200 Subject: [PATCH 297/578] fix link --- ...r_ink!_Smart_Contracts.md => IDE_for_ink_Smart_Contracts.md} | 0 docs/rfps.md | 2 +- yarn.lock | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename docs/RFPs/Open/{IDE_for_ink!_Smart_Contracts.md => IDE_for_ink_Smart_Contracts.md} (100%) diff --git a/docs/RFPs/Open/IDE_for_ink!_Smart_Contracts.md b/docs/RFPs/Open/IDE_for_ink_Smart_Contracts.md similarity index 100% rename from docs/RFPs/Open/IDE_for_ink!_Smart_Contracts.md rename to docs/RFPs/Open/IDE_for_ink_Smart_Contracts.md diff --git a/docs/rfps.md b/docs/rfps.md index 857aa1885f4..80c6cd57997 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -43,7 +43,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [identity-directory.md](RFPs/Under%20Development/identity-directory.md) | 🟡 | 30.05.2022 | | [implementation-benchmarking.md](RFPs/Open/implementation-benchmarking.md) | 🟡 | 16.03.2023 | | [ink!_smart_contract_block_explorer.md](RFPs/Under%20Development/ink_smart_contract_block_explorer.md) | 🟡 | 05.07.2021 | -| [IDE_for_ink!_Smart_Contracts.md](RFPs/Open/IDE_for_ink!_Smart_Contracts.md) | 🟢 | 05.04.2023 | +| [IDE_for_ink_Smart_Contracts.md](RFPs/Open/IDE_for_ink_Smart_Contracts.md) | 🟢 | 05.04.2023 | | [ISO_20022.md](RFPs/Open/ISO_20022.md) | 🟢 | 31.05.2022 | | [ISO_8583.md](RFPs/Open/ISO_8583.md) | 🟡 | 31.05.2022 | | [ksm-tipping-button.md](RFPs/Closed/ksm-tipping-button.md) | 🔴 | 20.07.2021 | diff --git a/yarn.lock b/yarn.lock index 6452807f7eb..08630702670 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1745,7 +1745,7 @@ unist-builder "2.0.3" unist-util-visit "2.0.3" -"@mdx-js/react@^1.6.21", "@mdx-js/react@^1.6.22": +"@mdx-js/react@^1.6.22": version "1.6.22" resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.6.22.tgz#ae09b4744fddc74714ee9f9d6f17a66e77c43573" integrity sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg== From 9c24c28c589aeef2fe908d7773eebcf048eed308 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Wed, 5 Apr 2023 15:55:05 +0200 Subject: [PATCH 298/578] @mdx-js/react": "^1.6.22" --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 12bb4c8a297..19562c32556 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "dependencies": { "@docusaurus/core": "^2.2.0", "@docusaurus/preset-classic": "^2.2.0", - "@mdx-js/react": "^1.6.21", + "@mdx-js/react": "^1.6.22", "@svgr/webpack": "^7.0.0", "clsx": "^1.1.1", "file-loader": "^6.2.0", From 90fad5889685f5387ab29596119cffb9c501d34e Mon Sep 17 00:00:00 2001 From: Jean-Luc Leleu Date: Wed, 5 Apr 2023 16:35:14 +0200 Subject: [PATCH 299/578] Interstellar - Wallet Phase 2 (follow-up) (#1543) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Follow up (#4) * Create Interstellar-network2.md * Update applications/Interstellar-network2.md Co-authored-by: Sebastian Müller * Update Interstellar-network2.md * update * update * update * update * update * update * focus miletsones on circuit and garbling pallet PoC * payment address and level updated * Fiat timestamp updated --------- Co-authored-by: Sebastian Müller --- applications/Interstellar-network2.md | 201 ++++++++++++++++++++++++++ 1 file changed, 201 insertions(+) create mode 100644 applications/Interstellar-network2.md diff --git a/applications/Interstellar-network2.md b/applications/Interstellar-network2.md new file mode 100644 index 00000000000..2235d0572c5 --- /dev/null +++ b/applications/Interstellar-network2.md @@ -0,0 +1,201 @@ +# Interstellar - Wallet Phase 2 + + +- **Team Name:** Interstellar +- **Payment Address:** Fiat 04.04.2023, 22:42 +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + + +## Project Overview :page_facing_up: + +**Follow-up of Interstellar- Wallet Phase 1**: Link to the application pull request: [w3f/Grants-Program#734](https://github.com/w3f/Grants-Program/pull/734). Amendment: [w3f/Grants-Program#1354](https://github.com/w3f/Grants-Program/pull/1354) + +### Overview + +**The FTX collapse highlights the importance of self-custody for the Web3 ecosystem**. + +Currently, there are only two categories of self-custodial wallets available: Hot Wallets and Cold Wallets. Both options come with significant trade-offs and are not well-suited for providing blockchain access to the general public. + +To address the most crucial issues faced by current wallet options - User Experience and Security - a new type of wallet is required. + +Typically, when we think about accessing the blockchain through a cold wallet, we expect a complicated user experience. +Interstellar aims to change this perception through a new approach and technology. + +We strongly believe that securely linking and registering access device security components with a blockchain-based autonomous system is an extremely powerful concept. It can provide a future-proof solution for addressing the current security, usability, and privacy issues associated with current **centralized** non-custodial wallet software. + +In terms of security, this approach utilizes the current and future mobile device security capabilities by implementing a secure distributed protocol. It addresses the current lack of third-party protection and management while also adding the necessary decentralized backend services to enhance security against evolving cyber threats. + +Regarding usability, this approach simplifies the user experience by adding transparent services like Instant Onboarding. + +Privacy can also be addressed using methods such as stealth addresses and other private schemes. + +Additionally, implementing this approach increases the overall system's auditability, potentially enabling the management of a guarantee fund to aid users in case of issues. + +Furthermore, this approach can enable new types of recovery schemes that would be impossible without a secure decentralized autonomous system backend. + + +A **highly secure and convenient wallet system** is necessary to combat cyber threats and ensures larger adoption. + +Our solution transforms mobile devices into cold wallets, with private keys protected at the hardware level: + +- Secure Element on mobile for proxy private keys associated with transaction requests and confirmations. +- Trusted Execution Environment (TEE) on nodes for private keys associated with assets. + +This hardware security, combined with a Trusted Transaction Validation Protocol, offers robust protection against state-of-the-art malware, including banking Trojans, and prepares for future targeted attacks. + +Interstellar is more than a wallet, we have designed **a novel secure access layer for web3** managed with a blockchain that register mobile hardware/secure elements/TEEs to protect transaction with a strong multifactor authentication (based on hardware and software computation privacy scheme i.e. garbled circuit). + +Using a blockchain for the management of multi-chain transactions offers extra security and auditability features and dramatically increase convenience for the user: + +- **Instant Access to Web3 services**, without any wallet set-up. +- **Trusted beneficiaries/contacts**, with destination public keys stored only on the blockchain nodes. +- **Adaptive Security**, allowing users to personalize the security level based on theirs need i.e. transaction amount to trigger validation, chose number of recovery options, etc. +- **Transaction auditability**, extra auditability security layer. +- **Social Recovery** ideally based on Polkadot pallet. + +In the medium/long term (see future plan for more details): + +- **A novel hardware-based recovery (through NFC/BLE) to further enhance security and convenience**, i.e. just a tap on your mobile with your NFC device to trigger the recovery process. + +- **ML real-time Malware detection model** based on proof of legitimate software execution protection that increases the model accuracy (potential research project to address targeted attacks) +- **User inputs verification** based on behavioral biometric model (proven with 99% accuracy) that can be correlated with ML detection model. + + +This approach achieves a **highly secure level for newcomers to easily onboard web3**, and serves as an **alternative to hardware wallets for crypto veterans**. + +Our technology has the potential to disrupt the hardware wallet, smart contract wallet, and even hot wallet markets. + + +### Project Details + + +A short video on the Interstellar solution (click on the following image) + +[](https://clipchamp.com/watch/nwzybRger1x "Interstellar Video: 55") +- Designs of UI components +https://book.interstellar.gg/Mobile_App.html + +- Documentation of core components +https://book.interstellar.gg/ + +#### Architecture Overview +![Architecture overview](https://book.interstellar.gg/fig/Architecture-mobile-L1-L2-Signers.svg "architecture L1 L2 signer") +#### TTVP Detailed +![TTVP Detailed](https://book.interstellar.gg/fig/Transaction_Validation_Module.svg "TTVP detailed") + + +#### Technology stack + +- VHDL +- C/C++ +- Java/Kotlin/Jetpack Compose/Swift/Swift UI +- gRPC +- Rust/Substrate +- IPFS + + +### Ecosystem Fit + +At parisDOT.comm we had a fantastic opportunity to present our project to the leading teams in the Polkadot Parachain community. And the feedback we received was nothing short of extraordinary. Our solution, which aims to provide both hardware security and user-friendliness in a wallet solution, struck a chord with the teams. + +Their positive response is a testament to the importance of a solution that addresses this critical need in the Polkadot ecosystem and beyond. The teams were not only impressed with our solution, but they were also eager to put it to the test as soon as it becomes available. + +This is a major market fit milestone for us, and we're thrilled to have the support of such influential players in the Polkadot community. We're dedicated to delivering a solution that meets their expectations and contributes to the continued growth and success of the Polkadot ecosystem. + +We are in active conversations with some of the teams we met there, and continuously have new discussions with new teams also beyond the Polkadot ecosystem. So far, everyone is impressed and enthusiastic about the solution. + + +## Team :busts_in_silhouette: + + +### Team members +- Name of team leader: +- Jean-Luc Leleu +- Names of team members: +- Nathan Prat +- Eliot Leleu + +- Philippe Salats (advisor) + +### Contact + +- **Contact Name:** Jean-Luc Leleu +- **Contact Email:** jll@interstellar.gg +- **Website:** + + +### Legal Structure + +- **Registered Address:** 61 rue de Lyon, Paris, France +- **Registered Legal Entity:** Interstellar SAS + +### Team's experience +We are now multiple security and fintech entrepreneurs, security researchers, patents fillers who turned open-source developers and blockchain enthusiasts. + + +### Team Code Repos + +- + +- + +### Team LinkedIn Profiles (if available) + +- Jean-Luc Leleu + +- Nathan Part + +- Eliot Leleu + + +- Philippe Salats (advisor) + + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 2 months +- **Full-Time Equivalent (FTE):** 2.5 +- **Total Costs:** 30,000 USD + +### Milestone 1 — New Garbling scheme + +- **Estimated duration:** 4 weeks +- **FTE:** 2.5 +- **Costs:** 15,000 USD + + +| Number | Deliverable | Specification | +| ------: | ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **0a.** | License | APACHE 2 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) spin up our stack and send test transactions, which will show how the new functionality works. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | | | | +| 1. | Garble Circuit pallet update | We will rewrite the garbled circuit evaluation scheme to target at least **60 fps** through parralelization, caching and likely with an efficient [1.permutation-based garbling scheme: see 4.5](https://www.cs.fsu.edu/~tvhoang/thesis.pdf) optimized for performance or a [2.new garbling scheme](https://www.esat.kuleuven.be/cosic/publications/article-3351.pdf) that could potentially require lower computation cost per gate| + + + + +### Milestone 2 — Circuit design optimization and light security screen + +- **Estimated duration:** 4 weeks +- **FTE:** 2.5 +- **Costs:** 15,000 USD + + +| Number | Deliverable | Specification | +| ------: | ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **0a.** | License | APACHE 2 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) spin up our stack and send test transactions, which will show how the new functionality works. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | | | | +| 1. | Display Circuit update | We will modify the current display circuit to enable a more comfortable user experience by decreasing the cognitive load needed for the user to read the screen. - likely by adding specific sub-circuits to manage a set of probabilities of displaying segments for each frame, then fine tuned segments ON/OFF per frame to improve readbility +| 2. | Light security screen | We will provide a less secure but very comfortable to read secure screen version using fading with less blinking (link) - this non-screenshot proof version will be used later with our adaptive security framework | + + + + + + + From b1464e08fb5c661eb814c73257ecbe4756e5c82c Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 5 Apr 2023 16:37:32 +0200 Subject: [PATCH 300/578] Update index.md Add Interstellar - Wallet Phase 2 --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 4898be027fa..90527be513e 100644 --- a/applications/index.md +++ b/applications/index.md @@ -27,7 +27,7 @@ Use this page for an overview of all public grants and their status. Use the sid | Team | Project | Link | Terminated | First Delivery | Completed | | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------------------------------- | :--------- | :------------: | :--------: | - +| [Interstellar](https://www.interstellar.gg/) | [Interstellar - Wallet Phase 2](./Interstellar-network2.md) | [GitHub](https://github.com/Interstellar-Network) | ☐ | ☐ | ☐ | ### 🏄‍♀️ Wave 17 - First Quarter 2023 From c113368f9e642dc01f1f4e5f392d5858b5775a8e Mon Sep 17 00:00:00 2001 From: Noc2 Date: Wed, 5 Apr 2023 16:44:26 +0200 Subject: [PATCH 301/578] website fix --- applications/Interstellar-network2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/Interstellar-network2.md b/applications/Interstellar-network2.md index 2235d0572c5..fb4363d91e2 100644 --- a/applications/Interstellar-network2.md +++ b/applications/Interstellar-network2.md @@ -71,7 +71,7 @@ Our technology has the potential to disrupt the hardware wallet, smart contract A short video on the Interstellar solution (click on the following image) -[](https://clipchamp.com/watch/nwzybRger1x "Interstellar Video: 55") +[](https://clipchamp.com/watch/nwzybRger1x "Interstellar Video: 55") - Designs of UI components https://book.interstellar.gg/Mobile_App.html From 112c919325f05cd1190d3107dd18d7e7aea40ad8 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Wed, 5 Apr 2023 17:11:47 +0200 Subject: [PATCH 302/578] update numbers --- src/components/HomepageFeatures.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/HomepageFeatures.js b/src/components/HomepageFeatures.js index c5823289807..ba9a776a5fb 100644 --- a/src/components/HomepageFeatures.js +++ b/src/components/HomepageFeatures.js @@ -6,14 +6,14 @@ import CountUp from 'react-countup'; const FeatureList = [ { - title: 1100, + title: 1300, description: ( <>applications ), }, { - title: 450, + title: 500, description: ( <>projects funded From 434fd9a14848c277897d4b5841dfc639d42b2a9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 6 Apr 2023 11:33:05 +0200 Subject: [PATCH 303/578] Improve grants list navigation --- applications/index.md | 121 ++++++++++++++++++++---------------------- 1 file changed, 59 insertions(+), 62 deletions(-) diff --git a/applications/index.md b/applications/index.md index 90527be513e..aa3667960fe 100644 --- a/applications/index.md +++ b/applications/index.md @@ -11,27 +11,41 @@ Use this page for an overview of all public grants and their status. Use the sid > > Besides, **there is a clear difference between an application being accepted and the successful delivery of the respective project**, and only teams that have successfully delivered a milestone are allowed to make public announcements on the matter or to use our [badge](https://github.com/w3f/General-Grants-Program/blob/master/grants/grant-badge-guidelines.md). The badge can also never be used as a general endorsement for a team. Violations to this policy can be reported [here](mailto:grants@web3.foundation). -## Menu -- [2023](#2023): [18](#%EF%B8%8F-wave-18---second-quarter-2023), [17](#%EF%B8%8F-wave-17---first-quarter-2023) -- [2022](#2022): [16](#%EF%B8%8F-wave-16---fourth-quarter-2022), [15](#%EF%B8%8F-wave-15---third-quarter-2022), [14](#%EF%B8%8F-wave-14---second-quarter-2022), [13](#%EF%B8%8F-wave-13---first-quarter-2022) -- [2021](#2021): [12](#%EF%B8%8F-wave-12---fourth-quarter-2021), [11](#%EF%B8%8F-wave-11---third-quarter-2021), [10](#%EF%B8%8F-wave-10---second-quarter-2021), [9](#%EF%B8%8F-wave-9---first-quarter-2021) -- [2020](#2020): [8](#%EF%B8%8F-wave-8---fourth-quarter-2020), [7](#%EF%B8%8F-wave-7---third-quarter-2020), [6](#%EF%B8%8F-wave-6---second-quarter-2020), [5](#%EF%B8%8F-wave-5---first-quarter-2020) -- [2019](#2019): [4](#%EF%B8%8F-wave-4---fourth-quarter-2019), [3](#%EF%B8%8F-wave-3---third-quarter-2019), [2](#%EF%B8%8F-wave-2---second-quarter-2019), [1](#%EF%B8%8F-wave-1---first-quarter-2019) +- [2023](#2023) + - [🏄‍♀️ Wave 18 - Q2 2023](#️-wave-18---q2-2023) + - [🏄‍♀️ Wave 17 - Q1 2023](#️-wave-17---q1-2023) +- [2022](#2022) + - [🏄‍♀️ Wave 16 - Q4 2022](#️-wave-16---q4-2022) + - [🏄‍♀️ Wave 15 - Q3 2022](#️-wave-15---q3-2022) + - [🏄‍♀️ Wave 14 - Q2 2022](#️-wave-14---q2-2022) + - [🏄‍♀️ Wave 13 - Q1 2022](#️-wave-13---q1-2022) +- [2021](#2021) + - [🏄‍♀️ Wave 12 - Q4 2021](#️-wave-12---q4-2021) + - [🏄‍♀️ Wave 11 - Q3 2021](#️-wave-11---q3-2021) + - [🏄‍♀️ Wave 10 - Q2 2021](#️-wave-10---q2-2021) + - [🏄‍♀️ Wave 9 - Q1 2021](#️-wave-9---q1-2021) +- [2020](#2020) + - [🏄‍♀️ Wave 8 - Q4 2020](#️-wave-8---q4-2020) + - [🏄‍♀️ Wave 7 - Q3 2020](#️-wave-7---q3-2020) + - [🏄‍♀️ Wave 6 - Q2 2020](#️-wave-6---q2-2020) + - [🏄‍♀️ Wave 5 - Q1 2020](#️-wave-5---q1-2020) +- [2019](#2019) + - [🏄‍♀️ Wave 4 - Q4 2019](#️-wave-4---q4-2019) + - [🏄‍♀️ Wave 3 - Q3 2019](#️-wave-3---q3-2019) + - [🏄‍♀️ Wave 2 - Q2 2019](#️-wave-2---q2-2019) + - [🏄‍♀️ Wave 1 - Q1 2019](#️-wave-1---q1-2019) ## 2023 -### 🏄‍♀️ Wave 18 - Second Quarter 2023 - -[Menu🔝](#menu) +### 🏄‍♀️ Wave 18 - Q2 2023 | Team | Project | Link | Terminated | First Delivery | Completed | | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------------------------------- | :--------- | :------------: | :--------: | | [Interstellar](https://www.interstellar.gg/) | [Interstellar - Wallet Phase 2](./Interstellar-network2.md) | [GitHub](https://github.com/Interstellar-Network) | ☐ | ☐ | ☐ | +[🔝](#menu) -### 🏄‍♀️ Wave 17 - First Quarter 2023 - -[Menu🔝](#menu) +### 🏄‍♀️ Wave 17 - Q1 2023 | Team | Project | Link | Terminated | First Delivery | Completed | | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------------------------------- | :--------- | :------------: | :--------: | @@ -81,13 +95,11 @@ Use this page for an overview of all public grants and their status. Use the sid | [Decentration](https://www.decentration.org/) | [Supersig Phase 2](./supersig_fellowship.md) | [GitHub](https://github.com/decentration) | ☐ | ☐ | ☐ | | [Polkadrys Labs](https://github.com/rtomas) | [Open Payroll](./openPayroll.md) | [GitHub](https://github.com/rtomas) | ☐ | ☐ | ☐ | | [Itering](https://www.itering.io/) | [Solidity Verifier Implementation for Accountable Light Client](./solidity-verifier-for-accountable-light-client.md) | [GitHub](https://github.com/darwinia-network) | ☐ | ☐ | ☐ | - + [🔝](#menu) ## 2022 -### 🏄‍♀️ Wave 16 - Fourth Quarter 2022 - -[Menu🔝](#menu) +### 🏄‍♀️ Wave 16 - Q4 2022 | Team | Project | Link | Terminated | First Delivery | Completed | | :----------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -130,10 +142,9 @@ Use this page for an overview of all public grants and their status. Use the sid | OCamlMyCaml | [PrivaDEX: Cross-Chain DEX Aggregator MVP](PrivaDEX_aggregator.md) | [GitHub](https://github.com/kapilsinha/privadex) | ☐ | ☒ | ☒ | | [Aband-Network](https://a.band/) | [Substrate Parachain PoS Template](substrate-parachain-PoS-template.md) | [GitHub](https://github.com/Aband-Network/substrate-parachain-PoS-template) | ☐ | ☒ | ☒ | | [MangoBOX labs](https://www.mangobox.xyz/) | [MangoSale Protocol](MangoSale_Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☒ | ☐ | + [🔝](#menu) -### 🏄‍♀️ Wave 15 - Third Quarter 2022 - -[Menu🔝](#menu) +### 🏄‍♀️ Wave 15 - Q3 2022 | Team | Project | Link | Terminated | First Delivery | Completed | | :----------------------------------------------------------- | :-------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -176,10 +187,9 @@ Use this page for an overview of all public grants and their status. Use the sid | ALPHA LABS | [Binary merkle tree](./binary_merkle_tree.md) | [GitHub](https://github.com/frisitano) | ☐ | ☒ | ☐ | | [Standard Protocol](https://standard.tech/) | [New Order - a full onchain orderbook dex with indexers](./Standard_Protocol.md) | [GitHub](https://github.com/standardweb3) | ☐ | ☐ | ☐ | | [hack-ink](https://github.com/hack-ink) | [Subalfred](./subalfred.md) | [GitHub](https://github.com/hack-ink/subalfred) | ☐ | ☒ | ☒ | + [🔝](#menu) -### 🏄‍♀️ Wave 14 - Second Quarter 2022 - -[Menu🔝](#menu) +### 🏄‍♀️ Wave 14 - Q2 2022 | Team | Project | Link | Terminated | First Delivery | Completed | | :--------------------------------------------------------- | :------------------------------------------------------------------------------------------------------ | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -219,10 +229,9 @@ Use this page for an overview of all public grants and their status. Use the sid | [Codelight](https://massbit.io/) | [Massbit Route](./massbit_route.md) | [GitHub](https://github.com/massbitprotocol/massbitroute) | ☐ | ☒ | ☒ | | [Hypha Hashed Partners](https://hypha.earth/) | [Social Recovery Wallet](./social_recovery_wallet.md) | [GitHub](https://github.com/hypha-dao) | ☐ | ☒ | ☒ | | [MangoBOX labs](http://mangobox.xyz/) | [MangoBOX Protocol](./MangoBOX-Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☒ | ☒ | + [🔝](#menu) -### 🏄‍♀️ Wave 13 - First Quarter 2022 - -[Menu🔝](#menu) +### 🏄‍♀️ Wave 13 - Q1 2022 | Team | Project | Link | Terminated | First Delivery | Completed | | :---------------------------------------------------- | :-------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -258,12 +267,11 @@ Use this page for an overview of all public grants and their status. Use the sid | [SaaS3 Lab](https://www.saas3.io) | [SaaS3](./SaaS3.md) | [GitHub](https://github.com/SaaS3Lab) | ☐ | ☒ | ☐ | | [NUTS Finance](https://nuts.finance) | [DOT-pegged derivative built on top of the stable asset protocol](./tdot.md) | [GitHub](https://github.com/nutsfinance/) | ☒ | ☒ | ☐ | | [Strategy Object](https://strategyobject.com/) | [Substrate Client for Java](./substrate_client_java.md) | [GitHub](https://github.com/strategyobject/substrate-client-java) | ☐ | ☒ | ☐ | + [🔝](#menu) ## 2021 -### 🏄‍♀️ Wave 12 - Fourth Quarter 2021 - -[Menu🔝](#menu) +### 🏄‍♀️ Wave 12 - Q4 2021 | Team | Project | Link | Terminated | First Delivery | Completed | | :--------------------------------------------------------- | :---------------------------------------------------------------------------------------- | :------------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -288,10 +296,9 @@ Use this page for an overview of all public grants and their status. Use the sid | [UNIVERSALDOT FOUNDATION](https://universaldot.foundation) | [A freelancing decentralized application](./universaldot.me.md) | [GitHub](https://github.com/UniversalDot) | ☐ | ☒ | ☒ | | [AdMeta](https://admeta.network/) | [A privacy-preserving Ad Platform](./AdMeta.md) | [GitHub](https://github.com/AdMetaNetwork/admeta) | ☐ | ☒ | ☒ | | Crypto Pay Lab (CPL)) | [Dotpay a github paid task platform using DOT](./DotPay.md) | [GitHub](https://github.com/bytepayment) | ☐ | ☒ | ☐ | + [🔝](#menu) -### 🏄‍♀️ Wave 11 - Third Quarter 2021 - -[Menu🔝](#menu) +### 🏄‍♀️ Wave 11 - Q3 2021 | Team | Project | Link | Terminated | First Delivery | Completed | | :---------------------------------------------- | :---------------------------------------------------------------------------------------- | :-------------------------------------------------- | :--------- | :------------: | :-------: | @@ -321,10 +328,9 @@ Use this page for an overview of all public grants and their status. Use the sid | [UNI-ARTS](https://app.uniarts.network/) | [Ruby Substate Client](./rb_substrate_client.md) | [GitHub](https://github.com/uni-arts-chain/sr25519) | ☐ | ☒ | ☐ | | [Skye Kiwi](https://skye.kiwi/) | [SkyeKiwi Protocol](./skyekiwi-protocol.md) | [GitHub](https://github.com/skyekiwi) | ☐ | ☒ | ☒ | | [Evercity](https://evercity.io/) | Sustainable Finance Protocol | [GitHub](https://github.com/EvercityEcosystem) | ☐ | ☒ | ☒ | + [🔝](#menu) -### 🏄‍♀️ Wave 10 - Second Quarter 2021 - -[Menu🔝](#menu) +### 🏄‍♀️ Wave 10 - Q2 2021 | Team | Project | Link | Terminated | First Delivery | Completed | | :----------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -357,10 +363,9 @@ Use this page for an overview of all public grants and their status. Use the sid | [Stake Technologies](https://stake.co.jp/) | [ZK Plonk Pallet](./zk-plonk.md) | [GitHub](https://github.com/PlasmNetwork) | ☐ | ☒ | ☒ | | [CryptoLab](https://www.cryptolab.network) | [Staking Reward Collector](./cryptolab-staking-reward-collector-front-end.md) | [GitHub](https://github.com/cryptolab-network) | ☐ | ☒ | ☒ | | [Yatima Inc](https://github.com/yatima-inc/yatima) | [Lambda-VM and programming language for Substrate](./yatima.md) | [GitHub](https://github.com/yatima-inc/yatima) | ☐ | ☒ | ☒ | + [🔝](#menu) -### 🏄‍♀️ Wave 9 - First Quarter 2021 - -[Menu🔝](#menu) +### 🏄‍♀️ Wave 9 - Q1 2021 | Team | Project | Link | Terminated | First Delivery | Completed | | :---------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -412,12 +417,11 @@ Use this page for an overview of all public grants and their status. Use the sid | [Bit.Country](http://bit.country/) | [A decentralized world - Phase 2](./bit_country_m2.md) | [GitHub](https://github.com/bit-country) | ☐ | ☒ | ☒ | | [Vera](https://veraprotocol.org/) | [NFT Lending + Exchange](./vera_defi.md) | [GitHub](https://github.com/veraprotocol) | ☐ | ☒ | ☒ | | [Parallel Finance](https://parallel.fi/#/) | [Decentralized lending/borrowing and staking protocol](./Parallel.md) | [GitHub](https://github.com/parallel-finance/parallel) | ☐ | ☒ | ☒ | + [🔝](#menu) ## 2020 -### 🏄‍♀️ Wave 8 - Fourth Quarter 2020 - -[Menu🔝](#menu) +### 🏄‍♀️ Wave 8 - Q4 2020 | Team | Project | Link | Terminated | First Delivery | Completed | | :---------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -464,10 +468,9 @@ Use this page for an overview of all public grants and their status. Use the sid | [Evanesco](https://evanesco.org/) | [Private network protocol](./evanesco_networks.md) | [GitHub](https://github.com/Evanesco-Labs) | ☐ | ☒ | ☒ | | [HugoByte](https://hugobyte.com/) | [Project Aurras: Event Manager](./project_aurras_mvp_phase_1.md) | [GitHub](https://github.com/HugoByte) | ☐ | ☒ | ☒ | | [Bounce Protocol](https://bounce.finance/) | [Decentralized Auction Protocol](./bounce-protocol.md) | [GitHub](https://github.com/bouncefinance/bounce-network) | ☐ | ☐ | ☐ | + [🔝](#menu) -### 🏄‍♀️ Wave 7 - Third Quarter 2020 - -[Menu🔝](#menu) +### 🏄‍♀️ Wave 7 - Q3 2020 | Team | Project | Link | Terminated | First Delivery | Completed | | :--------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -502,10 +505,9 @@ Use this page for an overview of all public grants and their status. Use the sid | [Adoriasoft](https://adoriasoft.com/) | Cosmos-SDK Parachain Development Kit Phase 2 | [GitHub](https://github.com/adoriasoft/cosmos-sdk) | ☐ | ☒ | ☒ | | [sup](https://github.com/clearloop/sup) | [Command line tool for generating or upgrading a Substrate node](./sup.md) | [GitHub](https://github.com/clearloop/sup) | ☐ | ☒ | ☒ | | [Shard Labs](https://shardlabs.io) | [Tip or Donate KSM Embeddable Button](./KSM-embeddable-tip-or-donate-button.md) | [GitHub](https://github.com/Shard-Labs) | ☐ | ☒ | ☒ | + [🔝](#menu) -### 🏄‍♀️ Wave 6 - Second Quarter 2020 - -[Menu🔝](#menu) +### 🏄‍♀️ Wave 6 - Q2 2020 | Team | Project | Link | Terminated | First Delivery | Completed | | :-------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -542,10 +544,9 @@ Use this page for an overview of all public grants and their status. Use the sid | [FlexDapps](https://flexdapps.com/) | Gantree Phase 4 | [GitHub](https://github.com/flex-dapps) | ☐ | ☐ | ☐ | | [Zondax](http://zondax.ch/) | Ledgeracio: A command-line tool and Ledger app designed for staking operations | [GitHub](https://github.com/paritytech/ledgeracio) | ☐ | ☒ | ☒ | | [Dipole Tech](https://www.dipole.tech) | [Dipole Oracle: Distributed energy resource management](./DipoleOracle.md) | [GitHub](https://github.com/DipoleTech/dipole-oracle) | ☐ | ☒ | ☒ | + [🔝](#menu) -### 🏄‍♀️ Wave 5 - First Quarter 2020 - -[Menu🔝](#menu) +### 🏄‍♀️ Wave 5 - Q1 2020 | Team | Project | Link | Terminated | First Delivery | Completed | | :---------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -586,12 +587,11 @@ Use this page for an overview of all public grants and their status. Use the sid | [SelfKey](https://selfkey.org/) | SelfKey DIDs & Claims as Ink! Smart Contracts | [GitHub](https://github.com/SelfKeyFoundation) | ☐ | ☐ | ☐ | | [Lyken](https://lyken.rs/) | [Rust trait system revamp](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/rust_trait_system_revamp.md) | [GitHub](https://github.com/LykenSol) | ☐ | ☒ | ☐ | | [Chorus One](https://chorus.one/) | Grandpa light client in Tendermint | [GitHub](https://github.com/ChorusOne) | ☐ | ☒ | ☒ | + [🔝](#menu) ## 2019 -### 🏄‍♀️ Wave 4 - Fourth Quarter 2019 - -[Menu🔝](#menu) +### 🏄‍♀️ Wave 4 - Q4 2019 | Team | Project | Link | Terminated | First Delivery | Completed | | :----------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -620,11 +620,10 @@ Use this page for an overview of all public grants and their status. Use the sid | [HashQuark](https://www.hashquark.io/) | Validator Dashboard | [GitHub](https://github.com/hashquark-io) | ☐ | ☒ | ☒ | | [Stacktical](https://stacktical.com/) | [Performance Management Runtime Modules](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/predictive_performance_management_runtime_module.md) | [GitHub](https://github.com/Stacktical) | ☐ | ☒ | ☐ | | [Sean Young](https://www.mess.org/) | Solidity to WASM compiler | [GitHub](https://github.com/hyperledger-labs/solang) | ☐ | ☒ | ☒ | -| [Chain Security](https://chainsecurity.com/) | Tool for validating correctness of Polkadot runtimes | [GitHub](https://github.com/ChainSecurity/polpatrol) | ☐ | ☒ | ☒ | - -### 🏄‍♀️ Wave 3 - Third Quarter 2019 +| [Chain Security](https://chainsecurity.com/) | Tool for validating correctness of Polkadot runtimes | [GitHub](https://github.com/ChainSecurity/polpatrol) | ☐ | ☒ | ☒ | +[🔝](#menu) -[Menu🔝](#menu) +### 🏄‍♀️ Wave 3 - Q3 2019 | Team | Project | Link | Terminated | First Delivery | Completed | | :------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -642,10 +641,9 @@ Use this page for an overview of all public grants and their status. Use the sid | [DappForce](http://dappforce.io) | [SubSocial - Substrate module and web UI for decentralized communities](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Subsocial.md) | [GitHub](https://github.com/dappforce/dappforce-subsocial) | ☐ | ☒ | ☒ | | [Phala.Network](https://phala.network/) | [pLibra, Privacy Bridge between Polkadot and Libra chain](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/pLIBRA.md) | [GitHub](https://github.com/Phala-Network/) | ☐ | ☒ | ☐ | | [Wiv](http://wiv.io/) | Supply chain modules and front-end UI | [GitHub](https://github.com/wivtech) | ☒ | ☐ | ☐ | +[🔝](#menu) -### 🏄‍♀️ Wave 2 - Second Quarter 2019 - -[Menu🔝](#menu) +### 🏄‍♀️ Wave 2 - Q2 2019 | Team | Project | Link | Terminated | First Delivery | Completed | | :-------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------ | :--------- | :------------: | :-------: | @@ -661,10 +659,9 @@ Use this page for an overview of all public grants and their status. Use the sid | [HOPR](https://hopr.network/) | [Substrate integration with this P2P messaging protocol](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/messaging.md) | [GitHub](https://github.com/validitylabs/HOPR-PL-Substrate) | ☐ | ☒ | ☒ | | [Mailchain](https://mailchain.xyz/) | a Multi-Blockchain Messaging Application | [GitHub](https://github.com/mailchain) | ☐ | ☒ | ☒ | | [Usetech](http://usetech.com/blockchain.html) | [Polkadot C++ API](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/cpp_api.md) | [GitHub](https://github.com/usetech-llc/polkadot_api_cpp) | ☐ | ☒ | ☒ | +[🔝](#menu) -### 🏄‍♀️ Wave 1 - First Quarter 2019 - -[Menu🔝](#menu) +### 🏄‍♀️ Wave 1 - Q1 2019 | Team | Project | Link | Terminated | First Delivery | Completed | | :-------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------ | :-------------------------------------------------------------------------- | :--------- | :------------: | :-------: | From effe9a575c43615af00878434d3e5bdcf70ac493 Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Thu, 6 Apr 2023 15:24:04 +0200 Subject: [PATCH 304/578] Update index.md added missing link --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index aa3667960fe..98bdca49e21 100644 --- a/applications/index.md +++ b/applications/index.md @@ -85,7 +85,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [justmert](https://github.com/justmert) | [PolkaFlow](polkaflow.md) | [GitHub](https://github.com/justmert) | ☐ | ☐ | ☐ | | [BelSoft](https://www.belsoft.rs) | [Diffy messenger](Diffy_chat.md) | [GitHub](https://github.com/1db1) | ☐ | ☐ | ☐ | | [Zkverse](https://github.com/Zkvers) | [Zkverse](zkverse.md) | [GitHub](https://github.com/Zkvers/substrate-zk) | ☐ | ☐ | ☐ | -| Taiwan Research-based Biopharmaceutical Manufacturers Association | [Claps Health](Claps.md) | [GitHub](https://github.com/Claps-Health/) | ☐ | ☐ | ☐ | +| [Taiwan Research-based Biopharmaceutical Manufacturers Association](https://trpma.org.tw/cmn) | [Claps Health](Claps.md) | [GitHub](https://github.com/Claps-Health/) | ☐ | ☐ | ☐ | | [Tolga Yaycı](https://github.com/tolgayayci) | [Awesome Polka](Awesome-Polka.md) | [GitHub](https://github.com/tolgayayci/awesome-polka/tree/dev) | ☐ | ☐ | ☐ | | [gmajor](https://github.com/gmajor-encrypt) | [XCM Tools](xcm-tools.md) | [GitHub](https://github.com/gmajor-encrypt/) | ☐ | ☐ | ☐ | | [David Semakula](https://github.com/davidsemakula) | [Ink Analyzer](ink-analyzer.md) | [GitHub](https://github.com/ink-analyzer/ink-analyzer) | ☐ | ☐ | ☐ | From 197a6f5d1d5153f348de5d51a9aa283452a60863 Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Thu, 6 Apr 2023 15:24:51 +0200 Subject: [PATCH 305/578] Update index.md added missing link --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 98bdca49e21..d77f983caee 100644 --- a/applications/index.md +++ b/applications/index.md @@ -51,7 +51,7 @@ Use this page for an overview of all public grants and their status. Use the sid | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------------------------------- | :--------- | :------------: | :--------: | | [Deep Ink Ventures GmbH](http://deep-ink.ventures/) | [GenesisDAO](GenesisDAO.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☒ | ☐ | | [ArtZero](https://artzero.io/) | [ArtZero & InkWhale](ArtZero_InkWhale.md) | [GitHub](https://github.com/artzero-io) | ☐ | ☒ | ☐ | -| EightFish | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☐ | ☐ | +| [EightFish](https://github.com/eightfish-org/eightfish) | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☐ | ☐ | | [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☐ | ☐ | | [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☐ | ☐ | | [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | From 003771d686932f0bb652a9dbd52380e32e06bbe3 Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Thu, 6 Apr 2023 15:30:41 +0200 Subject: [PATCH 306/578] Update index.md add missing link --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index d77f983caee..2602637dfe0 100644 --- a/applications/index.md +++ b/applications/index.md @@ -80,7 +80,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [decentraDOT](https://decentradot.com/) | [Cyclops Validator Dashboard](cyclops.md) | [GitHub](https://github.com/ArthurHoeke?tab=repositories) | ☐ | ☒ | ☐ | | [Anwesh Nayak](https://github.com/muddlebee) | [Mempool Dashboard - Version 2](polkadot-mempool-explorer-v2.md) | [GitHub](https://github.com/muddlebee) | ☐ | ☐ | ☐ | | [Tellor Inc](https://tellor.io/) | [Tellor Oracle Protocol](Tellor.md) | [GitHub](https://github.com/tellor-io/) | ☐ | ☐ | ☐ | -| Jonathan Brown | [Hybrid Explorer](hybrid.md) | [GitHub](https://github.com/acuity-social) | ☐ | ☐ | ☐ | +| [Jonathan Brown](https://acuity.social/) | [Hybrid Explorer](hybrid.md) | [GitHub](https://github.com/acuity-social) | ☐ | ☐ | ☐ | | [ParaSpell](https://github.com/paraspell) | [ParaSpell_Follow Up 2](ParaSpell_follow-up2.md) | [GitHub](https://github.com/paraspell) | ☐ | ☐ | ☐ | | [justmert](https://github.com/justmert) | [PolkaFlow](polkaflow.md) | [GitHub](https://github.com/justmert) | ☐ | ☐ | ☐ | | [BelSoft](https://www.belsoft.rs) | [Diffy messenger](Diffy_chat.md) | [GitHub](https://github.com/1db1) | ☐ | ☐ | ☐ | From d8f89e50cb1492776f4cb74ecb26741d81456538 Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Thu, 6 Apr 2023 15:35:00 +0200 Subject: [PATCH 307/578] Update index.md add missing link --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 2602637dfe0..a3a94e962b9 100644 --- a/applications/index.md +++ b/applications/index.md @@ -72,7 +72,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☐ | ☐ | | [Zeeve](https://www.zeeve.io) | [Parachain deployment zoombienet testing automation](Zeeve_Parachain_deployment_zoombienet_testing_automation.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | | [Polytope Labs](https://research.polytope.technology/) | [Trie Verifier Implementation](solidity-trie-verifier.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | -| Off-Narrative Labs | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☒ | ☐ | +| [Off-Narrative Labs](https://github.com/Off-Narrative-Labs) | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☒ | ☐ | | [FuzzLand](https://fuzz.land/) | [FuzzLand](FuzzLand.md) | [GitHub](https://github.com/fuzzland) | ☐ | ☐ | ☐ | | [Fuu](https://github.com/ff13dfly/) | [Anchor, On-chain Linked List pallet and Name Service](Anchor.md) | [GitHub](https://github.com/ff13dfly/Anchor) | ☐ | ☒ | ☒ | | [hack-ink](https://hack.ink/) | [Slothunter](slothunter.md) | [GitHub](https://github.com/hack-ink) | ☐ | ☐ | ☐ | From aba5d98554ca7951f88364678ff733bd6d51722a Mon Sep 17 00:00:00 2001 From: Jonathan Brown Date: Tue, 11 Apr 2023 15:34:13 +0700 Subject: [PATCH 308/578] Amend accepted grant application Hybrid Block Explorer. (#1668) * Create hybrid.md * Add technical details to the milestone tables. * Mention IPFS hosting. * Mention more block explorers. * Update hybrid.md * Update hybrid.md * Update hybrid.md * Update hybrid.md --- applications/hybrid.md | 46 ++++++++++++++++++++++++++++++------------ 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/applications/hybrid.md b/applications/hybrid.md index fdaaa6dd72e..e2b5732d82e 100644 --- a/applications/hybrid.md +++ b/applications/hybrid.md @@ -47,22 +47,35 @@ The Hybrid indexer will be written in Rust. It can be configured to connect to a It will read events in all blocks using [subxt](https://github.com/paritytech/subxt) and index these events in a Key-value database using the [sled](http://sled.rs/) library. This is considerably more efficient than storing the index in an SQL database. +subxt currently has an [issue](https://github.com/paritytech/subxt/issues/793#issuecomment-1386902010) where it is not possible to query blocks prior to V14 metadata (block #7,229,126 on Polkadot). Resolving this issue is not within the scope of the grant. Once this grant is completed a further grant application will be made that includes resolving this issue. + +When decoding events, subxt needs to have the correct metadata. The metadata changes whenever a chain performs a runtime upgrade. Hybrid Indexer handles this in a very elegant way. When indexing begins it downloads the metadata for the starting block. When it encounters a decoding error it downloads the metadata for the current block and retries decoding. This means that the indexer does not have to be built with the metadata and block number of every runtime upgrade. + +To index an event, it needs to be converted into a Rust type that matches the metadata. Sometimes the metadata for an event will change during a runtime upgrade. To handle this the indexer will have Rust types for current and historic versions of all events. When an event fails to be converted into a Rust type the previous type will be tried. + All events in all pallets that have identifying parameters will be indexed. For example the Transfer event in the Balances pallet is identifiable by the `AccountId` of both `from` and `to`. Other examples of identifying event parameters are `assetId` in the Assets pallet, `code_hash` in the contracts pallet, `CollectionId` and `ItemId` in the NFTs pallet, and `MultiLocation` in the XCM pallet. -Reading blocks and writing indexes will occur in separate threads with a queue from the read thread to the write thread. Enabling reading and writing simultaneously will maximize indexing throughput. +Additionally, all events are indexed by event variant. + +To download a block, a query first has to be made to determine the hash for a given block number. In order to ensure throughput is as high as possible, multiple queries to the full node will be active at the same time to avoid round-trip delay. Block processing will be in a separate thread. + +In the same manner that each Substrate chain is a separate Rust build that uses Substrate crates, each chain will need a separate Hybrid Indexer build that is configured to index the correct pallets. + +When a chain is going to potentially perform a runtime upgrade, the Hybrid Indexer for the chain will need a new release with any updated events. If an instance of the indexer is not updated before the runtime upgrade occurs, it can be restarted with the new version at the correct block number. WSS queries will be handled via the highly scalable [tokio_tungstenite](https://github.com/snapview/tokio-tungstenite) Rust library. In addition to the identifier being searched for, queries will be able to include start block, offset, and limit to control which events are returned. -Consumers will be able to subscribe for new events that match a query. This will be handles by sled's powerful [watch_prefix](https://docs.rs/sled/latest/sled/struct.Tree.html#method.watch_prefix) functionality. +Consumers will be able to subscribe for new events that match a query. The database keys will be constructed in such a way so that events can be found using iterators starting at a specific block number. For example, for for the AccountId keyspace: `AccountId/BlockNumber/EventIndex` +Database entries will be key-only. No value will be stored. The blocknumber and event index are all that need to be returned for each event found. This reduces the size of the index database and increases decentralization. The frontend can query the chain in a decentralized manner to retrieve the event. #### Dapp @@ -155,32 +168,32 @@ Development has not started on the project, however the codebase will largely fo ### Overview -- **Total Estimated Duration:** 8 weeks +- **Total Estimated Duration:** 12 weeks - **Full-Time Equivalent (FTE):** 1 - **Total Costs:** 10,000 USD ### Milestone 1 — Event Indexing component -- **Estimated duration:** 4 weeks +- **Estimated duration:** 6 weeks - **FTE:** 1 - **Costs:** 5,000 USD | Number | Deliverable | Specification | | -----: | ----------- | ------------- | | **0a.** | License | Apache 2.0 | -| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can index a Substrate node and query events. | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can index a Polkadot node and query events. | | **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | | **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | -| 1. | Connect to Substrate chains | The indexer will be written in Rust and configurable to connect to any Substrate chain using the subxt library. | -| 2. | Block syncing | As new blocks are produced, the indexer reads all events. Additionally, it will read events from existing blocks, starting at block 0. | -| 3. | Index writing | All identifying parameters in events will be indexed in the database using the sled library. | +| 1. | Connect to Substrate chains | The indexer will be written in Rust and configurable to connect to the Polkadot chain using the subxt library. | +| 2. | Block syncing | As new blocks are produced, the indexer reads all events. Additionally, it will read events from archived blocks. Indexing will be quite slow because communication with the full node will not be asynchronous. Only the Polkadot chain will be supported. | +| 3. | Index writing | The following identifying parameters in events will be indexed in the database using the sled library: AccountId, AccountIndex, AuctionIndex, BountyIndex, CandidateHash, MessageId, ParaId, PoolId, ProposalHash, ProposalIndex, RefIndex, RegistrarIndex, TipHash. Not all events will be indexed. | | 4. | Status querying | It will be possible to query the current status of the indexer via WSS. This will include information about which chain is being indexed, indexing progress and last know block. Queries will be handled via tokio_tungstenite. | -| 5. | Index querying | It will be possible to search via WSS for events with an identifier. | +| 5. | Index querying | It will be possible to search via WSS for events with an identifier. Basic event parameters details will be provided for most events. | | 6. | Dapp | A rudimentary web interface will be developed to expose this functionality. This will be built using pnpm, vite, vue, vuetify & polkdadot.js .| ### Milestone 2 — Event Subscribing -- **Estimated duration:** 2 weeks +- **Estimated duration:** 3 weeks - **FTE:** 1 - **Costs:** 2,500 USD @@ -192,27 +205,34 @@ Development has not started on the project, however the codebase will largely fo | **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | | 1. | Event subscription API | The indexer will be updated to service subscription requests via WSS. | | 2. | Live dapp | The dapp will be updated so that pages displaying results from event queries will be updated as soon as a new event appears on the chain. | +| 3. | Full Substrate & Polkadot support | All substrate & polkadot pallets & events supported | +| 4. | Variant index | Additional event index by pallet, variant | +| 5. | Increased decentralization | Don't store event in db - load events in front end from chain | +| 6. | Asynchrous block downloading | Blocks will be downloaded as fast as possible for improved indexing speed. | ### Milestone 3 — Decentralized Component -- **Estimated Duration:** 2 weeks +- **Estimated Duration:** 3 weeks - **FTE:** 1 - **Costs:** 2,500 USD | Number | Deliverable | Specification | | -----: | ----------- | ------------- | | **0a.** | License | Apache 2.0 | -| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can use the rudimentary explorer dapp. | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can build a chain-specific Hybrid Indexer and use the rudimentary explorer dapp. | | **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | | **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | | 0e. | Video | We will publish a video that explains and demonstrates all aspects of the explorer. | | 1. | Dapp | The dapp will be extended to query block and state via either the Substrate Connect light client, or via direct connect to a full node via WSS. | | 2. | Cross-chain UI | When a Tx includes a XCM, it will be easy and intuitive to open the relevant block from the other chain(s). | - +| 3. | Support event schema changes | It will be possible to index old events that have changed their Rust type in a runtime upgrade. | +| 4. | Per-chain build | Indexer needs to be built for the chain, e.g. hybrid-indexer-polkadot - custom pallets can be indexed. | ## Future Plans +- indexing block prior to V14 metadata (block #7,229,126 on Polkadot). See [issue](https://github.com/paritytech/subxt/issues/793#issuecomment-1386902010). + - hosting - The project needs to host indexes for all major Substrate chains. The frontend can be hosted as a traditional website and on IPFS. - improve dapp - explore how the event index can be used to better display the richness of the Polkadot ecosystem. From 83f1deedd70075b3fdca0b0de694cac375a38924 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Wed, 12 Apr 2023 07:49:32 -0400 Subject: [PATCH 309/578] Update index.md (#1669) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index a3a94e962b9..b653a9b6242 100644 --- a/applications/index.md +++ b/applications/index.md @@ -67,7 +67,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | | [Aviraj Khare](https://github.com/avirajkhare00) | [Polkasearch](polkasearch.md) | [GitHub](https://github.com/avirajkhare00) | ☐ | ☐ | ☐ | | [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib Follow up](php-rpc-lib-follow-up.md) | [GitHub](https://github.com/gmajor-encrypt/php-substrate-api) | ☐ | ☒ | ☒ | -| [CoinFabrik](https://www.coinfabrik.com/) | [Scout - Security Analysis Tool](ScoutCoinFabrik.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | +| [CoinFabrik](https://www.coinfabrik.com/) | [Scout - Security Analysis Tool](ScoutCoinFabrik.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☒ | ☒ | | [727.ventures](https://727.ventures/) | [Typechain-Polkadot Follow-up-2](typechain-polkadot-follow-up-2.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☒ | ☒ | | [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☐ | ☐ | | [Zeeve](https://www.zeeve.io) | [Parachain deployment zoombienet testing automation](Zeeve_Parachain_deployment_zoombienet_testing_automation.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | From ced46a917154388130192c4216bd2d01e0d3df73 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Thu, 13 Apr 2023 03:53:23 -0300 Subject: [PATCH 310/578] Update index.md (#1670) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index b653a9b6242..c2efc587bd8 100644 --- a/applications/index.md +++ b/applications/index.md @@ -63,7 +63,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☐ | ☒ | ☐ | | [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☒ | ☒ | | [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☒ | -| [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☐ | ☐ | +| [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☒ | ☐ | | [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | | [Aviraj Khare](https://github.com/avirajkhare00) | [Polkasearch](polkasearch.md) | [GitHub](https://github.com/avirajkhare00) | ☐ | ☐ | ☐ | | [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib Follow up](php-rpc-lib-follow-up.md) | [GitHub](https://github.com/gmajor-encrypt/php-substrate-api) | ☐ | ☒ | ☒ | From f85c4091024cd977321dff4280595d318d9a469c Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 13 Apr 2023 11:12:23 +0200 Subject: [PATCH 311/578] Update index.md Update Hybrid node research grant --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index c2efc587bd8..d53d9e5de48 100644 --- a/applications/index.md +++ b/applications/index.md @@ -127,7 +127,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [k/factory](https://k-f.co/) | [Centrifuge Go-Substrate-RPC Client V2](centrifuge-gsrpc-v2.md) | [GitHub](https://github.com/centrifuge/go-substrate-rpc-client) | ☐ | ☐ | ☐ | | [Colorful Notion](https://github.com/colorfulnotion) | [Zombienet Explorer: Multi-Chain Substrate Block Explorer](Zombienet-Explorer.md) | [GitHub](https://github.com/colorfulnotion/zombienet-explorer) | ☐ | ☐ | ☐ | | [TwinP](https://github.com/herou) | [Decentralized Invoice](decentralized_invoice.md) | [GitHub](https://github.com/herou) | ☐ | ☒ | ☒ | -| [Zondax](http://zondax.ch/) | [Hybrid node research grant](hybrid_node_research.md) | [GitHub](https://github.com/ZondaX) | ☐ | ☐ | ☐ | +| [Zondax](http://zondax.ch/) | [Hybrid node research grant](hybrid_node_research.md) | [GitHub](https://github.com/ZondaX) | ☐ | ☒ | ☒ | | [Bright Inventions](https://brightinventions.pl/) | [ZK-Snarks Tutorial](ZK-Snarks%20tutorial.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☒ | | [Common Orbit LLC](https://brson.github.io) | [wasm-opt-for-rust maintenance](maintenance/wasm-opt-for-rust.md) | [GitHub](https://github.com/brson/wasm-opt-rs) | ☐ | ☒ | ☐ | | [Salaheldin Soliman](https://github.com/salaheldinsoliman) | [Solang developer experience improvements](Solang_developer_experience_improvements.md) | [GitHub](https://github.com/hyperledger/solang) | ☐ | ☐ | ☐ | From 655e709312b8a16fac8d7995c757789ee9b3c0e7 Mon Sep 17 00:00:00 2001 From: Sourabh Niyogi Date: Fri, 14 Apr 2023 01:06:59 -0700 Subject: [PATCH 312/578] Terminate Application (#1664) We are not working on this in favor of a more fruitful project that we believe can benefit the ecosystem better: substrate-etl. --- applications/Zombienet-Explorer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/Zombienet-Explorer.md b/applications/Zombienet-Explorer.md index e36e4cb279b..effbba480b8 100644 --- a/applications/Zombienet-Explorer.md +++ b/applications/Zombienet-Explorer.md @@ -1,7 +1,7 @@ # Zombienet Explorer: Multi-Chain Substrate Block Explorer (based on Polkaholic.io) - **Team Name:** Colorful Notion -- **Payment Address:** Polkadot 5D58imQFuMXDTknQS2D14gDU2duiUC18MGxDnTKajjJS9F3g [USDT] +- **Status:** Terminated - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 ## Project Overview :page_facing_up: From 202a8bb29c5584f7e40bf0487c2abb0362a1a622 Mon Sep 17 00:00:00 2001 From: Rafael Date: Fri, 14 Apr 2023 15:53:09 +0200 Subject: [PATCH 313/578] DINFRA Application (#1622) * DINFRA Application DINFRA, decentralized infrastructure, is substrate orchestrated infrastructure, a decentralized alternative to public clouds. * Additional Technical Detail Added specific technologies to deliverables in the plan. * Time estimation in more detail/context As discussed, we are estimating 4-6 months in total. The development of the milestones will be forward by pitching ecosystem players and helping test and prof-concept DINFRA with their own infrastructure. We are assuming that there may be some kind of iteration of the deliverables along the process. * Update DINFRA.md --- applications/DINFRA.md | 214 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 214 insertions(+) create mode 100644 applications/DINFRA.md diff --git a/applications/DINFRA.md b/applications/DINFRA.md new file mode 100644 index 00000000000..0db0bc1af29 --- /dev/null +++ b/applications/DINFRA.md @@ -0,0 +1,214 @@ +# DINFRA + +- **Team Name:** Valletech AB +- **Payment Address:** bc1q9rw6km4h7fjgwxv5vwdxhzsnl8s9c8ryfhsu4a (BTC) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 3 + +## Project Overview :page_facing_up: + + +### Overview + +DINFRA, decentralized infrastructure, is substrate orchestrated infrastructure, a decentralized alternative to public clouds. + +Substrate allows us to create a specialized blockchain, which we see as the perfect blending between Custom Functionality, Decentralized Governance and Value/State tracking. + +Modern data-center technology is now software defined, API driven and hyper-convergent with capability to virtualize Compute, Storage and Networking. Specialized network equipment is being replaced by virtualized services. There is also great availability of Open Source technologies covering all aspects of the modern data center. + +DINFRA aims to create a Substrate blockchain to orchestrate hyperconvergence infrastructure in a democratic, decentralized, open/neutral and non technically opinionated way. + +Realizing DINFRA vision requires a viable strategy. This project represents the first phase of a three phase strategy in which an Open Source Minimum Viable Product is delivered for the purpose of developing, testing, generating awareness and gaining community support. + +After delivering [Polkawatch](https://blog.polkawatch.app/introducing-polkawatch/), our analytic engine to measure decentralization of the substrate validation process, DINFRA is the natural next step for us to take in the Substrate Ecosystem. We have a track record contributing to Cloud automation stacks, we created [Privazio](https://www.privaz.io/) for small organizations to be able to fully automate their infrastructure and have used it to deliver Polkawatch for Polkadot and Kusama. We would like to start contributing to effective substrate infrastructure decentralization next. + +For a complete presentation of DINFRA vision and strategy see this [Video Presentation](https://vimeo.com/800524188). + +### Project Details + +**Design Constraints** + +We gave been part of the Dotsama community and that has allowed us to gain a better understanding of how it operates. Consequently, some key decisions have been taken that impact our choices of design and architecture: + +* DINFRA must be open and non technically opinionated. Infrastructure providers must be able to offer their solutions via DINFRA without being forced into specific technologies or opinionated solutions. Furthermore, they should be able to offer their current infrastructure via DINFRA provided they have industry standard automation capabilities, which typically they do, with minimal effort. +* DINFRA must be decentralized and democratic adopting and following the practices that we see on Kusama and Polkadot for governance. +* DINFRA must focus on the needs of our ecosystem first. + +We consider these points a prerequisite for community acceptance and adoption. + +**Design Interfaces and Data Modeling** + +DINFRA main responsibility will be to mediate between consumers and providers awarding "deployment descriptors" to "infrastructure providers" by means of consensus, collect balances accordingly, etc. + +From the previous constraints we deduce that we need lose typing of deployments descriptors, and DINFRA being able to distribute descriptors as opaque entities which don't need to be fully understood. + +Infrastructure Providers should be able to self register on DINFRA with information about which types of descriptors they can serve, even register new types of Deployment Descriptors for their flavored solutions if they happen to have some differential in-house capability. + +Deployment Descriptors will be able to represent things as diverse as a Helm Chart, Docker Compose, Cloud-Init user data, Subquery Project descriptor or IPFS cluster member profile. As long as each Provider registers their deployment capabilities properly, DINFRA must be able to route deployment requests to them. + +Deployment descriptors will be specified in JSON with its type defined as a JSON Schema. This provides loose typing and flexibility to accommodate any deployment descriptor possible, besides the fact that JSON/YAML is a widely used already by most infrastructure platforms and solutions. + +Note that Deployment descriptors won't be stored on chain but preimaged and backed on IPFS, as they are required during deployment. Secrets, whenever possible should be deduced from on-chain data preferably in the form of public keys. + +**High Level Architecture** + +DINFRA Architectural stack resembles pretty much a substrate stack under an infrastructure automation stack, like this: + +![DinfraHLArch](https://user-images.githubusercontent.com/412837/225624664-f7cf0074-5fbd-4078-bd30-374b5e89ea42.png) + + +We make the active choice of not connecting infrastructure platform / automation stack directly to the blockchain, for example via its Offchain Worker Interface, but we introduce an intermediate component called "Chain Reactor." + +The Chain Reactor is responsible for orchestrating infrastructure according to decisions taken on chain. The most prominent actions would be to deploy infrastructure as a descriptor is awarded or tear down infrastructure as a deployment reaches its termination. + +In order to fulfill the constraints above, Chain Reactors must be easy to implement using any infrastructure automation stack on any suitable language, and it must be simple to do so. Whether Python/Ansible, Java/Cloustack, Go/Terraform, Go/Helm, Python/Juju, etc. Chain Reactors must rely on programming language-agnostic API specifications/tooling such as OpenAPI/swagger for generating stubs in any language that can be used as base for implementation. + +**Technology Stack Used** + +In line with the strategy decided above, this project will focus on a minimal viable product while honoring the constraints and architecture above. + +The components generated must also serve as "Reference Implementation" to community members willing to generate similar implementations for other infrastructure platforms or solutions. + +The Stack for the current MVP will be made of: + +- Apache CloudStack: As Infrastructure Platform +- Ansible / Python: As tooling for implementing a Chain Reactor. +- Substrate: For DINFRA Parachain +- Gitlab CD/CI: For Reference Implementation of Automated Testing and CI/CD. +- Docker Compose: For rapid development setup. +- Gitlab CD/CI: for End to end Itegration testing, to avoid regression when new Apache CloudStack versions are released. + + +**Scope** + +Lots of the features that we pitch in our DINFRA [video presentation](https://vimeo.com/800524188) are left out of the scope of this phase. DINFRA opens a lot of exciting possibilities but it is important to remain in focus and deliver a MVP useful for development and bringing community awareness now. + +**What DINFRA is not** + +DINFRA is not an Infrastructure Provider for the Dotsama ecosystem, but rather a parachain designed to arrange deployments between infrastructure consumers an infrastructure providers in a decentralized way. + +DINFRA may provide concrete infrastructure automation modules, but they will be open-source and infrastructure providers will be able to use them, modify them or utilize as reference implementation for their own. + +DINFRA is not meant to deliver a company or venture but rather a decentralized community that follows Polkadot's governance model and serve our ecosystem first. + +DINFRA will not become a way to just "open" infrastructure to the whole world. Blockchain features may be used for consumers to pick specific providers, providers to accept specific consumers even for consumers to manage their own infrastructure in a private way. Completely public infrastructure remains a valid use case but would benefit from on-chain features such as reputation, arbitrage, deposits, offenses, etc for it to be practically viable. + +### Ecosystem Fit + +As we can see with [Polkawatch](https://blog.polkawatch.app/introducing-polkawatch/), our infrastucture plays an important role in the level of effective decentralization of Substrate Validation process. + +Our treasuries invest significant funds on infrastructure, for which our ecosystem counts with fantastic providers. However, it is becoming clear that our ecosystem needs strategic actions at infrastructure level. Some projects have already been started by our treasuries, a good example being the [Infrastructure Builders Program](https://ibp.network/). + +DINFRA intents to provide an strategic approach to managing our ecosystem infrastructure using our biggest asset: Substrate itself. + +On the other hand our ecosystem is investing significant effort on Decentralized Finance. A successful DINFRA parachain, used to arrange delivery of our own infrastructure, would channel significant resources becoming effectively a Web3 commodity: a currency that everybody in our community needs and uses, backed by real, tangible, infrastructure services. This would provide health to our DEFI community as DEFI is often criticized for baking tokens with tokens non of which are backed by "real" assets. Commodities play an important role in traditional economies and the same could apply to our ecosystem. + +The target audience of DINFRA is therefore our Governance bodies, infrastructure providers, infrastructure consumers (Parachains, DAPPs, etc), and on the other hand substrate, UI and infrastructure engineers willing to contribute. + +Regarding similar projects, on top of strategic programs launched by our treasuries there is also [ThreeFold](https://www.threefold.io). An impressive decentralized infrastructure venture which utilities substrate technology while not being formally part of our ecosystem. We had the pleasure to meet their friendly team during the last Sub0 conference in Portugal and their experience was instrumental in realizing that DINFRA is far from a technological-only challenge and needed key design constraints for it to be acceptable to our ecosystem: inclusive to current infrastructure providers, non technically opinionated, community governed, strategically designed to serve our community first, etc. + +At a different level DINFRA is an attempt to orchestrate a set of independent providers that will appear to the consumer as a single entity. Effectively DINFRA could become a decentralized alternative to Public Clouds in the long term. Lessons learned from DINFRA could apply to other industries too. Any industry with an existing level of automation and many independent players could be orchestrated similarly + +## Team :busts_in_silhouette: + +### Team members + +- Rafael del Valle López +- René Moser + +### Contact + +- **Contact Name:** Rafael del Valle Lopez +- **Contact Email:** rvalle@valletech.eu +- **Website:** https://valletech.eu + +### Legal Structure + +- **Registered Address:** Blåmesv. 26, 186-47 Vallentuna, Sweden +- **Registered Legal Entity:** Valletech AB, Org. Num: 5590673694 + +### Team's experience + + +Rafael lives with his family in Sweden and has over 20 years experience creating Software Product, Services and Ventures. In the last years has started to contribute to Open Source projects in the Infrastructure field. A significant contribution to Open Nebula was the [Python Bindings](https://opennebula.io/pyone-python-bindings-for-open-nebula/), now part of the official distribution. More recently the [Privaz.io](https://privaz.io) project was created with the goal to facilitate the adoption of Private Clouds by small projects. Privazio is currently in use to deploy [Polkawatch](https://blog.polkawatch.app/introducing-polkawatch/), a Web3 Foundation project currently in production and backed both by Polkadot and Kusama treasuries. + +René Moser lives with his family in Switzerland and have been a software and systems engineer for over 20 years. René is co-author of [O'Reilly's "Ansible: Up & Running"](https://www.oreilly.com/library/view/ansible-up-and/9781098109141/) and longtime open source software developer and author of many Ansible Cloud Provider Automation integrations, such as Vultr, CloudStack, Exoscale, cloudscale.ch, Hetzner and became member of the Ansible Core Contributors Team. Furthermore, René is Apache Foundation CloudStack Project Management Committee member since 2015 and founded my own company [moser-systems.com](https://www.moser-systems.com/) with focus on "Cloud Automation, Scaling and Integration." currently delivering its flagship project [ngine.io](https://www.ngine.io/), a platform for cloud-agnostic services including autoscaling which has been released as open source software "[scalr](https://ngine-io.github.io/scalr/)". + + +René and Rafael met during an open source collaboration to deliver new Apache CloudStack automation features. + +### Team Code Repos + +- https://gitlab.com/polkawatch/polkawatch +- https://github.com/ngine-io/scalr +- https://github.com/ngine-io/ansible-collection-cloudstack +- https://gitlab.privaz.io/privazio + +### Team LinkedIn Profiles + +- https://www.linkedin.com/in/rvallel/ +- https://www.linkedin.com/in/resmo/ + + +## Development Status :open_book: + +The project has not started formal implementation yet. However we have performed a viability check of required deliverables. + +Most infrastructure deliverables belong to our domain of expertise per contributions made in the past to other open source projects, therefore is easy for us to ensure its viability. Intermediate interfaces don't have technical risk, they have important technical requirements when considering our project constraints but they are straight forward to deliver. + +Substrate deliverables are newer to us and imply a learning curve, however the amazing resources put together by the community at [substrate.io](https://substrate.io/): the tutorials, test frameworks, etc have allowed us to verify their viability. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 3.5 months +- **Full-Time Equivalent (FTE):** 1 +- **Total Costs:** 47.000 USD + +### Milestone 1 — Infrastructure Provider SDK + +- **Estimated duration:** 1.5 month +- **FTE:** 1 +- **Costs:** 20.000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can test functionality, implement a Chain Reactor, etc. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Chain Reactor API | We will create the API for Chain Reactors using API technologies (OpenAPI or similar) that facilitate language-agnostic implementations. | +| 2. | Chain Reactor RI | We will implement a Chain Reactor Reference Implementation based on Apache CloudStack that can run against the Apache CloudStack Simulator to facilitate further development. The RI will be written in Python as programming language and Ansible as automation stack| +| 3. | Chain Reactor RI Test Suite | We will release a comprehensive set of Chain Reactor RI Unit tests that should serve as guideline for TDD of other implementations, implmented with Python. | +| 4. | CD/CI Chain Reactor RI | Gitlab Pipelines will be created for Chain Reactor Reference Implementation that must serve as guideline to other implementations | +| 5. | SSH Key Derivation | A viability study and implementation of converter of Substrate Account Keys into SSH Keys based on ed25519. Implemented with NodeJS| +| 6. | Substrate Deployment Descriptors | Documented Examples of Deployment Descriptors for the Chain Reactor RI will be provided that would spawn Substrate Nodes under DINFRA.| + + +### Milestone 2 — Substrate Parachain + +- **Estimated duration:** 2 month +- **FTE:** 1 +- **Costs:** 27,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can run, test and contribute to the DINFRA parachain. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | DINFRA Provider Pallet | It will allow for Accounts to register as providers, Providers to declare supported Deployment types and avilable capacity. Will Assign Deployments to Providers by simple means such as Round Robin, Random or Capacity Based. Implemented with Substrate/Rust.| +| 2. | DINFRA Subscription Pallet | It will represent a simple Subscription to pay for a deployment. Cost will be fixed per block. Deployments will be teared down when allocated Balance is consumed. Consumers will be able to cancel Subscriptions and any time, tearing down the deployment. Implemented with Substrate/Rust. | +| 3. | Chain Reactor Interface | A Substrate Interface will be created with Providers Chain Reactors so that Deployment Contracts can be Deployed and Teared Down. The interface will be based on standard Substrate interfaces OCW, RPC and/or sidecar service / REST | + + +## Future Plans + +We intend to continue to our second phase in the plan as described in our video presentation. We will use the deliverables from this release to: + +- Setup a DINFRA Test Network +- Generate awareness in our community +- Allow the community to test the system +- Pitch and demo: Treasuries, Infrastructure Providers, Developers +- Seek launching DINFRA with specific Dotsama use cases. + From 8a0cc8250f3006fffc1952edb1e830b20a8e3f21 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 14 Apr 2023 15:59:37 +0200 Subject: [PATCH 314/578] Update index.md Add DINFRA --- applications/index.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/applications/index.md b/applications/index.md index d53d9e5de48..a57fa1dc6c4 100644 --- a/applications/index.md +++ b/applications/index.md @@ -43,6 +43,9 @@ Use this page for an overview of all public grants and their status. Use the sid | Team | Project | Link | Terminated | First Delivery | Completed | | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------------------------------- | :--------- | :------------: | :--------: | | [Interstellar](https://www.interstellar.gg/) | [Interstellar - Wallet Phase 2](./Interstellar-network2.md) | [GitHub](https://github.com/Interstellar-Network) | ☐ | ☐ | ☐ | +| [Valletech AB](https://valletech.eu/) | [Polkawatch](./DINFRA.md) | [GitHub](https://gitlab.com/polkawatch) | ☐ | ☐ | ☐ | + + [🔝](#menu) ### 🏄‍♀️ Wave 17 - Q1 2023 From 6e2e98e0f0f3ad7e10521c6269b1f4471c848ff8 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 14 Apr 2023 15:59:56 +0200 Subject: [PATCH 315/578] Update index.md Fix DINFRA name --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index a57fa1dc6c4..08e853de818 100644 --- a/applications/index.md +++ b/applications/index.md @@ -43,7 +43,7 @@ Use this page for an overview of all public grants and their status. Use the sid | Team | Project | Link | Terminated | First Delivery | Completed | | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------------------------------- | :--------- | :------------: | :--------: | | [Interstellar](https://www.interstellar.gg/) | [Interstellar - Wallet Phase 2](./Interstellar-network2.md) | [GitHub](https://github.com/Interstellar-Network) | ☐ | ☐ | ☐ | -| [Valletech AB](https://valletech.eu/) | [Polkawatch](./DINFRA.md) | [GitHub](https://gitlab.com/polkawatch) | ☐ | ☐ | ☐ | +| [Valletech AB](https://valletech.eu/) | [DINFRA](./DINFRA.md) | [GitHub](https://gitlab.com/polkawatch) | ☐ | ☐ | ☐ | [🔝](#menu) From 980f8a5491d54ac4e3cd552fb6004c4b619284a4 Mon Sep 17 00:00:00 2001 From: sixTheDave <92546294+sixTheDave@users.noreply.github.com> Date: Sat, 15 Apr 2023 23:35:09 +0200 Subject: [PATCH 316/578] Actualize QRUCIAL DAO status, final date for Milestone 2 and team/legal state updates. (#1662 - Final deadline for Milestone 2: 2023 June. - Team update: adding kmildi as frontent developer, removing those who are not part of the team anymore. - Developer legal entity update: Crypto CTF OU (CCTF) takes care from the project from this point. QRUCIAL's company entity will be either disbanded or sold in the next month due to the bear market and that the CEO left. The DAO runs without a company and on it's own. - Contact and address update. --- applications/QRUCIAL_DAO.md | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/applications/QRUCIAL_DAO.md b/applications/QRUCIAL_DAO.md index e6d26ef3e45..73d872b832d 100644 --- a/applications/QRUCIAL_DAO.md +++ b/applications/QRUCIAL_DAO.md @@ -4,8 +4,8 @@ > > See the [Grants Program Process](https://github.com/w3f/Grants-Program/#pencil-process) on how to submit a proposal. -- **Team Name:** QRUCIAL OÜ -- **Payment Address:** BTC - bc1qwr7awq55z2udjvxj0ar7qfeasf70fasee8fxf2 +- **Team Name:** QRUCIAL DAO +- **Payment Address:** BTC - 32V2Qmk2xNVddNNvwxGPDhdsofLJr6Gcsa - **Level:** 2 > ⚠️ *The combination of your GitHub account submitting the application and the payment address above will be your unique identifier during the program. Please keep them safe.* @@ -84,25 +84,23 @@ CCTF provides a proven track record of hackers solving challenges and based on t ### Team members - Web3 Architect: six / David Pethes - CTO of QRUCIAL, Founder of CCTF, Polkadot Head Ambassador of Eastern Europe -- Business Architect: ra33it0 / Sebastian Kraus - CEO of QRUCIAL, EFF member - Runtime Developer: Wigy / - Senior Rust developer, Ex-Parity substrate core developer -- Full-stack Developer: Silur / Ábrahám Endre - Researcher at Hungarian Academy of Sciences (MTA), Ex-Ethereum Foundation developer -- DevOps Engineer: knockoff / Nico Selby - R&D team manager at QRUCIAL +- Frontend Developer: kmildi / Ildiko Keleti - Senior Web3 Frontend developer ### Contact - **Contact Name:** six / David Pethes -- **Contact Email:** hello@qrucial.io +- **Contact Email:** six@cryptoctf.org - **Website:** qrucial.io ### Legal Structure - **Registered Address:** Harju maakond, Tallinn, Kesklinna linnaosa, Narva mnt 7-652, 10117 -- **Registered Legal Entity:** QRUCIAL OÜ, Registration number: 16357543 +- **Registered Legal Entity:** Crypto CTF OÜ, Registration number: 16156552 ### Team's experience -QRUCIAL OÜ is a web3 security company. +QRUCIAL is a web3 security DAO. This is the first time we apply for a grant. @@ -170,7 +168,7 @@ The PoC is working, and we want to move forward in developing a live testnet ver ### Milestone 2 — Implement Exogenous tooling and hardened node system -- **Estimated duration:** 2 months +- **Estimated duration:** 2 months (final delivery in 2023 June) - **FTE:** 0.7 FTE - **Costs:** 20,000 USD @@ -188,9 +186,8 @@ The PoC is working, and we want to move forward in developing a live testnet ver ## Future Plans -- In the short term, we'd like to have the grant, so development goes faster. QRUCIAL as a company will keep funding the project until it becomes self-sustaining (meaning, the governance system keeps the DAO running on its own). +- In the short term, we'd like to have the grant, so development goes faster. QRUCIAL DAO keeps funding the project on its own. - CCTF (cryptoctf.org) is already a partner, helping to bring the best web3 hackers to the system. -- Elfz'n'Trollz is a marketing partner, so we don't just develop a DAO, but also make it usable and visually acceptable to all audiences. - After final milestone, we will start building a larger community for QRUCIAL DAO and improve our partnership with CCTF. ## Additional Information :heavy_plus_sign: From fd1e32c3b1868783337f22e1ce15119f5a1fa4b6 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Sat, 15 Apr 2023 18:35:38 -0300 Subject: [PATCH 317/578] Update index.md to check Eightfish first delivery (#1673) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 08e853de818..fdc88994f58 100644 --- a/applications/index.md +++ b/applications/index.md @@ -54,7 +54,7 @@ Use this page for an overview of all public grants and their status. Use the sid | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------------------------------- | :--------- | :------------: | :--------: | | [Deep Ink Ventures GmbH](http://deep-ink.ventures/) | [GenesisDAO](GenesisDAO.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☒ | ☐ | | [ArtZero](https://artzero.io/) | [ArtZero & InkWhale](ArtZero_InkWhale.md) | [GitHub](https://github.com/artzero-io) | ☐ | ☒ | ☐ | -| [EightFish](https://github.com/eightfish-org/eightfish) | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☐ | ☐ | +| [EightFish](https://github.com/eightfish-org/eightfish) | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☒ | ☐ | | [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☐ | ☐ | | [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☐ | ☐ | | [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | From 344bada719fd40c4bc7c37324f15510a9e540d9a Mon Sep 17 00:00:00 2001 From: yyd106 Date: Mon, 17 Apr 2023 14:20:07 +0800 Subject: [PATCH 318/578] Create dauth_network.md (#1655) --- applications/dauth_network.md | 176 ++++++++++++++++++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 applications/dauth_network.md diff --git a/applications/dauth_network.md b/applications/dauth_network.md new file mode 100644 index 00000000000..d9837e6654a --- /dev/null +++ b/applications/dauth_network.md @@ -0,0 +1,176 @@ +# DAuth Network + +- **Team Name:** DAuth +- **Payment Address:** 0x09C08f46d523822cC9D18A077e2e3BDE5BC07a0b (Ethereum (USDC)) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +This grant is for the RFP [Social Recovery Wallet](https://github.com/w3f/Grants-Program/blob/master/rfps/social-recovery-wallet.md) + +### Overview + +#### Background + +As the [RFP](https://github.com/w3f/Grants-Program/blob/master/rfps/social-recovery-wallet.md) mentioned: "managing private keys is a difficult task." The next billion users who will enter Web3 will have a hard time entering without the empowerment of social accounts. The Web3 ecosystem needs Web2 functionality that keeps the underlying system decentralized. + +Most of the current authentication is based on the centralized OAuth and SMTP protocol framework. These protocol frameworks will make the authentication service providers becoming centralized collectors of user Web2-Web3 information (although this is not their intention). This massive collection of user data poses a significant risk of exposing the user's identity and assets, ultimately compromising the security and privacy of Web3. + +#### Description + +DAuth is an improved and adapted version of OAuth for the Web3 ecosystem, providing native privacy and trustless social account access for Wallets, Decentralized Identifiers (DIDs), and Decentralized Applications (DApps). + +#### Our solutions + +In contrast to OAuth, SMS, and SMTP protocols, which rely on centralized servers and third-party services to verify user identities and send messages, DAuth uses blockchain and ZK technologies to provide a trustless authentication and verifiable profile aggregation that enhances trust, privacy, and security on the Web3. This means that users can authenticate their social accounts without revealing their identities. Moreover, DApps can send Emails and SMS messages to their subscribed users while keeping the user's email addresses and phone numbers private at the same time, giving the users greater control over their personal data and enhancing their privacy. + +##### Decentralized OAuth + +The DAuth adapts the mainstream OAuth service providers such as Google, Github, and Twitter for users to be able to pass the authentication of their social accounts without disclosing any information about it. This is because the whole authentication information is managed by the TEE and then a ZK proof is generated and passed onto the DApp proving that the user has authenticated. + +![doauth](https://1856926917-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZQcs7KxlVGgyCzI42uny%2Fuploads%2Fq04aO4bPez5YK61OqgRI%2Fimage.png?alt=media&token=e1ab8870-a552-4c22-8011-212c1bbd9e99) + +##### Decentralized Email + +This anonymous mechanism is based on the reconstruction of the SMTP protocol. SMTP allows proxy servers to send emails to a given email address. When the DAuth node gets an email request, the enclave will translate the web3 address to the user's email accordingly, and the enclave will establish an SMTP channel with the email service provider. The key point is that the channel will be encrypted with a TLS handshake between the DAuth Enclave and the email service provider, which will keep the user's email address invisible to the DAuth node. + +![dmail](https://1856926917-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZQcs7KxlVGgyCzI42uny%2Fuploads%2FMixRhVaMs0CnRHaN7ueB%2Fimage.png?alt=media&token=809e0d06-b309-4e5a-bd2e-5099f35366b2) + +### Project Details + +#### Documentations + +- Project overview PPT [here](.com/view/fem479hkgc9hc5ck) +- Project Docs [here](https://dauth.gitbook.io/dauth-docs/dauth-network/introduction) + +#### POC + +We have completed a proof-of-concept to verify the feasibility of our solutions [here](https://demo.dauth.network/auth). + +#### Technology Stack + +* DAuth Node: A DAuth Node is the basic unit of DAuth Network. DAuth Network will consist of nodes from several institutions in its early stage. In the future, the number of nodes will gradually expand with the increase in the security and stability of the DAuth Network. +* Secure Enclave: DAuth Enclave uses Trusted Execution Environment (TEE) technology to handle social account authentication in a anonymous way. That is also the part the ZK technology can't do for now. TEE is hardware technology that is leveraged on each DAuth node. The TEE protects the core data of the users from being tampered with by the DAuth nodes. +* Zero Knowledge Authentication: Zero-Knowledge Proofs are the best way to handle authentication problems since it keeps information private. DAuth uses zero-knowledge as an identity credential generation for users. However, the current ZK technology can not make social account authentication anonymous so we use TEE technology as an add-on module for anonymity protection and use ZK for credential generation. + +#### Scope + +There are a lot of tasks involved to get all of these into a product-ready state which is what we are always aiming for, but it'd be too extensive to fit all of the tasks into this one single open grant. Therefore, we have carved out a scope specifically for this grant, followed by the details of the future tasks. + +**Grant scope** + +- Develop TEE module(written in Rust) that supports basic Google OAuth. +- Develop TEE module(written in Rust) that supports basic Email auth flow. +- Develop TEE module that generates proofs for user authentication. +- Develop off-chain node program(written in Rust) that coordinating with TEE module. +- Develop on-chain protocol (written in ink! smart contract) that organizes all TEE nodes into a functioning network. +- Contribute SDKs for dApps and wallets in Polkadot ecosystem, such as Clover and zCloak, so that users in Polkaodt ecosystem can have a trustless and private social login to their Web3 accounts. + +**Future development** + +- Implement more functions in TEE, such as ZK proof. +- Accept nodes endorsed by more organizations. +- Support more authentication methods such as Twitter and Discord. + +### Ecosystem Fit + +- Generally, their are many wallets in Polkadot ecosystem that planning to provide social login functions in the trend of Account Abstraction and MPC wallet. DAuth will make all the wallets trustless, verifiable, private, and fully decentralized. + +## Team :busts_in_silhouette: + +### Team members + +- Name of team leader: Dean Yan +- Names of team members: Michael A. Hanono, Scott Zhang + +### Contact + +- **Contact Name:** Dean Yan +- **Contact Email:** yyd106@gmail.com +- **Website:** https://www.linkedin.com/in/dean-yan-717784100/ + +### Legal Structure + +- No legal entity yet + +### Team's experience + +- Dean is the author of technical whitepaper of [Crust Network](https://crust.network/) + +### Team Code Repos + +- https://github.com/DAuth-Network/dauth-demos + +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. + +- https://github.com/orgs/DAuth-Network/people/yyd106 +- https://github.com/orgs/DAuth-Network/people//mike-hanono +- https://github.com/orgs/DAuth-Network/people/scott0927 + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/dean-yan-717784100/ +- https://www.linkedin.com/in/michael-hanono/ + +## Development Status :open_book: + +We completed a [prototype system](https://demo.dauth.network/auth/) to verify technical feasibility. +The relevant [RFP is here](https://github.com/w3f/Grants-Program/blob/master/rfps/social-recovery-wallet.md) + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 8 months +- **Full-Time Equivalent (FTE):** 3 +- **Total Costs:** $27,000 (payable in Ethereum-USDC) + +### Milestone 1 — Implement On-chain Modules + +- **Estimated duration:** 6 month +- **FTE:** 3 +- **Costs:** 15,000USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can use DAuth. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Core Protocol | Implements the `nodeRegister` `userRegister` `userAuthentication` and `keyRecovery` functions for Node program written in Rust. | +| 2. | TEE Implementation | Implements the `nodeRegister` `userRegister` `userAuthentication` and `keyRecovery` functions for TEE part written in C++. | +| 3. | Smart Contract | Implements and test for the !ink smart contracts used for `nodeRegister` and `userRegister`. | +| 4. | Web Server | Provide meta-data management service for DAuth users written in Rust, users can manage keys and authentication methods | +| 5. | Polkadot.js | Add in encryption/decryption functionality to `@polkadot/keyring` and `@polkadot/extension` so that the protocol can run without the needs to read the private key of users. | + +- **Estimated duration:** 2 month +- **FTE:** 3 +- **Costs:** 12,000USD + +| Number | Deliverable | Specification | +| -----: | ------------------- | ------------------------------------------------------------ | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a project can integrate the DAuth Protocol into their project. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | SDK | Cooperation with multiple wallet providers, they will integrate DAuth in their authentication flow | +| 3. | Support mainstream authentication methods | Provide multiple authentication methods such as Google, Email, Github and other authentication methods. | + +## Future Plans + +- Accept nodes endorsed by more organizations. +- Support more authentication methods such as Twitter and Discord sign-in. +- Open DAuth network to public, espacially to Authentication solution providers. + +As a long-term business model, we have following plans to make DAuth powerful and secure: + +- Implement more functions in TEE, such as ZK proof on the authentication result. +- We will support more TEE implementations, such as Trusted Zone of ARM, SEV of AMD; + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Announcement by another team + +Here you can also add any additional information that you think is relevant to this application but isn't part of it already, such as: + +Dean's Crust Network and Mingshi's Astart Network are both projects of Web3 Grants. From fb0b386520f27775db709d232d221043ce6629a6 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 17 Apr 2023 08:22:59 +0200 Subject: [PATCH 319/578] Update index.md Add DAuth --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index fdc88994f58..a549b0bed0c 100644 --- a/applications/index.md +++ b/applications/index.md @@ -44,6 +44,7 @@ Use this page for an overview of all public grants and their status. Use the sid | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------------------------------- | :--------- | :------------: | :--------: | | [Interstellar](https://www.interstellar.gg/) | [Interstellar - Wallet Phase 2](./Interstellar-network2.md) | [GitHub](https://github.com/Interstellar-Network) | ☐ | ☐ | ☐ | | [Valletech AB](https://valletech.eu/) | [DINFRA](./DINFRA.md) | [GitHub](https://gitlab.com/polkawatch) | ☐ | ☐ | ☐ | +| [DAuth](https://github.com/DAuth-Network) | [DAuth](./dauth_network.md) | [GitHub](https://github.com/DAuth-Network) | ☐ | ☐ | ☐ | [🔝](#menu) From f67893b2571a9879f56a9c3159a69f16baa66a58 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Tue, 18 Apr 2023 02:43:43 -0400 Subject: [PATCH 320/578] Update new-order.md (#1677) --- applications/new-order.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/new-order.md b/applications/new-order.md index 35105c1dab2..fa1ad95b0c9 100644 --- a/applications/new-order.md +++ b/applications/new-order.md @@ -3,7 +3,7 @@ * **Team Name:** Standard Protocol * **USDC Payment Address:** 0xd2234E506862991ADA75f930c6D79B4236e3E265 * **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 - +* **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/1160#issuecomment-1481821012) ## Project Overview :page_facing_up: ### Overview From 253be04f6c998be5a9224ed5064ec1d98fb6308a Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Tue, 18 Apr 2023 04:08:26 -0400 Subject: [PATCH 321/578] Terminate helixstreet.md (#1676) --- applications/helixstreet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/helixstreet.md b/applications/helixstreet.md index 7d619d02ce5..fc485941d79 100644 --- a/applications/helixstreet.md +++ b/applications/helixstreet.md @@ -3,7 +3,7 @@ - **Team Name:** helixstreet - **Payment Address:** bc1qvu2mjjm602rqshwkspy2v7a6wke529uzkucnej - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 - +- **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/820#issuecomment-1442461748) ## Project Overview :page_facing_up: From 7cbdefbc77d2ab39e5ff467d4edce46d449102df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Tue, 18 Apr 2023 10:13:28 +0200 Subject: [PATCH 322/578] Update index.md Mark Helixstreet as terminated --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index a549b0bed0c..a790ef172af 100644 --- a/applications/index.md +++ b/applications/index.md @@ -257,7 +257,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Hamster](https://github.com/orgs/hamster-shared) | [Hamster - A decentralized computing network](./hamster.md) | [GitHub](https://github.com/orgs/hamster-shared) | ☐ | ☒ | ☒ | | [Papers GmbH](https://papers.ch/en/) | Zaturn - A Generic Attestable Oracle parachain Phase 1 | [GitHub](https://github.com/airgap-it) | ☐ | ☒ | ☒ | | [Slonigiraf](https://www.slonigiraf.org/) | [SLON - a recommendation letter system](./slonigiraf.md) | [GitHub](https://github.com/slonigiraf) | ☐ | ☒ | ☒ | -| [Helixstreet](https://helixstreet.io/) | [Helixstreet Module](./helixstreet.md) | [GitHub](https://github.com/helixstreet) | ☐ | ☐ | ☐ | +| [Helixstreet](https://helixstreet.io/) | [Helixstreet Module](./helixstreet.md) | [GitHub](https://github.com/helixstreet) | ☒ | ☐ | ☐ | | [Cryptoviet](https://team.cryptoviet.com/) | [Gafi Network - The Network of Game Finance](./Gafi.md) | [GitHub](https://github.com/cryptoviet/gafi) | ☐ | ☒ | ☒ | | [Asylum](https://asylum.space/) | [Metaverse for next generation gaming](./asylum_follow_up_1.md) | [GitHub](https://gitlab.com/asylum-space/) | ☐ | ☒ | ☒ | | [CESS LAB](https://www.cess.cloud/) | [Data Store Pallet](./ces_data_store.md) | [GitHub](https://github.com/CESSProject/cess) | ☐ | ☒ | ☒ | From f9ad818f84949e256206a751c848272516bb6f9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Tue, 18 Apr 2023 10:17:47 +0200 Subject: [PATCH 323/578] Update index.md Mark New Order as terminated --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index a790ef172af..6b677a53ea5 100644 --- a/applications/index.md +++ b/applications/index.md @@ -189,7 +189,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [CESS LAB](https://www.cess.cloud/) | [Substats (The framework of lightweight block explorer)](./substats.md) | [GitHub](https://github.com/CESSProject) | ☐ | ☒ | ☒ | | [Polket](https://toearn.fun) | [ToEarnFun](./polket_toearnfun.md) | [GitHub](https://github.com/polketio/polket-node) | ☐ | ☒ | ☒ | | ALPHA LABS | [Binary merkle tree](./binary_merkle_tree.md) | [GitHub](https://github.com/frisitano) | ☐ | ☒ | ☐ | -| [Standard Protocol](https://standard.tech/) | [New Order - a full onchain orderbook dex with indexers](./Standard_Protocol.md) | [GitHub](https://github.com/standardweb3) | ☐ | ☐ | ☐ | +| [Standard Protocol](https://standard.tech/) | [New Order - a full onchain orderbook dex with indexers](./Standard_Protocol.md) | [GitHub](https://github.com/standardweb3) | ☒ | ☐ | ☐ | | [hack-ink](https://github.com/hack-ink) | [Subalfred](./subalfred.md) | [GitHub](https://github.com/hack-ink/subalfred) | ☐ | ☒ | ☒ | [🔝](#menu) From f405fdd0e7a731d88eff0cb37ca1891e772914b9 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Tue, 18 Apr 2023 04:21:20 -0400 Subject: [PATCH 324/578] Terminate keysafe_network.md (#1678) --- applications/keysafe_network.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/keysafe_network.md b/applications/keysafe_network.md index 475c04339c5..da1d7e5b31e 100644 --- a/applications/keysafe_network.md +++ b/applications/keysafe_network.md @@ -3,7 +3,7 @@ - **Team Name:** Keysafe - **Payment Address:** 0x09C08f46d523822cC9D18A077e2e3BDE5BC07a0b (Ethereum (USDC)) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 - +- **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/947#issuecomment-1512008998) ## Project Overview :page_facing_up: This grant is for the RFP [Social Recovery Wallet](https://github.com/w3f/Grants-Program/blob/master/rfps/social-recovery-wallet.md) From c33df23a59f71f002b2f64aa5f1f22aa6ef39e28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Tue, 18 Apr 2023 10:23:55 +0200 Subject: [PATCH 325/578] Update index.md Mark Keysafe as terminated --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 6b677a53ea5..e3cd87e796f 100644 --- a/applications/index.md +++ b/applications/index.md @@ -214,7 +214,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [gmajor](https://github.com/gmajor-encrypt) | [SCALE Codec Comparator](./scale-codec-comparator.md) | [GitHub](https://github.com/gmajor-encrypt) | ☐ | ☒ | ☒ | | [Rusty Crewmates](http://rustycrewmates.com/) | [Substrate Tutorials](./substrate-tutorials.md) | [GitHub](https://github.com/rusty-crewmates/substrate-tutorials) | ☐ | ☒ | ☐ | | [Sequester](https://github.com/SequesterChain) | [A Common-Good Carbon Sink on Polkadot](./sequester.md) | [GitHub](https://github.com/SequesterChain/pallets) | ☐ | ☒ | ☒ | -| [Keysafe Network](https://github.com/keysafe-protocol) | [A decentralized protocol for private key custody and crypto asset management](./keysafe_network.md) | [GitHub](https://github.com/keysafe-protocol) | ☐ | ☒ | ☐ | +| [Keysafe Network](https://github.com/keysafe-protocol) | [A decentralized protocol for private key custody and crypto asset management](./keysafe_network.md) | [GitHub](https://github.com/keysafe-protocol) | ☒ | ☒ | ☐ | | [Fennel Labs](https://fennellabs.com/) | [Whiteflag on Fennel Protocol](./Fennel_Protocol.md) | [GitHub](https://github.com/fennelLabs) | ☐ | ☒ | ☒ | | [Relationlabs](https://relationlabs.ai/#/home) | [Relation Graph](./Relation-Graph.md) | [GitHub](https://github.com/relationlabs) | ☐ | ☐ | ☐ | | [Decentration](https://www.decentration.org/) | [Supersig](./pallet_supersig.md) | [GitHub](https://github.com/decentration) | ☐ | ☒ | ☒ | From 9dc4a58a2bd7f0bf05f9084b105741dbae318f8d Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 18 Apr 2023 14:43:05 +0200 Subject: [PATCH 326/578] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 7f0dca4ee3b..01c367d75fa 100644 --- a/README.md +++ b/README.md @@ -319,6 +319,7 @@ The best way to find out about upcoming hackathons is by following Polkadot on t Below is a list of other grant and bounty programs in the Polkadot/Substrate ecosystem: - [Acala Grants Program](https://acala.network/ecosystem-program) +- [Aleph Zero Funding Program](https://alephzero.org/ecosystem-funding-program) - [Astar / Shiden Network Builders Program](https://github.com/PlasmNetwork/Builders-Program) - [Crust Grants Program](https://github.com/crustio/Crust-Grants-Program) - [Darwinia Grants Program](https://github.com/darwinia-network/collaboration/blob/master/grant/README.md#grant-program) From 522f2c23556592e728cbbaebe29b5306685632c0 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 18 Apr 2023 14:43:57 +0200 Subject: [PATCH 327/578] Update funding.md Add Aleph Zero Funding Program --- docs/funding.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/funding.md b/docs/funding.md index 77cdfa95bcf..15bfbc9d6df 100644 --- a/docs/funding.md +++ b/docs/funding.md @@ -25,6 +25,7 @@ The best way to find out about upcoming hackathons is by following Polkadot on t Below is a list of other grant and bounty programs in the Polkadot/Substrate ecosystem: - [Acala Grants Program](https://acala.network/ecosystem-program) +- [Aleph Zero Funding Program](https://alephzero.org/ecosystem-funding-program) - [Astar / Shiden Network Builders Program](https://github.com/PlasmNetwork/Builders-Program) - [Crust Grants Program](https://github.com/crustio/Crust-Grants-Program) - [Darwinia Grants Program](https://github.com/darwinia-network/collaboration/blob/master/grant/README.md#grant-program) From 6a5f9b0014bc57dc8c7f6f74a4c9671d1307c9d0 Mon Sep 17 00:00:00 2001 From: Igor Berlenko Date: Wed, 19 Apr 2023 14:08:50 +0800 Subject: [PATCH 328/578] galaxy.md revision 3 (#1642) --- applications/galaxy.md | 211 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 211 insertions(+) create mode 100644 applications/galaxy.md diff --git a/applications/galaxy.md b/applications/galaxy.md new file mode 100644 index 00000000000..4a1bd81231b --- /dev/null +++ b/applications/galaxy.md @@ -0,0 +1,211 @@ +# Galaxy: Three-dimensional Web for Polkadot Users + +- **Team Name:** Galaxy.Do +- **Payment Address:** 0xF1dcdA1C9E76BBf32791da01e464A3F55bd7000c (USDC) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + +## Project Overview :page_facing_up: + +### Overview + +![image](https://user-images.githubusercontent.com/4569866/228949639-f89bb602-59c5-4b30-917e-8a8b3cdebc20.png) + +Web has revolutionized the way we organize and explore knowledge. + +Although web pages digitalized physical documents, they also inherited some of limitations. + +That's the reason most web pages are vertically scrollable, in one dimension only, imitating physical predecessor. + +Whiteboards expanding it's space into second dimension leverage human ability of spatial awareness to enhance the understanding. + +As hyper text links navigate user in between of web site pages, same way whiteboards can be also inter-linked to expand information into a third dimension. + +Then multiple related whiteboards can be rendered as layers on the same canvas with seamless transition in between the layers, thus expanding the knowledge into a third dimension. + +That's the quintessence of Stretch Text concept, which makes it possible to express interconnectedness of all knowledge (intertwingularity) + +**Current grant is offering to develop canvas-based browser which allows polkadot users to create, organize, and share knowledge leveraging three-dimensional Stretch Text space.** + +### Project Details + +#### 1. Frontend - Excalidraw + +![image](https://user-images.githubusercontent.com/4569866/228949713-8de6ff8c-fdde-41ab-8ae9-d895ab3e7b02.png) + +The scene is represented as an object; it contains UI State, list of elements, and files cache. + +Whenever the elements on the scene updated, it triggers rendering of the canvas. + +Each element is represented as an object too: text, images, shapes. + +If given element object has a text field, then each line of the text passed to fillText canvas method. + +If given element is an image though, it's content is fetched from files cache, and then passed to drawImage canvas method. +Files cache is simply a mapping from image content hash to the blob content. + +UI implemented in React rendering on top of the canvas allows to seamlessly create and manipulate the elements on the canvas. + +Selected elements can be joined into groups, and then selected groups can be serialized and saved as a separate layers. + +As user navigates across an infinite canvas, the layers outside of viewport can be unloaded and relevant layers appear. + +#### 2. Networking - Polkadot + +![image](https://user-images.githubusercontent.com/4569866/228949758-62d6cc1e-ed11-493e-800d-846857aaebcb.png) + +Each layer can be serialized into JSON file and then saved to IPFS. + +User who created the layer, then makes a transaction to claim ownership of it. + +In the transaction, user is passing IPFS link and chosen Layer Name. + +The smart contract deployed on the pallete, maintains the mapping from Layer Link to IPFS Link. + +Layer Link is represented as deep link in format of `galaxy://`. + +#### 3. Backend - Chisel + +![image](https://user-images.githubusercontent.com/4569866/228949811-b22de278-3e80-4cf1-8b45-c1e8dcb31879.png) + +Galaxy Browser consist of frontend app, backend server, and database. + +REST API implemented in Rust is running a Deno runtime to handle the network requests in between frontend and database. + +When user opens a deep link, layer loading will be handled by backend endpoint which returns the scene object in response to frontend request. + +Same endpoint will first resolve Layer Link to IPFS link through polkadot as described above, then fetch content of IPFS link, +perform validation of deserialized content to ensure it corresponds scene schema, then save every element as a separate object +in the database, then fetch images and save them to database as well, and then consturct a scene object. + +*The proposed architecture also allows to implement more advanced features: search across different layers, tagging and versioning, recommendations, parallel tranclusion, and microtransactions.* + +### Ecosystem Fit + +Here open for suggestions. Specifically to consider partnerships with: wallets, storage solutions, content sharing platforms and social networks, copyright and microtransaction services. + +## Team :busts_in_silhouette: + +### Team members + +### Contact + +- **Contact Name:** Igor Berlenko +- **Contact Email:** igorberlenko7@gmail.com +- **Website:** https://galaxy.do + +### Legal Structure + +Opensource Code. Governance with DHO (Hypha DAO). + +https://github.com/hypha-dao/hypha-substrate + +### Team's experience + +My profile: + +- https://github.com/7flash + +Relevant repositories I have contributed to: + +- https://github.com/excalidraw/excalidraw +- https://github.com/chiselstrike/chiselstrike +- https://github.com/zsviczian/obsidian-excalidraw-plugin +- https://github.com/JoinSeeds/seeds_light_wallet +- https://github.com/ColdStack-Network/blockchain + +## Development Status :open_book: + +The Galaxy Browser is all inspired by Xanadu Spaces, and particularly the architecture described above solves the problem of "Browser Law" articulated by Ted Nelson in following video: + +https://www.youtube.com/watch?v=kV_vYkSmkxk + +In the next video I showed a short demo of Galaxy Browser with additional features such as layers transitions, command palletes, contextual GPT, and StableDiffusion-bookmarks. + +https://www.youtube.com/watch?v=8Y7_gvmMyKY + +The demo implementation is made possible because of Zsolt work on his Obsidian plugin excalibrain. + +These might be relevant discussions in Excalidraw: + +Layers: https://github.com/excalidraw/excalidraw/issues/6266#issuecomment-1439488787 + +Pinned Anchors: https://github.com/excalidraw/excalidraw/issues/3276#issuecomment-1246985074 + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 1 month +- **Full-Time Equivalent (FTE):** 1 +- **Total Costs:** 10,000 USD + +### Milestone 1 — Proof of Concept + +- **Estimated duration:** 1 week +- **Costs:** 2,500 USD +- **First Milestone is PoC implements following scenario:** + +User opens Galaxy Web App, connects Polkadot Wallet, draws some elements, clicks button to save layer to IPFS and shares a link. +Another user opens the app, choose to load layer from IPFS, inserts the received link, and can see the elements created by first user appear on his canvas. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | MIT | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Frontend: Galaxy Web App | A new repository which integrates Excalidraw whiteboard with Polkadot wallet and IPFS storage | + +### Milestone 2 — Minimal Valuable Product + +- **Estimated Duration:** 3 weeks +- **Costs:** 7,500 USD +- **Second Milestone is MVP implements following scenario:** + +User installs desktop Galaxy App, opens "galaxy://" deep link which is resolved to IPFS, scene is rendered on canvas. User adds other elements on the scene and saves them into a new layer. User closes and reopens the app. He can see both layers with images loaded from database instantly. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | MIT | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an **article** and **video** that explains how to setup and use the Galaxy Browser. | +| 1. | Galaxy Browser | Complete App to organize, share and explore knowledge | +| 2. | Smart contract | It will allow users to claim ownership over layers and resolve Layer Links into IPFS Links | + +### Next Milestones + +**Transclusion scenario** might be beyond the scope of testing promised deliverables but still might be implemented within a timeline: + +User is loading two layers from different wallets into his scene, then saves the whole scene into a new layer with tranclusion of two non-changed layers. +Creators of original two layers receives notification of forked version. +Creator of first layer opens the forked version, only second layer is loaded. It happens because first layer already exist in his database. +Creator of second layer makes changes in some elements which is reflected in combined layer without any actions from creator of combined layer. +It works because during tranclusion, the elements are not copied, and because Layer Link of the original layer remains the same whilst referencing to a different IPFS link. + +**Microtransactions scenarios** will be implemented later. Though worth mentioning here as the most exciting future/feature: + +Different artists publishing their paintings, each painting as a separate Galaxy Layer. +Another user creates a gallery layer with automated script taking the highest ranked paintings into it. +Viewers have to subscribe into the gallery layer to view it. +The subscription payments are distributed in between all of the authors included in the gallery, as well with gallery curators. +Even though viewers can have direct view access to each individual paintings for free, but there is a reason which makes the gallery worth to pay for. That's important to notice, how rearrangement of images on the whiteboard, brings in additional value. +Also notice, how curators managing the gallery are being rewarded along with actual painting authors. +The same mechanics can be applied to any other type of information: news, expert opinions, financial forecasts, etc. +Content Explorers, who rearrange and recommend the most relevant pieces of information in the Web, will be financially incentivized along with actual content creators. + +## Future Plans + +I believe in opensource community to drive the long term development of the project, and of course can see myself leading it as long as needed. + +## Referral Program (optional) :moneybag: + +- **Referrer:** github.com/n13 +- **Payment Address:** bc1q7axtazzhsdttextp0qspueaagv4pgfm5l9ne64 (BTC) + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** personal recommendation + +- Previous grants you may have applied for: https://pomelo.io/grants/galaxy From 9f67519908527ebdcc92f8d8bb40069b2937ca2e Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 19 Apr 2023 08:12:13 +0200 Subject: [PATCH 329/578] Update index.md Add Galaxy --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index e3cd87e796f..c7b7d621f8e 100644 --- a/applications/index.md +++ b/applications/index.md @@ -45,6 +45,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Interstellar](https://www.interstellar.gg/) | [Interstellar - Wallet Phase 2](./Interstellar-network2.md) | [GitHub](https://github.com/Interstellar-Network) | ☐ | ☐ | ☐ | | [Valletech AB](https://valletech.eu/) | [DINFRA](./DINFRA.md) | [GitHub](https://gitlab.com/polkawatch) | ☐ | ☐ | ☐ | | [DAuth](https://github.com/DAuth-Network) | [DAuth](./dauth_network.md) | [GitHub](https://github.com/DAuth-Network) | ☐ | ☐ | ☐ | +| [Galaxy.Do](https://galaxy.do) | [Galaxy: Three-dimensional Web for Polkadot Users](./galaxy.md) | [GitHub](https://github.com/7flash) | ☐ | ☐ | ☐ | [🔝](#menu) From 5f1c1106f17033c31b50462fc082ffdc91f13e1e Mon Sep 17 00:00:00 2001 From: cor Date: Wed, 19 Apr 2023 14:09:29 +0200 Subject: [PATCH 330/578] fix: remove incorrect previous jobs (#1675) These descriptions have been submitted without our reviews and are incorrect --- applications/CosmWasmVM-CoreProduct.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/applications/CosmWasmVM-CoreProduct.md b/applications/CosmWasmVM-CoreProduct.md index 98a4cdd579f..ee82ff985e8 100644 --- a/applications/CosmWasmVM-CoreProduct.md +++ b/applications/CosmWasmVM-CoreProduct.md @@ -105,9 +105,9 @@ We are the only team in the Substrate/Polkadot/Kusama ecosystem implementing Cos ### Team's experience -- Hussein Ait Lahcen: Principal Blockchain engineer at Composable Finance, previously Core Rust developer at Parity -- Abdullah Eryuzlu: Substrate Rust engineer at Composable Finance, previously Substrate engineer at Webb.tools -- Cor Pruijs: Software engineer at Composable Finance, previously Software engineer at ConsenSys +- Hussein Ait Lahcen: Principal Blockchain engineer at Composable Finance +- Abdullah Eryuzlu: Substrate Rust engineer at Composable Finance +- Cor Pruijs: Software engineer at Composable Finance ### Team Code Repos From 8062520f8f23ca12331eea876454739025731359 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 19 Apr 2023 15:23:30 +0200 Subject: [PATCH 331/578] Update README.md Add Polkadot Pioneers Prize --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 01c367d75fa..b840448699c 100644 --- a/README.md +++ b/README.md @@ -332,6 +332,7 @@ Below is a list of other grant and bounty programs in the Polkadot/Substrate eco - [peaq Ecosystem Grant Program](https://www.peaq.network/grant-program) - [Phala Builders Program](https://wiki.phala.network/en-us/build/general/builders-program/) - [Picasso / Composable Grants Program](https://grants.composable.finance) +- [Polkadot Pioneers Prize](https://pioneersprize.polkadot.network/) - [SubQuery Grants Programme](https://subquery.network/grants) ## :information_source: License From ee38f36541a98b57d4686ad951750c8295fcb2d8 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 19 Apr 2023 15:24:34 +0200 Subject: [PATCH 332/578] Update funding.md Add Polkadot Pioneers Prize --- docs/funding.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/funding.md b/docs/funding.md index 15bfbc9d6df..b4fb5013746 100644 --- a/docs/funding.md +++ b/docs/funding.md @@ -38,4 +38,5 @@ Below is a list of other grant and bounty programs in the Polkadot/Substrate eco - [peaq Ecosystem Grant Program](https://www.peaq.network/grant-program) - [Phala Builders Program](https://wiki.phala.network/en-us/build/general/builders-program/) - [Picasso / Composable Grants Program](https://grants.composable.finance) +- [Polkadot Pioneers Prize](https://pioneersprize.polkadot.network/) - [SubQuery Grants Programme](https://subquery.network/grants) From 5498b1a56d7f7698eb09497dd3e0b41d8bc897fd Mon Sep 17 00:00:00 2001 From: qstnus <81143441+qstnus@users.noreply.github.com> Date: Wed, 19 Apr 2023 12:17:05 -0400 Subject: [PATCH 333/578] Update QSTN.md (#1681) --- applications/QSTN.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/applications/QSTN.md b/applications/QSTN.md index 17e89d5b4bb..4423b4b794b 100644 --- a/applications/QSTN.md +++ b/applications/QSTN.md @@ -187,14 +187,14 @@ Article 3: https://news.bloomberglaw.com/litigation/google-plus-7-5-million-priv ### Overview -- **Total Estimated Duration:** 6 months -- **Full-Time Equivalent (FTE):** 6 employees (2 developers, 3 designers, 1 blockchain architect [Orrin]) +- **Total Estimated Duration:** 12 months +- **Full-Time Equivalent (FTE):** 8 employees (4 developers, 3 designers, 1 blockchain architect [Orrin]) - **Total Costs:** 10,000 USD ### Milestone 1 Example — Implement Substrate Modules -- **Estimated duration:** 6 months -- **FTE:** 6 employees +- **Estimated duration:** 12 months +- **FTE:** 8 employees - **Costs:** 10,000 USD | Number | Deliverable | Specification | From 9b0e8a8321583bb4a95156fddf329951b99d5490 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Thu, 20 Apr 2023 02:48:35 -0400 Subject: [PATCH 334/578] Update index.md (#1683) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index c7b7d621f8e..f2860eeff96 100644 --- a/applications/index.md +++ b/applications/index.md @@ -135,7 +135,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Zondax](http://zondax.ch/) | [Hybrid node research grant](hybrid_node_research.md) | [GitHub](https://github.com/ZondaX) | ☐ | ☒ | ☒ | | [Bright Inventions](https://brightinventions.pl/) | [ZK-Snarks Tutorial](ZK-Snarks%20tutorial.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☒ | | [Common Orbit LLC](https://brson.github.io) | [wasm-opt-for-rust maintenance](maintenance/wasm-opt-for-rust.md) | [GitHub](https://github.com/brson/wasm-opt-rs) | ☐ | ☒ | ☐ | -| [Salaheldin Soliman](https://github.com/salaheldinsoliman) | [Solang developer experience improvements](Solang_developer_experience_improvements.md) | [GitHub](https://github.com/hyperledger/solang) | ☐ | ☐ | ☐ | +| [Salaheldin Soliman](https://github.com/salaheldinsoliman) | [Solang developer experience improvements](Solang_developer_experience_improvements.md) | [GitHub](https://github.com/hyperledger/solang) | ☐ | ☒ | ☐ | | [Optymalizacja AI Grzegorz Miebs](https://github.com/miepsik) | [Validator selection](validators_selection.md) | [GitHub](https://github.com/miepsik) | ☐ | ☒ | ☒ | | [Applied Blockchain Ltd](https://appliedblockchain.com/) | [Silent Data](project_silentdata.md) | [GitHub](https://github.com/appliedblockchain) | ☐ | ☐ | ☐ | | [Web3Box Labs](https://github.com/web3box-labs) | [Web3Box](Web3Box.md) | [GitHub](https://github.com/web3box-labs) | ☐ | ☒ | ☒ | From 8f48c8ae8aaf716c0e537af001547937a8d0bf4d Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Fri, 21 Apr 2023 02:05:41 -0400 Subject: [PATCH 335/578] Update index.md (#1685) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index f2860eeff96..22747a04c5e 100644 --- a/applications/index.md +++ b/applications/index.md @@ -94,7 +94,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Tolga Yaycı](https://github.com/tolgayayci) | [Awesome Polka](Awesome-Polka.md) | [GitHub](https://github.com/tolgayayci/awesome-polka/tree/dev) | ☐ | ☐ | ☐ | | [gmajor](https://github.com/gmajor-encrypt) | [XCM Tools](xcm-tools.md) | [GitHub](https://github.com/gmajor-encrypt/) | ☐ | ☐ | ☐ | | [David Semakula](https://github.com/davidsemakula) | [Ink Analyzer](ink-analyzer.md) | [GitHub](https://github.com/ink-analyzer/ink-analyzer) | ☐ | ☐ | ☐ | -| [Bright Inventions](https://brightinventions.pl/) | [High-availability validator setup](High_availability_validator_setup.md) | [GitHub](https://github.com/bright/) | ☐ | ☐ | ☐ | +| [Bright Inventions](https://brightinventions.pl/) | [High-availability validator setup](High_availability_validator_setup.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☐ | | [DIA Data](https://www.diadata.org/) | [Bridges Attestation Oracle](DIA_Bridge_Attestation_Oracle.md) | [GitHub](https://github.com/diadata-org/) | ☐ | ☐ | ☐ | | [TogetherCrew](http://www.togethercrew.com/) | [Community Health Check](community-health-check.md) | [GitHub](https://github.com/RnDAO) | ☐ | ☐ | ☐ | | [Decentration](https://www.decentration.org/) | [Supersig Phase 2](./supersig_fellowship.md) | [GitHub](https://github.com/decentration) | ☐ | ☐ | ☐ | From b3da543ea11e31047b2782c93ab6d657fba5fa7b Mon Sep 17 00:00:00 2001 From: salaheldinsoliman <49910731+salaheldinsoliman@users.noreply.github.com> Date: Fri, 21 Apr 2023 19:30:46 +0200 Subject: [PATCH 336/578] change payment address (#1690) Signed-off-by: salaheldinsoliman --- applications/Solang_developer_experience_improvements.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/applications/Solang_developer_experience_improvements.md b/applications/Solang_developer_experience_improvements.md index a35324d4ad1..60837b5c973 100644 --- a/applications/Solang_developer_experience_improvements.md +++ b/applications/Solang_developer_experience_improvements.md @@ -4,9 +4,9 @@ - **Contributor Name:** Salaheldin Soliman -- **Payment Details:** USDT (ERC20) +- **Payment Details:** DAI (ERC20) -- **Address**: 0xf19d225a4b7dc1fcc53fbdad5a3d87bce53af3c6 +- **Address**: 0x9036b20920ddf473e796d24afd0fe04d4dde0b68 - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 From 96585cb43d18c6fbd1bdc38b548244139472340d Mon Sep 17 00:00:00 2001 From: Nabil Abdellaoui Date: Fri, 21 Apr 2023 13:57:31 -0400 Subject: [PATCH 337/578] Update index.md (#1689) IPFS Utilities delivered last (2nd) milestone --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 22747a04c5e..b22a4c7df9e 100644 --- a/applications/index.md +++ b/applications/index.md @@ -119,7 +119,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [SydTek](https://sydtek.ai/) | [Digital Inheritance in Web3: A Case Study of Soulbound Tokens and Social Recovery Pallets](SydTek.md) | [GitHub](https://github.com/jgophd/Developed-Materials-and-Raw-Data) | ☐ | ☒ | ☐ | | [Anagolay](https://anagolay.network/) | [Multi-token community contributions for verified creators](anagolay-project-idiyanale-multi-token-community-contributions-for-verified-creators.md) | [GitHub](https://github.com/anagolay) | ☐ | ☒ | ☒ | | [Ink Contracts Wizard Team](https://github.com/amankumar1008/contracts-wizard) | [Ink Smart Contract Wizard](ink-smart-contract-wizard.md) | [GitHub](https://github.com/amankumar1008/contracts-wizard) | ☐ | ☒ | ☒ | -| [TDSoftware](https://www.tdsoftware.de/) | [Substrate IPFS Utilities](ipfs_utilities.md) | [GitHub](https://github.com/TDSoftware) | ☐ | ☒ | ☐ | +| [TDSoftware](https://www.tdsoftware.de/) | [Substrate IPFS Utilities](ipfs_utilities.md) | [GitHub](https://github.com/TDSoftware) | ☐ | ☒ | ☒ | | [Ink Boxes Team](https://github.com/nerdsince98) | [Ink Boxes](ink-boxes.md) | [GitHub](https://github.com/avirajkhare00/ink-boxes/) | ☐ | ☒ | ☒ | | [ParaSpell](https://github.com/paraspell) | [ParaSpell Phase 2](ParaSpell_follow-up.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | | [SubRelay](http://subrelay.xyz/) | [SubRelay](subrelay.md) | [GitHub](https://github.com/subrelay) | ☐ | ☒ | ☐ | From ed6d8065af122fdfa9001e96ea76b1e650fa8946 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Mon, 24 Apr 2023 09:45:59 +0200 Subject: [PATCH 338/578] Update index.md MOBR M1 --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index b22a4c7df9e..8553d299465 100644 --- a/applications/index.md +++ b/applications/index.md @@ -69,7 +69,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☒ | ☒ | | [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☒ | | [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☒ | ☐ | -| [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | +| [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☒ | ☐ | | [Aviraj Khare](https://github.com/avirajkhare00) | [Polkasearch](polkasearch.md) | [GitHub](https://github.com/avirajkhare00) | ☐ | ☐ | ☐ | | [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib Follow up](php-rpc-lib-follow-up.md) | [GitHub](https://github.com/gmajor-encrypt/php-substrate-api) | ☐ | ☒ | ☒ | | [CoinFabrik](https://www.coinfabrik.com/) | [Scout - Security Analysis Tool](ScoutCoinFabrik.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☒ | ☒ | From 25dd54c9e2c868bbd554d27639e3058d49b874a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Mon, 24 Apr 2023 10:10:23 +0200 Subject: [PATCH 339/578] Update index.md KMIR M1 --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 8553d299465..1cbd93704ca 100644 --- a/applications/index.md +++ b/applications/index.md @@ -58,7 +58,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [ArtZero](https://artzero.io/) | [ArtZero & InkWhale](ArtZero_InkWhale.md) | [GitHub](https://github.com/artzero-io) | ☐ | ☒ | ☐ | | [EightFish](https://github.com/eightfish-org/eightfish) | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☒ | ☐ | | [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☐ | ☐ | -| [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☐ | ☐ | +| [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☒ | ☐ | | [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | | [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☒ | ☐ | | [Blockcoders](http://blockcoders.io/) | [Cross-chain Wallet - XCW](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☐ | From 6ec64c534ddf2ac10c44c9dbad4e7d903703cafa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Mon, 24 Apr 2023 10:23:57 +0200 Subject: [PATCH 340/578] Update index.md Protofire Contract Wizard M1 --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 1cbd93704ca..7b336148b0e 100644 --- a/applications/index.md +++ b/applications/index.md @@ -57,7 +57,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Deep Ink Ventures GmbH](http://deep-ink.ventures/) | [GenesisDAO](GenesisDAO.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☒ | ☐ | | [ArtZero](https://artzero.io/) | [ArtZero & InkWhale](ArtZero_InkWhale.md) | [GitHub](https://github.com/artzero-io) | ☐ | ☒ | ☐ | | [EightFish](https://github.com/eightfish-org/eightfish) | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☒ | ☐ | -| [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☐ | ☐ | +| [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☒ | ☐ | | [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☒ | ☐ | | [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | | [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☒ | ☐ | From 05cbafc2ae6a7a91adb96ca39127064af3e0690d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Mon, 24 Apr 2023 10:29:08 +0200 Subject: [PATCH 341/578] Update index.md Tesseract mobile dapp connection concluded --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 7b336148b0e..b919cea7f2a 100644 --- a/applications/index.md +++ b/applications/index.md @@ -323,7 +323,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [LimeChain](https://limechain.tech) | [Subsembly - Support for GRANDPA](./assemblyscript-scale-codec.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☐ | ☐ | | [OpenSquare](https://www.opensquare.network) | [Off-chain voting platform](./OpenSquare_paid_qa_protocol.md) | [GitHub](https://github.com/opensquare-network/) | ☐ | ☒ | ☒ | | [Health Hero](https://www.gohealthhero.com/) | [NFT Product Analytics Suite](./nft_product_analytics_suite.md) | | ☐ | ☐ | ☐ | -| [Tesseract](https://tesseract.one/) | Mobile dApps/Wallet Connection | [GitHub](https://github.com/tesseract-one) | ☐ | ☒ | ☐ | +| [Tesseract](https://tesseract.one/) | Mobile dApps/Wallet Connection | [GitHub](https://github.com/tesseract-one) | ☐ | ☒ | ☒ | | [Wow Labz](http://www.wowlabz.com) | [Dot Marketplace](./dot_marketplace.md) | [GitHub](https://github.com/WowLabz) | ☐ | ☒ | ☒ | | [Perun Network](https://perun.network/) | [Perun Channels - Integration with go-perun](./perun_channels-integration.md) | [GitHub](https://github.com/perun-network/) | ☐ | ☒ | ☒ | | [InvArchitects](https://www.invarch.io/) | [InvArch - IP Infrastructure for Substrate](./InvArch.md) | [GitHub](https://github.com/InvArch) | ☐ | ☒ | ☒ | From 1ec48b38bd7bbbdc4c616940041f599d324d84d8 Mon Sep 17 00:00:00 2001 From: Mark Van de Vyver Date: Mon, 24 Apr 2023 19:50:29 +1000 Subject: [PATCH 342/578] Add payment address: Substrate Tokenomics Survey (#1692 --- applications/tokenomics-survey-2022.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/tokenomics-survey-2022.md b/applications/tokenomics-survey-2022.md index 6f8a5efdfaa..6423ece3a34 100644 --- a/applications/tokenomics-survey-2022.md +++ b/applications/tokenomics-survey-2022.md @@ -1,7 +1,7 @@ # Substrate Tokenomics - **Team Name:** Mark Van de Vyver [PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) -- **Payment Address:** To be provided (e.g. 0x8920... (USD)) +- **Payment Address:** 15WoVugRLfBAogS1FBmhzxVv8WZqZK1z4KKHALijTZfdVcCm (USDC) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 ## Project Overview :page_facing_up: From df00e99cf1296cfbbd0f72b913a8434c4e4f09d9 Mon Sep 17 00:00:00 2001 From: Conor Svensson Date: Mon, 24 Apr 2023 13:11:40 +0200 Subject: [PATCH 343/578] Sirato (formerly Epirus) Substrate phase 3 grant application (#1608 * add Sirato Substrate phase 3 * Add specific integration details for Frontier EVM * Update price and duration * Update to just focus on blocks and extrinsics support * Replace delivery with milestone * Update level to 2 --- applications/sirato_substrate_phase3.md | 129 ++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 applications/sirato_substrate_phase3.md diff --git a/applications/sirato_substrate_phase3.md b/applications/sirato_substrate_phase3.md new file mode 100644 index 00000000000..4066c541717 --- /dev/null +++ b/applications/sirato_substrate_phase3.md @@ -0,0 +1,129 @@ +# Sirato (Epirus) Substrate Explorer - Phase III + +- **Project Name:** Sirato (Epirus) Substrate Explorer - Phase III +- **Team Name:** Web3 Labs Ltd +- **Payment Address:** 0xc905c448db9942c662fcb1680f3ecfcd0592409c +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview + +> We recently rebranded from Epirus to Sirato + +This is an application for a follow-up grant for the Epirus Substrate Explorer that has completed two grants previously: + +Phase I: +
+[Application](https://github.com/w3f/Grants-Program/blob/master/applications/epirus_substrate_explorer.md) +
+[Delivery](https://github.com/w3f/Grant-Milestone-Delivery/pull/527) + +Phase II: +
+[Application](https://github.com/w3f/Grants-Program/blob/master/applications/epirus_substrate_phase_2.md) +
+[Milestone 1 Delivery](https://github.com/w3f/Grant-Milestone-Delivery/pull/652) +
+[Milestone 2 Delivery](https://github.com/w3f/Grant-Milestone-Delivery/pull/742) + +### Overview + +From our previous grants we have built: +- A [Wasm contracts explorer](https://substrate.sirato.xyz/) that supports smart contracts deployed on `pallet-contracts` +- A [verifier service](https://github.com/web3labs/ink-verifier-server) that verifies, through reproducible builds, the source code files for a specific on-chain code hash. + +In this grant, we intend to expand Sirato to support essential base data such as blocks, extrinsics and system events. + +### Project Details + +In our current architecture, there are several components: + +- Squid Archive (built on the Subsquid framework): the squid archive connects to the Substrate network node and indexes base data such as blocks and extrinsics, exposing a GraphQL API +- Squid Processor (built on Subsquid framework): the squid processor ingests data from the squid archive, filtering and transforming the relevant data to the data models for the Explorer. Currently, our squid processor is focused on Wasm contract data from `pallet-contracts`. The squid processor exposes a GraphQL API. +- Explorer UI: The explorer UI is made up of a set of composable components that consumes the API of the Squid processor and renders the web application. + +The below diagram illustrates the high-level architecture and how the components interact with each other: + +![Current Architecture](https://drive.google.com/uc?id=1BVgvcQPCwGa3BJyD__z-wXKgzyt9mBbG) + +In this grant, we will add data handlers and data models for the base data. Since the Squid Archive directly exposes the network base data of blocks and extrinsics, we will use the GraphQL API of the squid archive in the UI to retrieve this data. + +#### **Network Data Support** + +The Squid Archive already exposes blocks, extrinsics and events data through its GraphQL API. We will consume this API from the explorer UI and build the components to show: + +- Blocks list +- Extrinsics list +- Block page: contains block details and all extrinsics and events included in this block +- Extrinsics page: contains extrinsic details and all events emitted from the extrinsic + +#### Mock-ups + +Mock up of how an extrinsic page will look: + +![Extrinsic Page](https://drive.google.com/uc?id=112GANJWuaxcFJBbhS6-I9ubGMfi9pV-N) + +### Technology Stack + +We plan to build on top of our current explorer, so we will continue using the same technology stack: +- [Subsquid Framework](https://www.subsquid.io/), with Typescript, for data processing. +- React.js and Tailwindcss for the UI + +### Out of Scope + +Due to time and resource constraints, we will leave the following items for future development: +- Additional query endpoints for interrogating the contract registry +- The ability to interact directly with verified smart contracts + +### Ecosystem Fit + +There is currently a lack of high-quality open-source explorers for smart contract networks in the Substrate ecosystem. Polkadot.js is the de facto explorer and it is very modular and flexible. However, it was designed more for development and lacks the ability to filter, sort and search through data on the network. In the space of user-facing explorers, Subscan is currently the most popular solution and has the most comprehensive support for Substrate pallets. On the other hand, Subscan is mostly close-sourced and introduces an economic entry barrier for new networks. + +This dominance by Subscan is something that has been highlighted recently during an in-depth [discussion on the Polkadot Forum](https://forum.polkadot.network/t/subscan-ought-to-change-its-business-model-or-be-replaced/2357). + +While a number of open-source alternatives have emerged, none of them have support for smart contracts. In our previous grants, we have expanded the open-source explorer offerings to include WASM contracts on Substrate. At the same time, we also want to provide the essential base data like blocks and extrinsics so that smart contract networks can have a feature-complete explorer at their fingertips. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 1 month +- **Full-Time Equivalent (FTE):** 2 FTE +- **Total Costs:** 25,000 EUR + +### Milestone 1 + +| Nº | Deliverable | Specification +| :-- | :-- | :-- +| 0a. | License | Apache 2.0 +| 0b. | Documentation | We will provide inline documentation of the code and documentation on how to set up an explorer instance. +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. We will describe how to run these tests in the guide. +| 0d. | Docker | We will provide a Dockerfile and Docker Compose file(s) to ease the deployment and execution of the system. +| 1. | Updated Explorer UI - Base data support | The Explorer UI will connect to the Squid archive GraphQL endpoint and display block, extrinsic and system event data. +| 2. | Public explorer instance | A publicly accessible instance of the Explorer connected to a development network with WASM smart contracts support, with additional display of blocks, extrinsics and events. + +## Team :busts_in_silhouette: + +### Contact + +- **Contact Name:** Conor Svensson +- **Contact Email:** [conor@web3labs.com](mailto:conor@web3labs.com) + +### Legal Structure + +- **Registered Address:** 7 Bell Yard, London, England, WC2A 2JR +- **Registered Legal Entity:** Web3 Labs Ltd, CRN 10783824 + +### Team Code Repos + +- https://github.com/web3labs + +## Future Plans + +We plan to add open-source support to other popular Substrate pallets in the future. Some interesting pallets we are considering are assets and XCM related pallets, to be able to track asset movements across the DotSama networks. + +The Frontier EVM and EVM+ pallet by Acala are also valuable addition to the ecosystem that we wish to support at some point. On top of that, we also plan to add some proprietary modules for the explorer to be able to sustain our growth long-term. Our goal is to provide a full-fledged open-core explorer with comprehensive data and intuitive UI that networks can customise to their needs. + +Besides the core explorer, we also want to expand the functionality of our ink! verifier service. Right now, it only supports the verification and metadata hosting of ink! smart contracts. + +Our goal is to support any WASM smart contracts and evolve the service to a multi-VM metadata registry that can scale up to cater for the entire Substrate and DotSama ecosystems. + From dc187cb430f21cc84056c075ba6ae318cb3305e0 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 24 Apr 2023 13:56:06 +0200 Subject: [PATCH 344/578] Update index.md Add Sirato --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index b919cea7f2a..0408c8d5b91 100644 --- a/applications/index.md +++ b/applications/index.md @@ -46,6 +46,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Valletech AB](https://valletech.eu/) | [DINFRA](./DINFRA.md) | [GitHub](https://gitlab.com/polkawatch) | ☐ | ☐ | ☐ | | [DAuth](https://github.com/DAuth-Network) | [DAuth](./dauth_network.md) | [GitHub](https://github.com/DAuth-Network) | ☐ | ☐ | ☐ | | [Galaxy.Do](https://galaxy.do) | [Galaxy: Three-dimensional Web for Polkadot Users](./galaxy.md) | [GitHub](https://github.com/7flash) | ☐ | ☐ | ☐ | +| [Web3 Labs Ltd](https://www.web3labs.com/) | [Sirato (Epirus) Substrate Explorer - Phase III](./sirato_substrate_phase3.md) | [GitHub](https://github.com/web3labs) | ☐ | ☐ | ☐ | [🔝](#menu) From 902b70760d0d052a2f917f84d18ed787797c36bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Mon, 24 Apr 2023 16:34:29 +0200 Subject: [PATCH 345/578] Update IDE_for_ink_Smart_Contracts.md (#1693) Focus on maintenance instead of rewrite. --- docs/RFPs/Open/IDE_for_ink_Smart_Contracts.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/RFPs/Open/IDE_for_ink_Smart_Contracts.md b/docs/RFPs/Open/IDE_for_ink_Smart_Contracts.md index 273c0449f22..40939bf77dc 100644 --- a/docs/RFPs/Open/IDE_for_ink_Smart_Contracts.md +++ b/docs/RFPs/Open/IDE_for_ink_Smart_Contracts.md @@ -7,7 +7,7 @@ [ink!](https://github.com/paritytech/ink) is a domain-specific language for writing smart contracts in Rust and compiles to Wasm code. You can deploy ink! contracts on parachains that support the contracts pallet, as well as on stand-alone blockchains built with Substrate. -The goal of this RFP is to find teams that would like to develop or maintain a browser-based playground for editing, compiling & sharing ink! smart contracts. The [ink! Playground](https://ink-playground.substrate.io/), previously maintained by Parity, utilizes Typescript, React, Docker, and [Monaco Editor](https://microsoft.github.io/monaco-editor/). Teams could continue to work on the [ink! Playground](https://github.com/paritytech/ink-playground), or choose to build something new if desired. For example, it might be possible to leverage GitHub Codespaces in combination with GitHub Actions or the previously developed [ink! Remix plugin](https://github.com/blockchain-it-hr/ink-remix-plugin). +The goal of this RFP is to find teams that would like to maintain the browser-based ink! Playground for editing, compiling & sharing ink! smart contracts. [ink! Playground](https://ink-playground.substrate.io/), previously maintained by Parity, utilizes Typescript, React, Docker, and [Monaco Editor](https://microsoft.github.io/monaco-editor/). **Useful resources:** - [ink!](https://use.ink/) @@ -17,6 +17,6 @@ The goal of this RFP is to find teams that would like to develop or maintain a b ## Deliverables -The structure of the grant and the milestones depends highly on the project itself. It’s therefore up to the applying team to come up with a milestone and delivery structure. +We recommend applying for a [maintenance grant](https://w3f.github.io/Grants-Program/docs/maintenance), which allows a more flexible structure and roadmap. The list of issues and features to be covered by the grant should be discussed with the previous maintainers and the community, but it is generally up to the applying team to come up with a milestone and delivery structure. From 461b0b6051729a255dbafc6459da12f377bc5a91 Mon Sep 17 00:00:00 2001 From: Grzegorz Sieczkowski <59612552+gsieczkowski10clouds@users.noreply.github.com> Date: Mon, 24 Apr 2023 08:02:24 -0700 Subject: [PATCH 346/578] Crowdloan frontend template (#1686 * Grant application - Crowdloan Front End Template * During the development phase we decided to use Astro instead of Gatsbe as it suits better to this project and has a lower entry threshold for less experienced developers that may want to use our template. --- applications/crowdloan_frontend_template.md | 25 +++++++++++---------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/applications/crowdloan_frontend_template.md b/applications/crowdloan_frontend_template.md index b62eeb249bd..3ff476af941 100644 --- a/applications/crowdloan_frontend_template.md +++ b/applications/crowdloan_frontend_template.md @@ -97,7 +97,8 @@ We will also suggest a One Page or Single Page approach that, while still having ### SSG support (Jamstack only) -We aim to start with the support of Gatsby, a popular React-based choice for SSGs, with a vast community of its own. An initial survey of the Parity community should be done to see whether these assumptions match and should be revised. +We aim to start with the support of Astro, a popular React-based choice for SSGs, with a vast +community of its own. An initial survey of the Parity community should be done to see whether these assumptions match and should be revised. When it comes to other SSGs, the ports can either be motivated by further grants or left to the community of open source volunteers. As mentioned before, there is an intrinsic motivation of each SSG’s community to port popular templates. @@ -141,17 +142,17 @@ For parts of the community who are less comfortable with the Jamstack approach w - **FTE:** 2 (as above) - **Costs:** 30,000 USD -| Number | Deliverable | Specification | -| -----: | ----------- |--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| 0a. | License | MIT or TBD | -| 0b. | Documentation | For both approaches (Webflow & Jamstack) we provide how-to guides. Jamstack will be documented in the Github repo. | -| 0c. | Article | We will publish an article presenting the templates and how to use them. | -| 1a. | Benchmarking | Design research of existing Crowdloan pages and other one pages designs, like Github project pages templates.
This will allow us to synthesize viable options of the page designs | -| 1b. | Design Direction Prototype | Aiming to create as many medium to high-fidelity dd prototypes as possible that allows the Grants team and the community to have an input on the design direction
The aim is to have the prototypes at 25%-50% completeness, to see major components/features and the general design direction. This way we don't waste time on dismissed design directions.
The designs should follow good practices in general without requiring additional research | -| 1c. | Repo Setup | Repo setup incl. base libraries/frameworks, initial technical documentation. Undesigned base scaffold. Allows the implementation to be simplified by forking | -| 2. | Jamstack implementation in Gatsby | One (1) chosen design direction

Minimum sections:
- Project information
- Rewards Schema
- Current contributions
- Time left in Crowdloan and competition
- Contribute CTA
- After the Crowdloan

Implemented as One Page Design | -| 3. | Webflow implementation | One (1) chosen design direction

Minimum sections:
- Project information
- Rewards Schema
- Current contributions
- Time left in Crowdloan and competition
- Contribute CTA
- After the Crowdloan

Implemented as One Page Design | -| 4. | Figma Template Publishing | Allows to use it for other solutions | +| Number | Deliverable | Specification | +| -----: |----------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 0a. | License | MIT or TBD | +| 0b. | Documentation | For both approaches (Webflow & Jamstack) we provide how-to guides. Jamstack will be documented in the Github repo. | +| 0c. | Article | We will publish an article presenting the templates and how to use them. | +| 1a. | Benchmarking | Design research of existing Crowdloan pages and other one pages designs, like Github project pages templates.
This will allow us to synthesize viable options of the page designs | +| 1b. | Design Direction Prototype | Aiming to create as many medium to high-fidelity dd prototypes as possible that allows the Grants team and the community to have an input on the design direction
The aim is to have the prototypes at 25%-50% completeness, to see major components/features and the general design direction. This way we don't waste time on dismissed design directions.
The designs should follow good practices in general without requiring additional research | +| 1c. | Repo Setup | Repo setup incl. base libraries/frameworks, initial technical documentation. Undesigned base scaffold. Allows the implementation to be simplified by forking | +| 2. | Jamstack implementation in Astro | One (1) chosen design direction

Minimum sections:
- Project information
- Rewards Schema
- Current contributions
- Time left in Crowdloan and competition
- Contribute CTA
- After the Crowdloan

Implemented as One Page Design | +| 3. | Webflow implementation | One (1) chosen design direction

Minimum sections:
- Project information
- Rewards Schema
- Current contributions
- Time left in Crowdloan and competition
- Contribute CTA
- After the Crowdloan
Out of the scope: integrate contribution flow and polkaskan table due to Webflow technical limitations (users of template may still try to implement that on their own way)

Implemented as One Page Design | +| 4. | Figma Template Publishing | Allows to use it for other solutions | From 7763f5393c72fa3e5f8fdab52795f5c471a63255 Mon Sep 17 00:00:00 2001 From: Alex Shkor Date: Tue, 25 Apr 2023 15:07:09 +0100 Subject: [PATCH 347/578] application: CILA - omnichain ifrastructure (#1679) * application: CILA - omnichain ifrastructure * requested changes * Update applications/CILA-omnichain-infrastructure.md Co-authored-by: S E R A Y A * Update applications/CILA-omnichain-infrastructure.md Co-authored-by: S E R A Y A * Update applications/CILA-omnichain-infrastructure.md Co-authored-by: S E R A Y A * Update applications/CILA-omnichain-infrastructure.md Co-authored-by: S E R A Y A * requested changes fix * add details to automated tests delivery * added NFT standard research delivery * added NFT standard research delivery fix --------- Co-authored-by: S E R A Y A --- applications/CILA-omnichain-infrastructure.md | 511 ++++++++++++++++++ 1 file changed, 511 insertions(+) create mode 100644 applications/CILA-omnichain-infrastructure.md diff --git a/applications/CILA-omnichain-infrastructure.md b/applications/CILA-omnichain-infrastructure.md new file mode 100644 index 00000000000..208632f1bad --- /dev/null +++ b/applications/CILA-omnichain-infrastructure.md @@ -0,0 +1,511 @@ +# CILA - Omnichain Infrastructure + +- **Team Name:** Collective Intelligence Labs +- **Payment Address:** bc1qff0kjc6pyjkneyt3pctm5nahjpd9f774avz55x (BTC) +- **Level:** 2 + +## Project Overview :page_facing_up: + +### Overview + +The goal of this project is to implement an omnichain smart contract infrastructure support for Substrate framework. 🌐🤖 This will include the implementation of CQRS + Event Sourcing execution environment plus an example smart-contract. The implementation will be done using WASM and/or native Rust Substrate implementation as a pallet. The implementation will include implementing Protobuf support on-chain, serialization/deserialization, aggregated repository, event store, command/operations dispatcher, and events emitter. 🛠️👨‍💻 + +### Introduction + +This project aims to add an omnichain smart contract infrastructure support for Substrate framework by implementing a CQRS + Event Sourcing execution environment. CQRS (Command Query Responsibility Segregation) is a design pattern that separates the command and query responsibilities of an application. Event Sourcing is a design pattern that represents the state of an application as a series of events that are stored in an event store. 🧬💻 + +### Implementation +The implementation of the omnichain smart contract infrastructure will be done using WASM and/or native Rust Substrate implementation as a pallet. The implementation will include the following components: + +#### Protobuf support on-chain +Protobuf is a language-agnostic binary serialization format that allows developers to define structured data schemas. The implementation will include support for Protobuf on-chain, which will enable developers to define smart contract interfaces using Protobuf. 🤖💾 + +#### Aggregate Repository +Aggregate Repository is a data storage module that manages the state and storage of aggregate objects. It provides methods for creating, reading, updating, and deleting aggregates. 📈📊 + +#### Event Store +An event store is a database that stores events in the order they occurred. The implementation will include an event store, which will store all the events generated by the smart contract. 🗂️📑 + +#### Command/operations Dispatcher +A command/operations dispatcher is a component that receives commands/operations and dispatches them to the appropriate handler. The implementation will include a command/operations dispatcher, which will enable developers to define command/operation handlers for the smart contract. 🚚👨‍✈️ + +#### Events Emitter +An events emitter is a component that emits events. The implementation will include an events emitter, which will enable developers to define event handlers for the smart contract. 📣🔊 + +## Conclusion +The completion of this project will provide a powerful infrastructure for developers to build customized omnichain smart contracts on the Substrate framework. 💪👨‍💼 + +![architecture](https://i.imgur.com/QsmzpZR.png) + +## 🚀 Technology Stack + +**Programming Language** - Rust 🦀 + +**Blockchain Framework** - Substrate ⛓️ + +**Virtual Machine** - WebAssembly (WASM) 🕸️ + +**Serialization** - Protocol Buffers (protobuf) 📜: a language-agnostic data serialization format that allows for efficient and interoperable communication between different services and systems. + +**Design Patterns**: +- Event Sourcing 📝: a pattern that captures all changes to an application state as a sequence of events, which can be used to reconstruct the state at any point in time. +- Command Query Responsibility Segregation (CQRS) 🧬: a pattern that separates the read and write concerns of an application, using separate models and interfaces for each. +- Saga pattern 🌟: a pattern for coordinating distributed transactions across multiple services, ensuring consistency and reliability. +- Domain-Driven Design (DDD) 🏰: a design approach that emphasizes the importance of the domain model in shaping the architecture of a software system. + +**Database** - MongoDB 🗄️: a NoSQL document database that provides scalability, flexibility, and high availability. + +**Testing Framework** - Rust Testing 🧪: Rust has an inbuilt testing framework that enables testing of units of code in isolation. + +**CI/CD** - GitHub Actions 🚀: a continuous integration and continuous deployment service that can automate the build and deployment processes. + +**Containerization** - Docker 🐳: a tool that allows for the creation, deployment, and running of applications in containers, providing a consistent runtime environment across different platforms. + + +# Documentation for Core Copmpontents + +# Dispatcher + +The `Dispatcher` is a component of the omnichain smart contract infrastructure that receives commands/operations and dispatches them to the appropriate handler. The `Dispatcher` class enables developers to define command/operation handlers for the smart contract. + +## Usage + +The `Dispatcher` can be used in the implementation of the CQRS + Event Sourcing execution environment for Substrate framework. It receives commands/operations from external sources, such as a client or a node, and routes them to the appropriate command/operation handler. + +To use the `Dispatcher`, developers first define a set of command/operation handlers for the smart contract. These handlers can be implemented as methods in a Rust struct. The `Dispatcher` class then instantiates this struct and routes commands/operations to the appropriate method based on the type of command/operation. + +## Benefits + +The `Dispatcher` provides a simple and flexible way to handle commands/operations in the smart contract. By defining a set of command/operation handlers, developers can easily add new functionality to the smart contract without having to modify the `Dispatcher` class itself. + +In addition, the `Dispatcher` enables developers to implement complex business logic in the smart contract by routing commands/operations to the appropriate handler. This allows for a more modular and maintainable codebase. + +## Conclusion + +The `Dispatcher` is a crucial component of the omnichain smart contract infrastructure. By enabling developers to define command/operation handlers for the smart contract, it provides a simple and flexible way to handle commands/operations. Its usage in the implementation of the CQRS + Event Sourcing execution environment for Substrate framework enables developers to implement complex business logic in a modular and maintainable codebase. + +# EventStore + +## Description + +The `EventStore` is a database that stores events in the order they occurred. It is a crucial component of the omnichain smart contract infrastructure support for Substrate framework. The `EventStore` class enables the storage of all events generated by the smart contract, allowing for a complete historical record of all transactions and changes to the smart contract's state. + +## Implementation + +The `EventStore` is implemented using an internal Substrate database. The `EventStore` stores events in the form of serialized binary data plus metadata, which can be easily deserialized for querying and analysis. + +## Features + +The `EventStore` includes the following features: + +- **Event storage:** The `EventStore` stores all events generated by the smart contract in the order they occurred, allowing for a complete historical record of all transactions and changes to the smart contract's state. + +- **Querying:** The `EventStore` allows for easy querying of events using various criteria, such as time range, event type, or specific parameters. + +- **Deserialization:** The `EventStore` can easily deserialize stored binary data for querying and analysis. + +- **Scalability:** The `EventStore` can handle large volumes of events and is designed for scalability. + +## Benefits + +The `EventStore` provides several benefits to developers building smart contracts on the Substrate framework, including: + +- **Transparency:** The `EventStore` provides a complete historical record of all transactions and changes to the smart contract's state, ensuring transparency and accountability. + +- **Auditability:** The `EventStore` allows for easy querying and analysis of events, enabling developers to audit the smart contract's behavior and ensure compliance with regulations and business rules. + +- **Flexibility:** The `EventStore` can handle a wide range of event types and is designed for scalability, providing flexibility for developers building smart contracts on the Substrate framework. + +## Conclusion + +The `EventStore` is a crucial component of the omnichain smart contract infrastructure support for Substrate framework. It provides event storage, querying, deserialization, and scalability features, enabling developers to build transparent, auditable, and flexible smart contracts on the Substrate framework. The completion of this project will provide a powerful infrastructure for developers to build customized smart contracts on the Substrate framework, with the `EventStore` serving as a key component of this infrastructure. + +# Snapshot Store + +## Overview +The `Snapshot Store` is a component of the omnichain smart contract infrastructure that provides a way to store and retrieve snapshots of the smart contract state. A snapshot is a read-only view of the smart contract state at a particular point in time. Snapshots are useful for optimizing the performance of the smart contract by reducing the amount of data that needs to be read from the event store. + +## Implementation +The implementation of the `Snapshot Store` includes the following components: + +- `Snapshot Store`: The Snapshot Store is the primary component. It provides an interface for storing and retrieving snapshots of the smart contract state. +- `Snapshot Index`: The Snapshot Index is a data structure that is used to index snapshots by their version. It allows for efficient retrieval of the latest snapshot. +- `Snapshot Writer`: The Snapshot Writer is a component that is used to write snapshots to the Snapshot Store. It receives the current state of the smart contract and writes it to the Snapshot Store as a snapshot. +- `Snapshot Reader`: The Snapshot Reader is a component that is used to read snapshots from the Snapshot Store. It receives a snapshot version and returns a read-only view of the smart contract state at that version. + +## Conclusion +The `Snapshot Store` provides a way to store and retrieve snapshots of the smart contract state, which can be used to optimize the performance of the smart contract. The implementation includes the `Snapshot Store`, `Snapshot Index`, `Snapshot Writer`, and `Snapshot Reader` components. The completion of this component will provide a pefrormance optmization for omnichain smart contracts on the Substrate framework. + +# Aggregate + +The `Aggregate` is a core component of the CQRS + Event Sourcing design pattern. It represents the current state of an entity and is responsible for handling commands and producing events. + +## Description + +An `Aggregate` is a stateful object that represents a single entity in the system. It maintains its state by applying events to its internal state. A new state can be generated by applying new events to the existing state. + +In the context of the Substrate framework, an `Aggregate` is implemented as a Rust struct that contains its internal state and a set of methods to apply events and handle commands. + +## Implementation + +The `Aggregate` is implemented using the following components: + +### Internal state + +The internal state of an `Aggregate` is represented as a Rust struct. The struct contains all the data necessary to represent the current state of the entity. + +### Command handling + +The `Aggregate` contains a set of methods to handle commands. These methods accept a command object as input and return a set of events that represent the result of executing the command. + +### Event sourcing + +The `Aggregate` implements event sourcing by maintaining a list of events that have been applied to the internal state. When a new command is received, the `Aggregate` applies the appropriate events to generate a new state. + +### Snapshotting + +The `Aggregate` implements snapshotting by periodically storing a snapshot of its internal state. When an `Aggregate` is retrieved from its event stream, it can be initialized with the latest snapshot and then apply only the events that occurred after the snapshot. + +## Conclusion + +The `Aggregate` is a core component of the CQRS + Event Sourcing design pattern. It represents the current state of an entity and is responsible for handling commands and producing events. The implementation of the `Aggregate` in the Substrate framework provides a powerful mechanism for building complex and scalable smart contracts. + + +# AggregateState + +The `AggregateState` represents the state of an aggregate object in the event sourcing pattern. It is responsible for maintaining the current state of the aggregate object by processing the events that have occurred in the past. + +### Properties + +- `id`: The unique identifier of the aggregate object. +- `version`: The version of the aggregate object. +- `events`: The list of events that have occurred in the past. + +### Methods + +- `apply_event(event)`: Applies the given event to the current state of the aggregate object. This method updates the state of the aggregate object based on the event that occurred. +- `get_version()`: Returns the version of the aggregate object. +- `get_events()`: Returns the list of events that have occurred in the past. + +### Usage + +To use the `AggregateState` , you must first create an instance of it and initialize it with the current state of the aggregate object. You can then apply events to the aggregate object by calling the `apply_event()` method. + +## Diagramm + +Architecture Overview Diagram +![Diagramm](https://i.imgur.com/nWGtuEc.png) + +Flow Diagramm + +![Diagramm](https://i.imgur.com/1jeLNo1.png) + +Command Processing Flow Diagramm + +```sql + +------------+ +------------+ +-----------------+ +-------------------+ +------------+ + | Application| | Router | | Execution Chain | | Event Relay Node | | Aggregation| + +------------+ +------------+ +-----------------+ +-------------------+ +------------+ + | | | | | + | Command Request | | | | + |------------------>| | | | + | | | | | + | Command Handler | | | | + |------------------>| | | | + | | Command Request | | | + | |------------------->| | | + | | | Execute Command (CQRS) | | + | | |--------------------------->| | + | | | | Store Event (ES) | + | | | |----------------------------->| + | | | | | + | | | | Broadcast Event to | + | | | | Other Chains | + | | | |--------------------------->| + | | | | | + | | | | Transmit Event to | + | | | | Aggregation Cluster | + | | | |----------------------------->| + | | | | | + | | | | Process Events and | + | | | | Produce Aggregated Data | + | | | |<-----------------------------| + | | | | | + | | | | Return Aggregated Data | + | | | |<-----------------------------| + | | | | | + +``` + +# API Documentation + +## Domain + +### Aggregate + +#### `AggregateState` + +##### Methods + +* `new() -> Self`: Creates a new instance of `AggregateState`. +* `apply_events(&mut self, events: Vec) -> Result<(), String>`: Applies a list of domain events to the aggregate state. +* `clear(&mut self)`: Clears the state of the aggregate. + +#### `DomainEvent` + +##### Methods + +* `new(evnt_type: DomainEventType, evnt_payload: Vec) -> Self`: Creates a new instance of `DomainEvent`. +* `serialize(&self) -> Result, String>`: Serializes the domain event to a byte array. + +#### `DomainEventType` + +##### Variants + +* `NFT_MINTED` +* `NFT_TRANSFERED` + +### Entities + +#### `NFT` + +##### Fields + +* `hash: [u8; 32]`: The unique hash of the NFT. +* `owner: Address`: The address of the owner of the NFT. + +##### Methods + +* `new(hash: [u8; 32], owner: Address) -> Self`: Creates a new instance of `NFT`. +* `get_hash(&self) -> [u8; 32]`: Returns the hash of the NFT. +* `get_owner(&self) -> Address`: Returns the owner of the NFT. +* `transfer(&mut self, new_owner: Address)`: Transfers the ownership of the NFT to a new owner. + +## Application + +### Command + +#### `Command` + +##### Fields + +* `cmd_type: CommandType` +* `cmd_payload: Vec` + +##### Methods + +* `new(cmd_type: CommandType, cmd_payload: Vec) -> Self`: Creates a new instance of `Command`. +* `serialize(&self) -> Result, String>`: Serializes the command to a byte array. + +#### `CommandType` + +##### Variants + +* `MINT_NFT` +* `TRANSFER_NFT` + +### Service + +#### `CommandDispatcher` + +##### Methods + +* `dispatch(command: Command) -> Result<(), String>`: Dispatches a command to the appropriate handler. + +#### `NFTService` + +##### Fields + +* `state: NFTsState` +* `event_store: Box` +* `dispatcher: Box` + +##### Methods + +* `new(state: NFTsState, event_store: Box, dispatcher: Box) -> Self`: Creates a new instance of `NFTService`. +* `handle_command(&mut self, command: Command) -> Result<(), String>`: Handles a command by dispatching it to the appropriate handler. +* `get_nft_owner(&self, hash: [u8; 32]) -> Option
`: Returns the owner of an NFT with the given hash. + +### Event + +#### `DomainEventType` + +##### Variants + +* `NFT_MINTED` +* `NFT_TRANSFERED` + +#### `DomainEvent` + +##### Fields + +* `evnt_type: DomainEventType` +* `evnt_payload: Vec` + +##### Methods + +* `new(evnt_type: DomainEventType, evnt_payload: Vec) -> Self`: Creates a new instance of `DomainEvent`. +* `serialize(&self) -> Result, String>`: Serializes the domain event to a byte array. + +### Store + +#### `AggregateRepository` + +##### Fields + +* `event_store: Box` + +##### Methods + +* `new(event_store: Box) -> Self`: Creates a new instance of `AggregateRepository + +🌟 **Ecosystem Fit:** 🌟 + +🔹 **Project's Fit:** CILA will provide an infrastructure for building efficient omnichain smart contracts that can be integrated into the Polkadot ecosystem, offering a unique solution in the Substrate/Polkadot/Kusama landscape. + +🔹 **Target Audience:** Developers interested in building omnichain smart contracts on Substrate, Polkadot, and Kusama, particularly those looking to develop cross-chain applications and interact with multiple blockchain networks. + +🔹 **Project's Purpose:** The infrastructure will enable developers to build more efficient and scalable omnichain smart contracts, making it easier to create cross-chain applications that interact with multiple blockchain networks. This will help solve the problem of siloed blockchains and allow developers to take advantage of the benefits of multiple chains. + +🔹 **Similar Projects:** We are not aware of any other projects similar to OmniChain in the Substrate/Polkadot/Kusama ecosystem, offering a unique solution for building omnichain smart contracts. + +## Team 🦾 + +### Team members + +- 👨‍💻 Alex Shkor - Architect, Developer, Team Lead +- 👨‍💻 Alexey Kulik - Architect, Developer +- 👩‍💼 Julia Shinkevich - Project Manager +- 🧑‍💼 Max Slyzkoukh - Product Manager +- 👨‍🔧 Yahor Tsaryk - Engineer + + +### Contact + +- **Contact Name:** Alex Shkor +- **Contact Email:** alex@cilabs.ai +- **Website:** https://collectiveintelligence.dev/ + +### Legal Structure + +- **Registered Address:** 16192 Coastal Highway, Lewes, DE 19958, United States. +- **Registered Legal Entity:** Collective Intelligence Labs Inc. + +### Team's experience + +Our team's extensive experience in blockchain development and past successful projects make us well-suited for this project. We have developed several blockchain-based platforms, including DeSci, which offers a decentralized scientific communication infrastructure, and IPledger, which registers intellectual property assets on the blockchain. We have also built a Proof of Share protocol for verification on a chain that specific files have been shared between parties, an on-chain grants distribution platform, a decentralized technology transfer platform, [F-NFT](https://github.com/DEIPworld/deip-node/tree/develop/pallets/deip_f_nft) and [Event Proxy](https://github.com/DEIPworld/deip-node/tree/develop/event-proxy) for Substrate, and other projects. + +Our team members have also contributed to open-source blockchain projects, demonstrating our commitment to the development of the blockchain ecosystem as a whole. + +Our Team Lead is distributed systems architect and has over 14 years of experience in this field, with one of our team members being the inventor of omnichain smart-contracts protocol, which is an important aspect of this project. Our Software Engineer has over 10 years of experience in distributed systems engineering and was the ex-CTO at DEIP and the creator of the Economy Protocol. Our Tech Lead has experience in distributed system and blockchain R&D and was the ex-Head of R&D at Paralect, while also having experience as an ex-CPO at DEIP. Our Head of Marketing has 9 years of experience in PR and communications, having worked with micromobility and web3 startups. Our Product Manager expert in digital transformation has 6 years of experience in the procurement of 50+ leading private and state Ukrainian enterprises. + +As a team, we have previously applied for a grant from the web3 foundation grants program for our DEIP project (DEIPWORLC Inc. legal entity). However, due to the constantly evolving market landscape and changing needs of the industry, we decided to pivot multiple times, and therefore did not deliver original proposal fully (only about 50% of it - onchain part). During the process we realized that on-chain IP management would not be possible without other infrastructure part. Therefore we decided to completely stop [previous project](https://github.com/DEIPworld), change our focus and start working on a diferent solution, the core solution that will make possible to implement DEIP and other our projects that rely on omni-chain infrastructure and onchain IP management - omni-chain infrastructure + +We believe that being transparent about our previous application and pivot is important. We want to assure the committee that we are committed to delivering the proposed solution for our current application, and that we are passionate about creating value in the blockchain ecosystem. + +We are confident that our team's expertise and experience in developing distributed systems and infrastructure will enable us to successfully execute our proposed CILA omnichain infrastructure project. We believe that this infrastructure is crucial for the growth and adoption of blockchain technology, and we are excited about the opportunity to contribute to this space. + +### Team Code Repos + +- https://github.com/Collective-Intelligence-Labs + +### Team GitHub Profiles + + +- https://github.com/alexshkor +- https://github.com/aliakseikulik +- https://github.com/yahortsaryk +- https://github.com/juliacil + +### Team LinkedIn Profiles + +- https://www.linkedin.com/in/alexshkor/ +- https://www.linkedin.com/in/alexeykulik/ +- https://www.linkedin.com/in/julia-shinkevich/ +- https://www.linkedin.com/in/max-slyzkouh/ +- https://www.linkedin.com/in/yahor-tsaryk-92032a68/ + + +## Development Status :open_book: + +CILA omnichain infrastructure for Substrate is currently in the research and planning phase. We have conducted extensive research on the existing smart contract infrastructure and identified the need for an omnichain smart contract solution. Our team has also analyzed the capabilities of the Substrate/Polkadot/Kusama ecosystem and determined that it is the ideal platform for building this solution. + +We have created a detailed project plan that outlines the development roadmap and milestones. This plan includes research and development of the necessary components. + +- Draft of solidity implementation: https://github.com/Collective-Intelligence-Labs/cila-sol-contracts +- Vision Paper: https://docsend.com/view/eqt2iazwmff3jikh + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 3 months +- **Full-Time Equivalent (FTE):** 2 FTE +- **Total Costs:** 30,000 USD + +### Milestone 1 — Design and Implementation + +- **Estimated duration:** 1 month +- **FTE:** 2 +- **Costs:** 10,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | + **0b.** | Documentation | We will ensure comprehensive documentation of the code by providing both inline comments and a step-by-step tutorial. This tutorial will guide the user through spinning up a Substrate-based execution environment for the CILA Omnichain Infrastructure and testing omnichain transactions, showcasing the new functionality. | +| **0c.** | Testing and Testing Guide | We will conduct comprehensive unit testing on the core functionalities including Aggregate, Event Store, Aggregate Repository, Snapshot Store, and Dispatcher, to ensure optimum functionality and robustness. The testing guide will contain instructions on how to execute these tests. | +| **0d.** | Docker | We will deliver Dockerfiles for testing all the functionality included in this milestone. | +| 1. | Substrate module: Aggregate | The Aggregate pallet provides the base functionality for implementing the Command Query Responsibility Segregation (CQRS) pattern on a Substrate-based blockchain. It defines the Aggregate trait, which is used to define the state and behavior of an Aggregate. | +| 2. | Substrate module: AggregateState | The AggregateState pallet provides a default implementation of the AggregateState trait, which stores the current state of an Aggregate in the blockchain's storage. This pallet is responsible for managing the state of an Aggregate and updating it based on incoming commands. | +| 3. | Substrate module: AggregateRepository | The AggregateRepository pallet provides an implementation of the AggregateRepository trait, which is responsible for retrieving and storing Aggregates in the blockchain's storage. It allows developers to easily store and retrieve Aggregates from the blockchain's storage. | +| 4. | Substrate module: CommandDispatcher | The CommandDispatcher pallet provides a way to dispatch incoming commands to the appropriate Aggregates based on their type. It uses a HashMap to store the mapping between command types and the Aggregates that handle them. | +| 5. | Substrate module: EventStore | The EventStore pallet provides a way to store and retrieve events that have been emitted by Aggregates. It allows developers to easily retrieve the events emitted by a specific Aggregate and replay them to reconstruct the current state of the Aggregate. | +| 6. | Substrate module: EventsEmitter | The EventsEmitter pallet provides a way for Aggregates to emit events. It defines a trait that Aggregates can implement to specify the types of events they emit, and provides a way to subscribe to events emitted by specific Aggregates. | + + +### Milestone 2 — Testing and Documentation + +- **Estimated duration:** 1 month +- **FTE:** 2 +- **Costs:** 10,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will ensure comprehensive documentation of the code by providing both inline comments and a step-by-step tutorial. This tutorial will guide the user through spinning up a Substrate-based execution environment for the CILA Omnichain Infrastructure and testing omnichain transactions, showcasing the new functionality. Special attention will be given to documenting the setup and testing of multiple Substrate chains running simultaneously, to test the synchronization of the state smart contract between them. | +| **0c.** | Testing and Testing Guide | We will conduct comprehensive unit testing on the core functionalities including Aggregate, Event Store, Aggregate Repository, Snapshot Store, and Dispatcher, to ensure optimum functionality and robustness. In particular, we will place emphasis on testing the infrastructure running with multiple chains to ensure that the synchronization mechanism is functioning as intended. The testing guide will contain instructions on how to execute these tests. | +| **0d.** | Docker | We will deliver Dockerfiles for testing all the functionality included in this milestone, including orchestration with multiple chains. For orchestration purposes we might use Kubernates. | +| 0e. | Article | We will publish a technical article that details the implementation of the Command-Query Responsibility Segregation (CQRS) and Event Sourcing architecture on the Substrate framework. The article will provide an in-depth explanation of the design choices made and the challenges faced during the implementation. It will also include a detailed walkthrough of the codebase, highlighting key areas of interest and how they fit into the overall architecture. The article will be written in a technical language that targets developers with experience in blockchain and distributed systems. | +| 1. | Substrate chain | Set up and run multiple Substrate chains simultaneously to test the synchronization of a state smart contract between them. This will involve deploying the omnichain smart contract infrastructure to each chain and executing transactions on each chain to ensure that the contract state is properly synchronized between them. Additionally, various network conditions such as network latency and node failures will be simulated to test the robustness and reliability of the synchronization mechanism. The results of these tests will be recorded and analyzed to identify any potential issues and ensure that the synchronization mechanism is functioning as intended. | +| 2. | Automated Tests | We will create and publish automated tests for critical infrastructure parts of Substrate-based CQRS + Event Sourcing execution enviroment. The aim of this test will be to test two cases - non conflicting execution (changes coming to one chain and transmitted to the other one), and conflicting transactions when the same aggregate is updated with two conflicing state changes that simuntaniusly come to different chans. | + +### Milestone 3 — Example Smart Contracts and Enhancements + +- **Estimated duration:** 1 month +- **FTE:** 2 +- **Costs:** 10,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | Provide inline documentation of the NFTAggregate pallet and NFTAggregateState pallet code, as well as a basic tutorial that explains how a user can set up a Substrate node and send test transactions to test the NFT functionalities provided by these modules. Additionally, comprehensive unit tests will be developed and documented to ensure the functionality and robustness of the NFTAggregate pallet and NFTAggregateState pallet. A testing guide will also be provided, describing how to run the tests. | +| **0c.** | Testing and Testing Guide |For this milestone, we will develop comprehensive unit tests to cover the core functions of the NFTAggregate module and the NFTAggregateState pallet. These tests will be designed to ensure the functionality and robustness of the code. The unit tests will be included in the code repository and will cover a range of scenarios to ensure that the code is thoroughly tested. For example, we will test the minting, burning, and transferring of NFTs, as well as error handling and edge cases. In the testing guide, we will provide detailed instructions on how to run these tests, including any required dependencies and setup steps. We will also include information on how to interpret the test results and what to do in the case of failures or errors.. | +| **0d.** | Docker | In order to facilitate testing and deployment of the NFTAggregate pallet and NFTAggregateState pallet, we will provide Dockerfiles that can be used to easily set up and configure a development environment. These Dockerfiles will include all the necessary dependencies and configuration to run the Substrate-based blockchain with the new functionalities. | +| 1. | Substrate module: NFTAggregate | The NFTAggregate pallet provides a way to implement Non-Fungible Tokens (NFTs) on a Substrate-based blockchain. It defines a trait that NFT Aggregates can implement to specify the behavior of NFTs, including minting, burning, and transferring. | +| 2. | Substrate module: NFTAggregateState | The NFTAggregateState pallet provides a default implementation of the state of an NFT Aggregate, which stores the current state of NFTs in the blockchain's storage. This pallet is responsible for managing the state of NFTs and updating it based on incoming commands. | +| 3. | Report: Substrate Ecosystem NFT standards | To choose the most optimal standard for omnichain implementation we will conduct research and assess all the available NFT standards against two major criteria: popularity and technical quality. Popularity will be measured by the number of stars on the GitHub repository and how many projects are actually using it (usage assesment will be done on a best effort basis), and the technical quality will be assessed by analyzing if a specific standard satisfies [SOLID](https://en.wikipedia.org/wiki/SOLID) design principles. | + + +## Future Plans + +In the short term, we plan to continue to develop and enhance our project to ensure its success and sustainability. This will include ongoing testing, bug fixes, and implementing additional features and improvements as needed. We will actively promote our project through various channels, including social media, blog posts, and community events. + +After the completion of the proposed infrastructure, we intend to continue its development by incorporating support for multiple blockchains and introducing more advanced functionalities, such as dynamic rebalancing for aggregates. Additionally, we plan to establish partnerships with leading players in the Substrate/Polkadot/Kusama ecosystem and to integrate our omnichain infrastructure with existing projects, such as DeFi and NFT marketplaces, to further increase adoption. Finally, we will provide comprehensive documentation and support to ensure that our infrastructure is accessible and user-friendly for developers and users alike. + +In the long term, we envision our project becoming a leading platform for event-centric CQRS + Event Sourcing execution environments and omnichain smart contracts on the Substrate blockchain. We plan to expand our team and further invest in research and development to stay ahead of the curve and meet the needs of the rapidly evolving blockchain industry. We will continue to engage with the community and seek feedback to ensure that our project remains relevant and valuable to users. Our ultimate goal is to create a platform that is widely adopted and helps to drive the mainstream adoption of blockchain technology. + +## Additional Information :heavy_plus_sign: + +![mission](https://i.imgur.com/WZt1hdx.png) + +**How did you hear about the Grants Program?** personal recommendation From 83029c27f1100041e02ff31ca24a6bed8197fba5 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 25 Apr 2023 16:09:50 +0200 Subject: [PATCH 348/578] Update index.md Add Omnichain Infrastructure --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 0408c8d5b91..35142e68161 100644 --- a/applications/index.md +++ b/applications/index.md @@ -47,6 +47,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [DAuth](https://github.com/DAuth-Network) | [DAuth](./dauth_network.md) | [GitHub](https://github.com/DAuth-Network) | ☐ | ☐ | ☐ | | [Galaxy.Do](https://galaxy.do) | [Galaxy: Three-dimensional Web for Polkadot Users](./galaxy.md) | [GitHub](https://github.com/7flash) | ☐ | ☐ | ☐ | | [Web3 Labs Ltd](https://www.web3labs.com/) | [Sirato (Epirus) Substrate Explorer - Phase III](./sirato_substrate_phase3.md) | [GitHub](https://github.com/web3labs) | ☐ | ☐ | ☐ | +| [Collective Intelligence Labs](https://collectiveintelligence.dev/) | [Omnichain Infrastructure](./CILA-omnichain-infrastructure.md) | [GitHub](https://github.com/Collective-Intelligence-Labs) | ☐ | ☐ | ☐ | [🔝](#menu) From c68f7b298b06a619d4b7a12771fa71039274ef89 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Tue, 25 Apr 2023 16:20:49 +0200 Subject: [PATCH 349/578] Fix website --- applications/crowdloan_frontend_template.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/applications/crowdloan_frontend_template.md b/applications/crowdloan_frontend_template.md index 3ff476af941..b90605ba713 100644 --- a/applications/crowdloan_frontend_template.md +++ b/applications/crowdloan_frontend_template.md @@ -147,11 +147,11 @@ For parts of the community who are less comfortable with the Jamstack approach w | 0a. | License | MIT or TBD | | 0b. | Documentation | For both approaches (Webflow & Jamstack) we provide how-to guides. Jamstack will be documented in the Github repo. | | 0c. | Article | We will publish an article presenting the templates and how to use them. | -| 1a. | Benchmarking | Design research of existing Crowdloan pages and other one pages designs, like Github project pages templates.
This will allow us to synthesize viable options of the page designs | -| 1b. | Design Direction Prototype | Aiming to create as many medium to high-fidelity dd prototypes as possible that allows the Grants team and the community to have an input on the design direction
The aim is to have the prototypes at 25%-50% completeness, to see major components/features and the general design direction. This way we don't waste time on dismissed design directions.
The designs should follow good practices in general without requiring additional research | +| 1a. | Benchmarking | Design research of existing Crowdloan pages and other one pages designs, like Github project pages templates.
This will allow us to synthesize viable options of the page designs | +| 1b. | Design Direction Prototype | Aiming to create as many medium to high-fidelity dd prototypes as possible that allows the Grants team and the community to have an input on the design direction
The aim is to have the prototypes at 25%-50% completeness, to see major components/features and the general design direction. This way we don't waste time on dismissed design directions.
The designs should follow good practices in general without requiring additional research | | 1c. | Repo Setup | Repo setup incl. base libraries/frameworks, initial technical documentation. Undesigned base scaffold. Allows the implementation to be simplified by forking | -| 2. | Jamstack implementation in Astro | One (1) chosen design direction

Minimum sections:
- Project information
- Rewards Schema
- Current contributions
- Time left in Crowdloan and competition
- Contribute CTA
- After the Crowdloan

Implemented as One Page Design | -| 3. | Webflow implementation | One (1) chosen design direction

Minimum sections:
- Project information
- Rewards Schema
- Current contributions
- Time left in Crowdloan and competition
- Contribute CTA
- After the Crowdloan
Out of the scope: integrate contribution flow and polkaskan table due to Webflow technical limitations (users of template may still try to implement that on their own way)

Implemented as One Page Design | +| 2. | Jamstack implementation in Astro | One (1) chosen design direction

Minimum sections:
- Project information
- Rewards Schema
- Current contributions
- Time left in Crowdloan and competition
- Contribute CTA
- After the Crowdloan

Implemented as One Page Design | +| 3. | Webflow implementation | One (1) chosen design direction

Minimum sections:
- Project information
- Rewards Schema
- Current contributions
- Time left in Crowdloan and competition
- Contribute CTA
- After the Crowdloan
Out of the scope: integrate contribution flow and polkaskan table due to Webflow technical limitations (users of template may still try to implement that on their own way)

Implemented as One Page Design | | 4. | Figma Template Publishing | Allows to use it for other solutions | From 1cd886d31d0d57368621bbebc86af3d2623f88ac Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Tue, 25 Apr 2023 17:05:04 +0200 Subject: [PATCH 350/578] Update index.md accept Crowdloan Front End Template --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 35142e68161..24c84fd8035 100644 --- a/applications/index.md +++ b/applications/index.md @@ -126,7 +126,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [ParaSpell](https://github.com/paraspell) | [ParaSpell Phase 2](ParaSpell_follow-up.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | | [SubRelay](http://subrelay.xyz/) | [SubRelay](subrelay.md) | [GitHub](https://github.com/subrelay) | ☐ | ☒ | ☐ | | [Wow Labz](http://www.wowlabz.com) | [Dot Marketplace Phase 3](dot_marketplace-Phase3.md) | [GitHub](https://github.com/orgs/WowLabz) | ☐ | ☒ | ☒ | -| [10Clouds Sp. z o.o.](https://10clouds.com/) | [Crowdloan Front End Template](crowdloan_frontend_template.md) | [GitHub](https://github.com/10clouds) | ☐ | ☐ | ☐ | +| [10Clouds Sp. z o.o.](https://10clouds.com/) | [Crowdloan Front End Template](crowdloan_frontend_template.md) | [GitHub](https://github.com/10clouds) | ☐ | ☒ | ☒ | | [DodoRare, Inc.](https://dodorare.com/) | [Faterium](faterium.md) | [GitHub](https://github.com/faterium) | ☐ | ☒ | ☒ | | [The Bacon Beacon](https://github.com/random-bacon) | [Pallet Drand Client](pallet-drand-client.md) | [GitHub](https://github.com/random-bacon) | ☐ | ☒ | ☐ | | [Helikon Labs](https://helikon.io/) | [ChainViz v1](chainviz.md) | [GitHub](https://github.com/helikon-labs/chainviz) | ☐ | ☐ | ☐ | From cecfbed3d1392de2203c0e8bdcbb08700708fb4b Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Tue, 25 Apr 2023 20:28:15 +0200 Subject: [PATCH 351/578] close crowdloan frontend template rfp (#1697) --- .../crowdloan_front_end_template.md | 2 +- docs/rfps.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename docs/RFPs/{Under Development => Closed}/crowdloan_front_end_template.md (93%) diff --git a/docs/RFPs/Under Development/crowdloan_front_end_template.md b/docs/RFPs/Closed/crowdloan_front_end_template.md similarity index 93% rename from docs/RFPs/Under Development/crowdloan_front_end_template.md rename to docs/RFPs/Closed/crowdloan_front_end_template.md index 428a955fba7..21edca3a6e2 100644 --- a/docs/RFPs/Under Development/crowdloan_front_end_template.md +++ b/docs/RFPs/Closed/crowdloan_front_end_template.md @@ -1,6 +1,6 @@ # Crowdloan Front End Template -* **Status:** [Under Development 1](https://github.com/w3f/Grants-Program/blob/master/applications/crowdloan_frontend_template.md), [Under Development 2](https://github.com/w3f/Grants-Program/blob/master/applications/Crowdloans-FET.md) +* **Status:** [Implemented](https://github.com/w3f/Grant-Milestone-Delivery/pull/765), [Under Development 2](https://github.com/w3f/Grants-Program/blob/master/applications/Crowdloans-FET.md) * **Proposer:** [SBalaguer](https://github.com/SBalaguer), [Noc2](https://github.com/Noc2) ## Project Description :page_facing_up: diff --git a/docs/rfps.md b/docs/rfps.md index 80c6cd57997..d0099216d5c 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -34,7 +34,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [appi.md](RFPs/Closed/appi.md) | 🔴 | 20.07.2021 | | [bpf-contracts.md](RFPs/Open/bpf-contracts.md) | 🟢 | 06.01.2023 | | [candle-auction.md](RFPs/Closed/candle-auction.md) | 🔴 | 02.02.2022 | -| [crowdloan_front_end_template.md](RFPs/Under%20Development/crowdloan_front_end_template.md) | 🟡 | 18.11.2022 | +| [crowdloan_front_end_template.md](RFPs/Closed/crowdloan_front_end_template.md) | 🔴 | 25.04.2023 | | [data_analysis_tools.md](RFPs/Open/data_analysis_tools.md) | 🟢 | 25.01.2023 | | [decentralized-security-marketplace.md](RFPs/Open/decentralized-security-marketplace.md) | 🟢 | 23.01.2023 | | [epassport-zk-validation.md](RFPs/Closed/epassport-zk-validation.md) | 🔴 | 21.03.2023 | From 27558bbb6428dfd71d21d35a551d7799453eb9c8 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Wed, 26 Apr 2023 02:39:34 -0400 Subject: [PATCH 352/578] Update index.md (#1698) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 24c84fd8035..727c335acae 100644 --- a/applications/index.md +++ b/applications/index.md @@ -84,7 +84,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Fuu](https://github.com/ff13dfly/) | [Anchor, On-chain Linked List pallet and Name Service](Anchor.md) | [GitHub](https://github.com/ff13dfly/Anchor) | ☐ | ☒ | ☒ | | [hack-ink](https://hack.ink/) | [Slothunter](slothunter.md) | [GitHub](https://github.com/hack-ink) | ☐ | ☐ | ☐ | | [Invers Inc](https://invers.tech/) | [Zkwasm Rollups Transfer](zkwasm-rollups-transfer.md) | [GitHub](https://github.com/zero-network) | ☐ | ☐ | ☐ | -| [decentraDOT](https://decentradot.com/) | [Cyclops Validator Dashboard](cyclops.md) | [GitHub](https://github.com/ArthurHoeke?tab=repositories) | ☐ | ☒ | ☐ | +| [decentraDOT](https://decentradot.com/) | [Cyclops Validator Dashboard](cyclops.md) | [GitHub](https://github.com/ArthurHoeke?tab=repositories) | ☐ | ☒ | ☒ | | [Anwesh Nayak](https://github.com/muddlebee) | [Mempool Dashboard - Version 2](polkadot-mempool-explorer-v2.md) | [GitHub](https://github.com/muddlebee) | ☐ | ☐ | ☐ | | [Tellor Inc](https://tellor.io/) | [Tellor Oracle Protocol](Tellor.md) | [GitHub](https://github.com/tellor-io/) | ☐ | ☐ | ☐ | | [Jonathan Brown](https://acuity.social/) | [Hybrid Explorer](hybrid.md) | [GitHub](https://github.com/acuity-social) | ☐ | ☐ | ☐ | From b5fd3b593ef46628077c0233af8f9780c4628876 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 26 Apr 2023 13:11:26 +0200 Subject: [PATCH 353/578] Update index.md walt.id NFT infrastructure M1 and complete --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 727c335acae..a04d0835e22 100644 --- a/applications/index.md +++ b/applications/index.md @@ -117,7 +117,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Keystone Wallet](https://keyst.one/) | [Polkadot Snap](PolkadotSnap.md) | [GitHub](https://github.com/KeystoneHQ) | ☐ | ☐ | ☐ | | [LeetCoin](https://www.leetcoin.co/) | [LeetCoin](leetcoin.md) | [GitHub](https://github.com/nashhq/leetcoin) | ☐ | ☐ | ☐ | | [727.ventures](https://727.ventures/) | [Sol2Ink Phase 2](typechain-polkadot-follow-up.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☒ | ☒ | -| [walt.id](https://walt.id/) | [NFT infrastructure](walt-id_nft-infra.md) | [GitHub](https://github.com/walt-id) | ☐ | ☐ | ☐ | +| [walt.id](https://walt.id/) | [NFT infrastructure](walt-id_nft-infra.md) | [GitHub](https://github.com/walt-id) | ☐ | ☒ | ☒ | | [SydTek](https://sydtek.ai/) | [Digital Inheritance in Web3: A Case Study of Soulbound Tokens and Social Recovery Pallets](SydTek.md) | [GitHub](https://github.com/jgophd/Developed-Materials-and-Raw-Data) | ☐ | ☒ | ☐ | | [Anagolay](https://anagolay.network/) | [Multi-token community contributions for verified creators](anagolay-project-idiyanale-multi-token-community-contributions-for-verified-creators.md) | [GitHub](https://github.com/anagolay) | ☐ | ☒ | ☒ | | [Ink Contracts Wizard Team](https://github.com/amankumar1008/contracts-wizard) | [Ink Smart Contract Wizard](ink-smart-contract-wizard.md) | [GitHub](https://github.com/amankumar1008/contracts-wizard) | ☐ | ☒ | ☒ | From d3150bc3cdc17fe8aecee4f12b54e40760a527ad Mon Sep 17 00:00:00 2001 From: Noc2 Date: Thu, 27 Apr 2023 14:02:50 +0200 Subject: [PATCH 354/578] validator-setup maintenance to under development --- .../{Open => Under Development}/validator-setup-maintenance.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename docs/RFPs/{Open => Under Development}/validator-setup-maintenance.md (92%) diff --git a/docs/RFPs/Open/validator-setup-maintenance.md b/docs/RFPs/Under Development/validator-setup-maintenance.md similarity index 92% rename from docs/RFPs/Open/validator-setup-maintenance.md rename to docs/RFPs/Under Development/validator-setup-maintenance.md index 02f76a9f981..933cd2b180f 100644 --- a/docs/RFPs/Open/validator-setup-maintenance.md +++ b/docs/RFPs/Under Development/validator-setup-maintenance.md @@ -1,6 +1,6 @@ # polkadot-validator-setup maintenance -* **Status:** Open +* **Status:** [See Polkadot Validation Node Ansible Setup](https://github.com/polkachu/polkadot-validator) * **Teams/People that could deliver the RFP:** @melozo, @pmensik, @tylerztl, @bLd75 ## Project Description :page_facing_up: From 8eec6f1ba7ecebf2bec4414eb26793809d247b95 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Thu, 27 Apr 2023 14:03:59 +0200 Subject: [PATCH 355/578] update RFP list --- docs/rfps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/rfps.md b/docs/rfps.md index d0099216d5c..b89c5d8dddd 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -64,7 +64,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [uncollateralized-stablecoin-research.md](RFPs/Closed/uncollateralized-stablecoin-research.md) | 🔴 | 01.01.23 | | [uptane-for-substrate-design-and-scope.md](RFPs/Open/uptane-for-substrate-design-and-scope.md) | 🟢 | 04.03.2023 | | [user-account-access-analysis.md](RFPs/Open/user-account-access-analysis.md) | 🟢 | 07.01.2023 | -| [validator-setup-maintenance.md](RFPs/Open/validator-setup-maintenance.md) | 🟢 | 23.11.2021 | +| [validator-setup-maintenance.md](RFPs/Under%20Development/validator-setup-maintenance.md) | 🟡 | 27.04.2023 | | [validator-selection-algorithm.md](RFPs/Under%20Development/validator-selection-algorithm.md) | 🟡 | 07.12.2022 | | [wallet-aggregator-library.md](RFPs/Closed/wallet-aggregator-library.md) | 🔴 | 09.03.2023 | | [xcm-tool.md](RFPs/Open/xcm-tool.md) | 🟢 | 20.07.2021 | From 78f62c2d94e9c336c7333f312f1676cf74fc33b7 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Thu, 27 Apr 2023 11:57:10 -0300 Subject: [PATCH 356/578] Update index.md (#1704) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index a04d0835e22..7ad6611e4d2 100644 --- a/applications/index.md +++ b/applications/index.md @@ -88,7 +88,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Anwesh Nayak](https://github.com/muddlebee) | [Mempool Dashboard - Version 2](polkadot-mempool-explorer-v2.md) | [GitHub](https://github.com/muddlebee) | ☐ | ☐ | ☐ | | [Tellor Inc](https://tellor.io/) | [Tellor Oracle Protocol](Tellor.md) | [GitHub](https://github.com/tellor-io/) | ☐ | ☐ | ☐ | | [Jonathan Brown](https://acuity.social/) | [Hybrid Explorer](hybrid.md) | [GitHub](https://github.com/acuity-social) | ☐ | ☐ | ☐ | -| [ParaSpell](https://github.com/paraspell) | [ParaSpell_Follow Up 2](ParaSpell_follow-up2.md) | [GitHub](https://github.com/paraspell) | ☐ | ☐ | ☐ | +| [ParaSpell](https://github.com/paraspell) | [ParaSpell_Follow Up 2](ParaSpell_follow-up2.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | | [justmert](https://github.com/justmert) | [PolkaFlow](polkaflow.md) | [GitHub](https://github.com/justmert) | ☐ | ☐ | ☐ | | [BelSoft](https://www.belsoft.rs) | [Diffy messenger](Diffy_chat.md) | [GitHub](https://github.com/1db1) | ☐ | ☐ | ☐ | | [Zkverse](https://github.com/Zkvers) | [Zkverse](zkverse.md) | [GitHub](https://github.com/Zkvers/substrate-zk) | ☐ | ☐ | ☐ | From f89fe23d36a9ce157ddc94193feb0022cc242900 Mon Sep 17 00:00:00 2001 From: Anwesh Date: Fri, 28 Apr 2023 01:51:19 +0530 Subject: [PATCH 357/578] Terminate polkadot-mempool-explorer-v2.md (#1705) @semuelle @Noc2 as per our discussion. I would like to terminate it for now. --- applications/polkadot-mempool-explorer-v2.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/applications/polkadot-mempool-explorer-v2.md b/applications/polkadot-mempool-explorer-v2.md index 6d16d8a424e..c60e9af6d8f 100644 --- a/applications/polkadot-mempool-explorer-v2.md +++ b/applications/polkadot-mempool-explorer-v2.md @@ -8,7 +8,7 @@ -- **Payment Address:** TBD +-**Status:** Terminated @@ -474,4 +474,4 @@ polkadot js API tutorials - 3000 USD -- Add good explanatory graphics to explain the basic concepts \ No newline at end of file +- Add good explanatory graphics to explain the basic concepts From f283b4bdccffbe8e2fcf54b3cc73bf3a14a5f5ce Mon Sep 17 00:00:00 2001 From: Dan Henton Date: Fri, 28 Apr 2023 17:19:20 +1200 Subject: [PATCH 358/578] Vue.js + TypeScript Substrate Front-End Template Project Proposal (#1601) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Create vue-typescript-substrate-frontend-template.md Project proposal Updated license information Updated Vue.js + Typescript Front-End Template Proposal remove old grant * Updated payment method * Update vue-typescript-substrate-frontend-template.md extend double the time frame half the cost. * Update vue-typescript-substrate-frontend-template.md fix typos --------- Co-authored-by: Miloš Ranđelović --- ...-typescript-substrate-frontend-template.md | 167 ++++++++++++++++++ 1 file changed, 167 insertions(+) create mode 100644 applications/vue-typescript-substrate-frontend-template.md diff --git a/applications/vue-typescript-substrate-frontend-template.md b/applications/vue-typescript-substrate-frontend-template.md new file mode 100644 index 00000000000..b2287ea4353 --- /dev/null +++ b/applications/vue-typescript-substrate-frontend-template.md @@ -0,0 +1,167 @@ +# Vue.js + TypeScript Substrate Front-End Template + +- **Team Name:** Wunderbar Network +- **Payment Address:** 0x6F76BED39E9B9D57cAb4d9b81D65d2fa088cB68E (DAI) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +### Overview + +When building our app (The Wunderbar Network team is part of the **Substrate Builders Program**), we have used a very useful existing community template - the [Substrate Front End Template](https://github.com/substrate-developer-hub/substrate-front-end-template) from the Substrate Developer Hub. This template is built using React.js and JavaScript. We are proposing to create an _alternative_ version of this template, which would achieve three major outcomes: + +1) Create an extendable template app, where developers can quickly connect and interface with the Substrate blockchain, using simple, clear and strongly typed examples, with a great baseline UX (which could provide a starting point for an entire new project). + +This will build on top of what the current community template provides. + +2) It would use Vue.js instead of React.js + +According to [StackOverflow's 2022 Developer Survey](https://survey.stackoverflow.co/2022/), React.js is still undeniably in the lead when it comes to web framework popularity (according to the survey, **42.62%** of projects would be using React), however at **18.86%** Vue.js is still in the top 6 and is on the rise. + +3) It would be written using TypeScript as opposed to JavaScript. + +Even though most developers who code in TypeScript can work well with JavaScript and vice versa, the "conversion" is not always straight-forward, and despite JavaScript being around for a very long time (and seemingly not going anywhere), TypeScript is gaining rapidly in popularity and most greenfield projects would prefer TypeScript over JavaScript. + +According to same survey mentioned above, JavaScript is the most commonly used technology (for the tenth year in a row!), however TypeScript is steadily closing in. Looking at the _loved vs. dreaded_ category though, the picture is very different - TypeScript is loved by **73.46%** of developers (and is near the very top of the list), whereas JavaScript achieved a score of **61.46%** to be placed in the middle of the table. + +Overall, we believe that the combination of TypeScript's strong, static typing, and Vue's simplicity will together serve the purpose of providing an alternative source of very clear examples of how to interface with a Substrate Node from a modern front-end application, which should be of great value to the community. + +### Project Details + +The core technology stack is Vue 3 + Typescript, integrated with the [Polkadot.js](https://github.com/polkadot-js) set of packages. The app will deliver Vue3 native components and "composables" (reusable functions), that other developers will easily be able to integrate/build on top of. + +The app will also provide a `Dockerfile` and container. + +We have created a mockup design (in both dark and light mode), screenshots below (we also have a high-fidelity Figma file that can be provided upon request). + +[![Dark version](https://lh3.googleusercontent.com/u/0/drive-viewer/AAOQEOQvkTiAXhC3_deoufEJbZY_inAtdJNv6bmvMUKTIsVvPG675sEu5I0Qr3EYxicwu3saj8hniDu3EwZqmFh6em-6DN9Vbw=w3024-h1612)](https://drive.google.com/file/d/1FfN8ZTCO2ihwZkBjdQ1dmW4yFqjT7pw3/view?usp=sharing) +[![Light version](https://lh3.googleusercontent.com/u/0/drive-viewer/AAOQEOSkRaSUSZhS7u7rhuepjwBXzteL2GUqvRSx3AHpC31dCiRZOy4yXkkgJLPd0805t8Ivlbga1RX_xCPNUvCwR_f5YOJ0=w3024-h1612)](https://drive.google.com/file/d/1Q-bkWzzvEgMBJcdY2wTHfvEMRMBSphHV/view?usp=sharing) + +Note that Wunderbar Network team is already using the same technology stack to consume Substrate blockchain features into the app we are building as part of the Substrate Builders Program, therefore we already have experience in both the core technology stack, and the Polkadot.js API packages. + +This grant **will not** include future ongoing maintenance of the deliverables, unless agreed prior (i.e. smaller grants to periodically refresh/keep up to date), or additional feature requests after the agreed milestone deliveries. We will however address reported bugs and major security vulnerabilities. + +### Ecosystem Fit + +- **Where and how does your project fit into the ecosystem?** + +This app provides a more robust and extendable example/template app compared to the current Substrate Front End Template app, which should be of great value to builders within the ecosystem, that are utilising the same or similar tech stack as ours. + +- **Who is your target audience (parachain/dapp/wallet/UI developers, designers, your own user base, some dapp's userbase, yourself)?** + +Primarily UI developers, although any builders interfacing with Substrate would find value. New users, hackathon teams, etc - would also be strong contenders to use this app as a template/baseline for what they are building. + +- **What need(s) does your project meet?** + +The combination of TypeScript's strong, static typing, and Vue's simplicity will together serve the purpose of providing an alternative source of very clear examples of how to interface with a Substrate Node from a modern front-end application, which should be of great value to the community. + +- **Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem?** + +The [Substrate Front End Template](https://github.com/substrate-developer-hub/substrate-front-end-template) from the Substrate Developer Hub. Our project aims to provide a more robust example app, providing all the benefits and advantages mentioned above. + +## Team :busts_in_silhouette: + +### Team members + +- Dan Henton +- Mila Dymnikova +- Miloš Ranđelović + +### Contact + +- **Contact Name:** Dan Henton +- **Contact Email:** dan@wunderbar.network +- **Website:** [Wunderbar Network](https://wunderbar.network) + +### Legal Structure + +- **Registered Address:** Level 1, 320 Ti Rakau Drive, Burswood 2013, Auckland, New Zealand +- **Registered Legal Entity:** Greengate Global Ltd + +### Team's experience + +Wunderbar Network is a currently active participant of the Substrate Builders Program. We have extensive experience building Typescript + Vue.js apps, and interfacing with Substrate Nodes via API. + +### Team Code Repos + +- https://github.com/WunderbarNetwork + +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. + +- https://github.com/DanHenton +- https://github.com/Milarr +- https://github.com/MilosRandelovic + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/company/wunderbar-network/ + +## Development Status :open_book: + +Not started yet, mockup designs/wireframes provided above. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 6 months +- **Full-Time Equivalent (FTE):** 0.5 FTE +- **Total Costs:** US$ 30,000.00 + +### Milestone 1 - Foundations + Header + Account panels + +- **Estimated duration:** 2 months +- **FTE:** 0.5 +- **Costs:** US$ 10,000.00 + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial**. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Foundations of a Vue.js app | A standalone Vue.js/Typescript app (built using Vite) | +| 2. | UI/UX elements | Common UI/UX elements from the provided mockup designs for the Header, Balance Transfers and Account Balances panels | +| 3. | Composables | Common composables to connect and interface with a Substrate node and all supported Web3 wallets | +| 4. | Header | Provide common Substrate node metadata and select an "active" account from a list of seeded and injected accounts | +| 5. | Account Balance List & Transfer | Provide the ability to see the balances (and perform a transfer) between both seeded and injected accounts | + +### Milestone 2 - Runtime management, Event Panel and Pallet Interaction Composables + +- **Estimated duration:** 2 months +- **FTE:** 0.5 +- **Costs:** US$ 10,000.00 + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial**. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Runtime management | The ability (via the header) to choose a Substrate Node connection and upgrade the runtime | +| 2. | Event panel | Display a panel which live-updates from global Substrate Node events | +| 3. | Pallet interaction composables | Composables that are able to call queries, extrinsics, RPCs and read constants | + +### Milestone 3 - Complete Vue.js App + +- **Estimated duration:** 2 months +- **FTE:** 0.5 +- **Costs:** US$ 10,000.00 + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial**. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an **article**/workshop that explains [...] (what was done/achieved as part of the grant). | +| 1. | Pallet Interaction Panel | A panel that can execute extrinsics, RPC calls or display constants, using mapped parameters dynamically generated for each call, and displaying live events as the transaction transitions state | +| 2. | Chain State Query Panel | A panel that can display the chain state, optionally providing parameters, and displaying live events as the transaction transitions state | + +## Future Plans + +We plan to promote this project within the development community. In case of significant Substrate/Polkadot.js API changes in the future, the app should be upgraded to reflect those (out of scope for the grant, as mentioned above). + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Via the Substrate Builders Program, networking with people from Parity/Web3 Foundation From dfec5d56c9cbc14da5ac4b925491c9affbb569f3 Mon Sep 17 00:00:00 2001 From: Sander Bogdanov <130372146+TradeLinkEstonia@users.noreply.github.com> Date: Fri, 28 Apr 2023 10:02:38 +0200 Subject: [PATCH 359/578] Create sandox.md (#1694) * Create sandox.md * Update sandox.md * Update sandox.md * Update sandox.md --- applications/sandox.md | 157 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 applications/sandox.md diff --git a/applications/sandox.md b/applications/sandox.md new file mode 100644 index 00000000000..357bbba1817 --- /dev/null +++ b/applications/sandox.md @@ -0,0 +1,157 @@ +# SanDOx + +- **Team Name:** TradeLink +- **Payment Address:** Polkadot (Statemint): 13bUsemARThdmyXNEpvx2t8A5fNo4ttheSRcsXUWgRpqzjfH (USDT) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +This application is in response to the [Alternative javascript console for Polkadot JS API RFP](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/alternative-polkadot-js-api-console.md). + +### Overview + +SanDOx is an integrated development environment, that is thought to leverage Polkadot development process by providing ecosystem developers with right and convenient components and tools. +Our team – the TRADELINK TECHNOLOGIES OÜ – is focused mostly on crypto trading tools and lately we have been interested in DEX concepts. Meanwhile we are fascinated by the Polkadot Network and see this SanDOx project as a great opportunity to contribute to the DOT ecosystem and show our skills for future projects. + +### Project Details + +![Sandox ide pic](https://user-images.githubusercontent.com/130372146/234008638-f55a3bde-3482-41c5-9b40-6828128ee33d.png) + +SanDOx is an IDE built as a browser app that consist of tool panels (like JetBrains), this type of UX is common to all developers and we suppose it will be intuitive. +SanDOx IDE will have a built-in base list of tool panels and there will be an ability to add personal panels in the form of plug-ins (different panels, as well as personalization feature will be developed on different stages of the project). +Supposed base list of panels: +Project – shows project structure with catalogues and files. +Console –displays results of the user’s code, “console” native object methods (log, warn, info, etc.) +Network – network choice and connection. A user could switch between Polkadot ecosystem parachains, connection code will be generated automatically. +Examples – examples library. Will include different case examples, which could be imported and run. +Find – search panel. Allows search of documents in a project and make multi autocorrect. +Personal panels – user defined and customized. + +Importing libraries from NPM would also be an interesting feature. +Meanwhile, the diverse Polkadot ecosystem could significantly change the classic IDE design and our TradeLink team is passionate about decentralizing processes of storing and running code. There is an opportunity for using Crust and Phala networks’ features and we’d like to do an appropriate research on later stages of the project. +Till then files and settings storage will be local and user’s code will be run straight in the main thread and/or web workers. + +### Ecosystem Fit + +According to the [RFP](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/alternative-polkadot-js-api-console.md) current polkadot js API console has some limitations, which we offer to overcome by creating the SanDOx IDE. + +## Team :busts_in_silhouette: + +### Team members + +- Sander Bogdanov, CBDO at TRADELINK TECHNOLOGIES OÜ; +- Andrey Lugovskoy, CTO and senior fullstack software developer at TRADELINK TECHNOLOGIES OÜ; +- Joseph (Afriyie) Attakorah, middle frontend developer at TRADELINK TECHNOLOGIES OÜ; +- Alena Balakina, lead QA at TRADELINK TECHNOLOGIES OÜ. + +### Contact + +- **Contact Name:** Sander Bogdanov +- **Contact Email:** johngalt@tradelink.pro +- **Website:** https://tradelink.pro/ + +### Legal Structure + +- **Registered Address:** Harju maakond, Tallinn, Kesklinna linnaosa, Tartu mnt 6-10, 10145, Estonia +- **Registered Legal Entity:** TRADELINK TECHNOLOGIES OÜ + +### Team's experience + +Alexander Bogdanov is a serial entrepreneur, expert in IT solutions for smart buildings and smart campuses, visionary of smart technologies for people’s day-to-day life. Alexander is a founder of several crypto initiatives, that lower the entry barrier for new users and help leverage community experience. + +Andrey Lugovskoy has over 12 years of experience creating high availability services. Lead software engineer of a first automated interview service with ultra-high load. As a lead architect implemented highly reliable industrial solutions and development of FinTech apps. + +Joseph (Afriyie) Attakorah is a frontend developer with 5+ years of experience in high load enterprise applications, interested in solving technological problems by combining Software Engineering and Machine Learning techniques. Recently focused on blockchains and creation of decentralized applications for crypto investments. + +Alena Balakina is a QA test engineer and tech writer with over 7 years of experience. As a QA lead Alena implemented testing processes and documentation to one of the world’s first AI-powered blockchain investment service. Alena is highly experienced in development and execution of test cases, development of test scripts for new features and updates, analysis and documentation of bugs and defects, development and maintenance of automated tests using Selenium, Python and JavaScript, wireframe creation and product prototyping, UX research. + +### Team Code Repos + +- https://github.com/BEARlogin + +### Team LinkedIn Profiles (if available) + +- [Alexander Bogdanov](https://www.linkedin.com/in/alexander-bogdanov-b129877a/); +- [Andrey Lugovskoy](https://www.linkedin.com/in/%D0%B0%D0%BD%D0%B4%D1%80%D0%B5%D0%B9-%D0%BB%D1%83%D0%B3%D0%BE%D0%B2%D1%81%D0%BA%D0%BE%D0%B9-2887b753/) +- [Joseph (Afriyie) Attakorah](https://www.linkedin.com/in/joseph-attakorah-b6028786/); +- [Alena Balakina]( https://www.linkedin.com/in/alena-balakina/) + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 4 months +- **Full-Time Equivalent (FTE):** 4 FTE +- **Total Costs:** 30,000 USDT. + +### Milestone 1: IDE app development + +- **Estimated duration:** 2 months +- **FTE:** 2,5 +- **Costs:** 18,000 USDT + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can execute tests that will show how the functionality works. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 1. | IDE app skeleton | We will develop the browser IDE core, layout, main menu of the IDE, IDE settings. | +| 2. | Project class | We will develop a class with methods for working with projects: files creation, local storage, retrieving/changing structure and file contents | +| 3. | “Panels” feature | We will develop panels content display and panels drag’n’drop feature. | +| 4. | Code editor | We will implement a code editor (based on the Ace editor) with code highlighting and multiple files opening in panels. | +| 5. | Code compiling feature | We will develop code compiling and run feature from a single file (project compilation from multiple files will be added in the second milestone). | +| 6. | “Console” panel | We will develop a “console” panel to display results of user code. | + +### Milestone 2 “Project” panel development + +- **Estimated Duration:** 1 month +- **FTE:** 1 +- **Costs:** 6,000 USDT + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can execute tests that will show how the functionality works. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 1. | “Project” panel | We will develop a Project panel that displays hierarchical project tree and can add/delete a new folder/file. | +| 2. | Polkadot js implementation | We will implement Polkadot js library for interaction with parachains. | +| 3. | Project compiling feature | We will develop code compiling and run feature from all files of a project. | + +### Milestone 3 UX development + +- **Estimated Duration:** 1 month +- **FTE:** 1 +- **Costs:** 6,000 USDT + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can execute tests that will show how the functionality works. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0e. | Article | We will publish an **article** that explains what was achieved, how to use the new app and what are the benefits of using the system | +| 1. | File search | We will develop a search feature in an opened file (case sensitive, by RegExp, etc.) | +| 2. | Hotkeys feature | We will develop a hotkeys handler and implement “events binding hotkeys” to preferences. | +| 3. | Themes support | We will develop IDE themes support and switching functionality. We will deliver two default themes: light & dark. | +| 4. | Settings and projects storage | On this stage of the project we will store all project files and settings locally. The project could be downloaded in a ZIP archive. | + +## Future Plans + +We have wide plans for SanDOx development. Some of them are: +1) Polkadot.js authorization with a user’s wallet +2) Projects and settings storage in an IPFS/blockchain +3) Examples library, that allows developers to use examples for different cases live in the IDE +4) Multistack: we will start with Ink! support +5) Library import from NPM +6) Import/export of projects, adding projects by drag’n’drop +7) “Network” panel, connection code autogeneration, chain state +8) “Find” panel +9) "Extrinsics" panel +10) "RPC calls" panel +11) PWA +12) New IDE themes, themes constructor +13) Plug-ins support for adding features by other teams + +## Referral Program (optional) :moneybag: + +- **Referrer:** [@dsrdrk11a](https://github.com/dsrdrk11a) +- **Payment Address:** Polkadot (Statemint): 16ccCa6P9TwEzMbghTnsj1Z4YMMEgFons6PkmwBRcwLeBEf (USDT) From b8072518f95f756592ddfeeba31680db25c0b816 Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Fri, 28 Apr 2023 10:37:24 +0200 Subject: [PATCH 360/578] Update index.md solidity-trie-verifier m1 delivered and grant completion --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 7ad6611e4d2..3a1ba233553 100644 --- a/applications/index.md +++ b/applications/index.md @@ -78,7 +78,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [727.ventures](https://727.ventures/) | [Typechain-Polkadot Follow-up-2](typechain-polkadot-follow-up-2.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☒ | ☒ | | [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☐ | ☐ | | [Zeeve](https://www.zeeve.io) | [Parachain deployment zoombienet testing automation](Zeeve_Parachain_deployment_zoombienet_testing_automation.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | -| [Polytope Labs](https://research.polytope.technology/) | [Trie Verifier Implementation](solidity-trie-verifier.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | +| [Polytope Labs](https://research.polytope.technology/) | [Trie Verifier Implementation](solidity-trie-verifier.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☒ | ☒ | | [Off-Narrative Labs](https://github.com/Off-Narrative-Labs) | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☒ | ☐ | | [FuzzLand](https://fuzz.land/) | [FuzzLand](FuzzLand.md) | [GitHub](https://github.com/fuzzland) | ☐ | ☐ | ☐ | | [Fuu](https://github.com/ff13dfly/) | [Anchor, On-chain Linked List pallet and Name Service](Anchor.md) | [GitHub](https://github.com/ff13dfly/Anchor) | ☐ | ☒ | ☒ | From be5425ca865479fae42482265a9d75c2dd2dbc72 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Fri, 28 Apr 2023 14:57:41 -0300 Subject: [PATCH 361/578] Update index.md (#1708) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 3a1ba233553..525db1180ba 100644 --- a/applications/index.md +++ b/applications/index.md @@ -87,7 +87,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [decentraDOT](https://decentradot.com/) | [Cyclops Validator Dashboard](cyclops.md) | [GitHub](https://github.com/ArthurHoeke?tab=repositories) | ☐ | ☒ | ☒ | | [Anwesh Nayak](https://github.com/muddlebee) | [Mempool Dashboard - Version 2](polkadot-mempool-explorer-v2.md) | [GitHub](https://github.com/muddlebee) | ☐ | ☐ | ☐ | | [Tellor Inc](https://tellor.io/) | [Tellor Oracle Protocol](Tellor.md) | [GitHub](https://github.com/tellor-io/) | ☐ | ☐ | ☐ | -| [Jonathan Brown](https://acuity.social/) | [Hybrid Explorer](hybrid.md) | [GitHub](https://github.com/acuity-social) | ☐ | ☐ | ☐ | +| [Jonathan Brown](https://acuity.social/) | [Hybrid Explorer](hybrid.md) | [GitHub](https://github.com/acuity-social) | ☐ | ☒ | ☐ | | [ParaSpell](https://github.com/paraspell) | [ParaSpell_Follow Up 2](ParaSpell_follow-up2.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | | [justmert](https://github.com/justmert) | [PolkaFlow](polkaflow.md) | [GitHub](https://github.com/justmert) | ☐ | ☐ | ☐ | | [BelSoft](https://www.belsoft.rs) | [Diffy messenger](Diffy_chat.md) | [GitHub](https://github.com/1db1) | ☐ | ☐ | ☐ | From 108a9fbd1cb25b95c997a157600630329395fb5a Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 28 Apr 2023 20:41:31 +0200 Subject: [PATCH 362/578] Update index.md TradeLink --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 525db1180ba..baf7e4fac58 100644 --- a/applications/index.md +++ b/applications/index.md @@ -48,6 +48,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Galaxy.Do](https://galaxy.do) | [Galaxy: Three-dimensional Web for Polkadot Users](./galaxy.md) | [GitHub](https://github.com/7flash) | ☐ | ☐ | ☐ | | [Web3 Labs Ltd](https://www.web3labs.com/) | [Sirato (Epirus) Substrate Explorer - Phase III](./sirato_substrate_phase3.md) | [GitHub](https://github.com/web3labs) | ☐ | ☐ | ☐ | | [Collective Intelligence Labs](https://collectiveintelligence.dev/) | [Omnichain Infrastructure](./CILA-omnichain-infrastructure.md) | [GitHub](https://github.com/Collective-Intelligence-Labs) | ☐ | ☐ | ☐ | +| [TradeLink](https://tradelink.pro/) | [Sandox](./sandox.md) | [GitHub](https://github.com/BEARlogin) | ☐ | ☐ | ☐ | [🔝](#menu) From 570e3e4f01ab3e68c0a4d23ca8fb9ffdc9da07f5 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 28 Apr 2023 20:44:01 +0200 Subject: [PATCH 363/578] Update index.md https://github.com/WunderbarNetwork --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index baf7e4fac58..82e65725745 100644 --- a/applications/index.md +++ b/applications/index.md @@ -49,6 +49,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Web3 Labs Ltd](https://www.web3labs.com/) | [Sirato (Epirus) Substrate Explorer - Phase III](./sirato_substrate_phase3.md) | [GitHub](https://github.com/web3labs) | ☐ | ☐ | ☐ | | [Collective Intelligence Labs](https://collectiveintelligence.dev/) | [Omnichain Infrastructure](./CILA-omnichain-infrastructure.md) | [GitHub](https://github.com/Collective-Intelligence-Labs) | ☐ | ☐ | ☐ | | [TradeLink](https://tradelink.pro/) | [Sandox](./sandox.md) | [GitHub](https://github.com/BEARlogin) | ☐ | ☐ | ☐ | +| [Wunderbar Network](https://wunderbar.network/) | [Vue.js + TypeScript Substrate Front-End Template](./vue-typescript-substrate-frontend-template.md) | [GitHub](https://github.com/WunderbarNetwork) | ☐ | ☐ | ☐ | [🔝](#menu) From 8100189b8b746ba8990afdaf294f098096c680f9 Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Tue, 2 May 2023 17:28:42 +0200 Subject: [PATCH 364/578] Update index.md (#1713) accept tokenomics 2022 m1 --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 82e65725745..ab3c77c9264 100644 --- a/applications/index.md +++ b/applications/index.md @@ -78,7 +78,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib Follow up](php-rpc-lib-follow-up.md) | [GitHub](https://github.com/gmajor-encrypt/php-substrate-api) | ☐ | ☒ | ☒ | | [CoinFabrik](https://www.coinfabrik.com/) | [Scout - Security Analysis Tool](ScoutCoinFabrik.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☒ | ☒ | | [727.ventures](https://727.ventures/) | [Typechain-Polkadot Follow-up-2](typechain-polkadot-follow-up-2.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☒ | ☒ | -| [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☐ | ☐ | +| [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☒ | ☐ | | [Zeeve](https://www.zeeve.io) | [Parachain deployment zoombienet testing automation](Zeeve_Parachain_deployment_zoombienet_testing_automation.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | | [Polytope Labs](https://research.polytope.technology/) | [Trie Verifier Implementation](solidity-trie-verifier.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☒ | ☒ | | [Off-Narrative Labs](https://github.com/Off-Narrative-Labs) | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☒ | ☐ | From c0eb5119320adb48ea77e75087a434e4bb1e92d5 Mon Sep 17 00:00:00 2001 From: Mohamed Abdulaziz Date: Wed, 3 May 2023 08:46:09 +0200 Subject: [PATCH 365/578] Fix hyperlink destination (#1714) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b840448699c..b8c682a7303 100644 --- a/README.md +++ b/README.md @@ -194,7 +194,7 @@ Ideas generally have better chances of being implemented if they're presented in 2. In the newly created fork, create a copy of the suggestion template ([`RFPs/suggestion-template.md`](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/suggestion-template.md)) inside the [`rfps`](https://github.com/w3f/Grants-Program/tree/master/docs/RFPs) folder. Make sure you create a new file and copy the [contents](https://raw.githubusercontent.com/w3f/Grants-Program/master/docs/RFPs/suggestion-template.md) of the template into the new one, and _do not modify the template file directly._ 3. Name the file after your idea: `project_name.md`. 4. Fill out the template with the project details. Please include as many details as possible. -5. Once you're done, create a pull request in **our** main [Grants-Program repository](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/README.md). The pull request should only contain _one new file_—the Markdown file you created from the template. +5. Once you're done, create a pull request in **our** main [Grants-Program repository](https://github.com/w3f/Grants-Program/blob/master/README.md). The pull request should only contain _one new file_—the Markdown file you created from the template. 6. You will see the same template as for creating an application. Please replace it with [this one](.github/PULL_REQUEST_TEMPLATE/rfp_pr_template.md). 7. The RFP will be accepted and merged as soon as it receives three approvals from [W3F Grants Committee](https://github.com/w3f/Grants-Program#w3f-grants-committee) members. From 37bcc8e1188497a213f6ea65ec0be3d4227b009f Mon Sep 17 00:00:00 2001 From: Ivan Leshchenko <128095804+IvanLeshchenko727@users.noreply.github.com> Date: Thu, 4 May 2023 00:12:29 +0300 Subject: [PATCH 366/578] Patron Grant Application (#1617) * Grant for Patron * Add UI concept link * Update team members and milestones * Remove Milestone 2 --- applications/patron.md | 267 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 267 insertions(+) create mode 100644 applications/patron.md diff --git a/applications/patron.md b/applications/patron.md new file mode 100644 index 00000000000..c5433e6e46b --- /dev/null +++ b/applications/patron.md @@ -0,0 +1,267 @@ +# Patron + +- **Team Name:** [727.ventures](https://github.com/727-Ventures) +- **Payment Address:** ERC 20 ADDRESS (DAI): +0x352F779203202c99699CdA8cc95adF06CcC8abEf +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 3 + +## Project Overview :page_facing_up: + +Patron is your one stop smart contract manager for Polkadot ecosystem. + +Patron's tech stack consists of Rust (with [`axum`](https://docs.rs/axum) being used as an HTTP server), TypeScript (React, Next.js, polkadot{.js}), PostgreSQL. + +### Overview + +Nowadays, smart contracts are one of the main instruments of development in the blockchain world. As blockchain itself should be open and reliable, we want to create a registry of all available contracts, so everyone could understand the risks and check whether a specific contract is safe or not. + +The other side of it - manager of smart contracts, so every developer could manage his own contracts just like using GitHub. It is very important for users to have connection with what developers do, so that will increase trust between them. + +## Existing problems + +1. Seamless verification ✅. An ability to seamless get your on-chain deployed contract logic verified and matched with existing source code, using the usual deployment flow without obscure actions. +2. Inefficient build flow. No automatic build flow results in awful developer experience for those developing on ink!. This means that developers have to manually start builds and manually deploy contract on each development iteration. +3. Inefficient contract deployment. CLI/script deployment usually are not sufficient for local/testnet development while existing UI instruments are rather complicated . +Also, there is no common deploy flow for every stage - local/testnet/production, a tool that would combine both CLI automation and UI playground. +4. Unified contract management. Deployed smart contract management is currently done with the usage of hard-to-use CLI tools or UI instruments with just the basic features available. Also, developer contract management(UI used during development) and post-deployment contract management are different tools and interfaces(UIs). +5. Vulnerability research is done mostly ad-hoc, with no unified platform being available to assist users in covering common vulnerabilities. Ecosystem also lacks automatic vulnerability scanning platform, which will catch common mistakes in smart contracts that could lead to security issues. +6. Interaction with external resources (like HTTP APIs) based on events is obscure and has to be implemented manually. + +## Project details + +UI concept can be previewed [here](https://www.figma.com/file/Q50Z11g0LKROslWIIbgR8K/Patron-Concept). + +### Smart contract explorer + +Explorer that behaves similarly to Subscan, which allows users to find smart contracts by their address +and see the data of the smart contract (code, dependencies, version of the compiler, chain etc.). + +### Smart contract verification module + +As part of our deployment flow, the verification module will provide a reproducible verification environment to build and verify ink! smart contracts. + +Users will be able to supply smart contract code and tooling versions, which will be invoked inside of an isolated environment. + +After user supplied code build, smart contract explorer users can see verification details (similar to how it's implemented in EtherScan). + +To start using verification module, users will need to pay a fee. This will protect the verification module from abuse. + +```mermaid +sequenceDiagram + User->>+Patron: Account verification (to prevent build system abuse) + User->>+Build system: Smart contract code and build information + Build system->>+Patron: Verified smart contract + Patron->>+User: Verified smart contract + User->>+Patron: Deployment request (without passing private keys) +``` + +### Deployment tool + +As part of our platform, we plan to provide users with a unified deployment tool that builds and publishes smart contracts for popular mainnets and testnets. + +The contract build process is done on our platform side using isolated containers and contract verification workflow, while the deployment itself is done on user's side, +without delegating any private keys to us. + +Eventually, we plan to unify our tools into Patron CLI, allowing developers to create new ink! contracts, +use existing smart contract templates, transpile existing Solidity contracts, or generate Typechain bindings +without leaving the same unified interface they will already be familiar with. + +## Future work + +Our long-term plans are to become a unified solution for developers to verify and deploy smart contracts, and for regular users to discover new smart contracts on. + +We are eventually planning on providing monetization features in Patron, however the details are to be worked on later. We will not gatekeep +users from the general hosted Patron functionality, while also providing all the necessary means to deploy a self-hosted instance. + +### Smart contract manager + +Manager that will allow users to register and deploy their contracts and invoke various actions on existing contracts available on the platform, such as periodic invocation and vulnerability scanning. + +Unified ink! smart contract manager solution allows us to provide improved transparency (by building a contract ourselves and publishing it or by verifying an already published contract to match the provided source code), security (integrated vulnerability scanning, audit publishment capabilities) and versatility (periodic contract invocation, integrated scripting features.). + +Smart contract manager should provide most (if not all) of its functionality while keeping user’s private keys private, without delegating them to Patron. + +### Build/Compile flow + +Our unified deployment tool will also include code watching capabilities, allowing developers to quickly test application locally in an interactive fashion, without wasting time on manual smart contract deployment and instantiation. + +### Vulnerability scanning and bug bounty program + +We plan to integrate security features into our platform by providing users with capabilities to review existing smart contract audits done by third-party companies and eventually provide a platform to audit smart contracts. + +Vulnerability scanning can be invoked automatically to detect various common vulnerabilities via pre-configured intrinsics, while still allowing users to review contracts in more detail if necessary. + +### Scripting functionality + +As part of the smart contract manager, we plan to provide a scripting functionality that will allow smart contract developers to access external APIs and implement complex workflows that depend on external data. + +Patron will automatically (and in a verifiable way) request external APIs and call user’s smart contract methods with data obtained from the response. + +This workflow may be executed based on the contract’s dispatched events or just by periodic contract calls. + +```mermaid +sequenceDiagram + Smart contract-->>+Patron: WeatherDataRequest event was dispatched. + Patron->>+External API: Weather data request. + External API->>+Patron: Weather data response. + Patron->>+Smart contract: set_weather_data method call +``` + +We can also provide a smart contract with external data based on timer: + +```mermaid +sequenceDiagram + Note left of Smart contract: No events on their own. + Note right of Patron: Timer has reached zero. + Patron->>+External API: Weather data request. + External API->>+Patron: Weather data response. + Patron->>+Smart contract: set_weather_data method call +``` + +This feature can be expanded with vast scripting support, allowing user to execute arbitrary off-chain code that interacts with external services and the smart contract itself. + +## Ecosystem fit + +### Where and how does your project fit into the ecosystem? + +Our platform can significantly improve the ink! ecosystem by covering transparency and security and providing versatile features, allowing developers and smart contract users to discover, discuss and improve. + +### Who is your target audience? + +Our target audience is WebAssembly smart contract developers, independent auditors, vulnerability researchers, and users who want to discover new smart contracts to use and discuss. + +### What need(s) does your project meet? + +Our project can significantly improve the general trust of users in smart contracts while also improving developer user experience by providing a versatile feature set. + +### Are there any other projects similar to yours in the Substrate/Polkadot/Kusama ecosystem? + +We are aware of Epirus Substrate explorer project (as well as an active project to create an ink! verification server). + +Epirus explorer provides smart contract explorer features, however, no known effort to create a smart contract manager (similar to [OpenZeppelin Defender](https://www.openzeppelin.com/defender) functionality) is ongoing. + +Verification will be part of the deploy flow and thus with mass adoption will be out of the box for every product deployed. + +## Team members + +- **Markian Ivanichok** (СEO of 727.ventures) +- **Dominik Krížo** (Head of Engineering | 727.ventures) +- **Ivan Leshchenko** (Blockchain Developer | 727.ventures) +- **Nameless Endless** (Blockchain Developer | 727.ventures) +- **Varex Silver** (Blockchain Developer | 727.ventures) +- **Artem Lech** (Blockchain Developer | 727.ventures) +- **Matviy Matsipura** (Designer | 727.ventures) + +**Contact** + +- **Contact Name:** Ivan Leshchenko +- **Contact Email:** ivan.leshchenko@727.ventures +- **Website:** [727.ventures](https://727.ventures) + +**Legal Structure** + +- **Registered Address:** The registered office shall be in Coastal Building, Wickham’s + +Cay II, P. O. Box 2221, Road Town, Tortola, VG1110, British Virgin Islands. + +- **Registered Legal Entity:** Seven2seven Ventures Ltd + +**Team's experience** + +- **Markian Ivanichok** + +CEO of 727.ventures, a blockchain entrepreneur, and a software engineer. + +I began my engineering career at the age of 15 and have since gained extensive experience in both engineering and leadership. Having founded a couple of startups, I also gained entrepreneurial experience. I was inspired to co-found and invest in Sector F, one of the top consulting companies in Ukraine that helps entrepreneurs to accelerate their growth. + +- **Dominik Krížo** + +Head of Engineering + +Started programming his own games at the age of 15 as a hobby, then went to University to study informatics and object-oriented programming, becoming an Android developer and eventually switching to work in web3. Dominik played a crucial role in the OpenBrush and Sol2Ink development and is currently developing the ink! smart contracts tools as part of Brushfam. + +- **Ivan Leshchenko** + +Blockchain Developer + +Blockchain developer with proficiency in the Rust programming language. Developed various libraries and applications using Rust, with a primary interest in developing the WASM smart contract ecosystem. + +- **Nameless Endless** + +Blockchain Developer + +Became interested in programming at the age of 16. At this time, he tried web development and created a website. Then decided to go to University to study system programming and object-oriented programming. Most often, he used C and C++ languages. Nameless likes innovations of web3 technologies and believes in the potential of Rust language and WASM standards for smart contracts. + +- **Varex Silver** + +Blockchain Developer + +Student of Computer Science at the Kyiv National University of Taras Shevchenko. Participated in programming competitions of different stages in school since 2017 (C++). Was a Backend developer (Go), Solidity developer(Solidity, Hardhat, Typescript), and now a Blockchain developer (Rust, Typescript). + +- **Artem Lech** + +Blockchain Developer + +Student of Applied Mathematics at the Kyiv National University of Taras Shevchenko. Started programming in 2016 and participated in a lot of Ukrainian and international competitions of competitive programming. Worked as a lecturer of algorithms at the school of competitive programming and as Intern Backend Engineer (Rust). Now works as Blockchain Developer on Polkadot Blockchain (Rust, Typescript). + +**Matviy Matsipura** + +Gained professional experience as a lead designer in a product company, where he was responsible for creating packaging and visual designs for a popular milk +brand in Ukraine. Transitioned to the field of web3 design and is currently leading the design process for blockchain projects. + +**Team Code Repos** + +- https://github.com/727-Ventures + +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. + +- https://github.com/coreggon11 +- https://github.com/ivan770 +- https://github.com/o-tsaruk +- https://github.com/varex83 +- https://github.com/Artemka374 + +**Team LinkedIn Profiles** + +- https://www.linkedin.com/in/mivanichok/ +- https://www.linkedin.com/in/dominik-krizo/ +- https://www.linkedin.com/in/tsaruk-olexandr/ +- https://www.linkedin.com/in/bogdan-ogorodniy/ +- https://www.linkedin.com/in/artem-fomiuk-31249b226/ + +## Development roadmap + +### Overview + +Total duration: 7 weeks + +FTE: 3 + +Total cost: 63,000 USD + +### Milestone 1 - MVP with verification functionality only + +Duration: 7 weeks (Frontend, Backend, CLI utility implementations). + +FTE: 3 + +Total cost: 63,000 USD + +| Number | Deliverable | Specification | +| --- | --- | --- | +| 0a. | License | MIT | +| 0b. | Documentation | We will provide API documentation for contributors to get along with the codebase, as well as a detailed self-hosting instructions for users to create their own nodes. | +| 0c. | Testing guidelines | Core functionality will be covered by a comprehensive unit test suite. | +| 0d. | Docker | We will prepare Docker images for users to spin up their own nodes more easily and conveniently. | +| 0e. | Article | We will publish an article that explains the achievements done as part of the grant. | +| 1a. | Backend storage | Backend implementation with contract discovery and persistent storage. | +| 1b. | Sync server | A separate server that catches new contract deployments and events will be implemented. | +| 1c. | Smart contract builder | Immutable, pre-configured smart contract builders are to be implemented for verified smart contract deployment. | +| 2a. | Web UI | A simple web UI will be implemented to expose Patron functionality. | +| 2b. | Detailed contract information | Frontend to display detailed contract info (as well as verification status) will be implemented. | +| 2c. | User authentication | We will implement a web3-oriented authentication solution | +| 3a. | Developer CLI utility | A deployment workflow unified, developer-oriented CLI utility will be implemented. | + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Personal recommendation From 85ebf6f96820c6d1978bedd41f1aa3b75ef640a1 Mon Sep 17 00:00:00 2001 From: Mohamad Irfianto <81077632+emarai@users.noreply.github.com> Date: Thu, 4 May 2023 13:06:44 +0700 Subject: [PATCH 367/578] Application Profond (#1682) * Create Profond.md * Update Profond.md * Update Profond.md * Remove indexer in M2 Not relevant in Polkadot, has been solved by subsquid * Remove irrelevant chains and update deliverables --- applications/Profond.md | 158 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 applications/Profond.md diff --git a/applications/Profond.md b/applications/Profond.md new file mode 100644 index 00000000000..305899e3922 --- /dev/null +++ b/applications/Profond.md @@ -0,0 +1,158 @@ +# [Profond.ai](http://Profond.ai) - No Code Builder for artists and developers to build, validate, and scale their dApp. + +- **Team Name:** Profond AI, Corp. +- **Payment Address:** 0x92710b669eA59b348cfbe6dcA8682DAabfB5f06A (USDC) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + +## Project Overview :page_facing_up: + +### Overview + +[Profond.ai](http://profond.ai/) is web3 tools to help developers and creators to build, validate, and scale their dApps. We provide smart contract builder (NFT and token), analytic, and indexer. + +We’re focusing on emerging chain and we aim to onboard millions of developers by making it easier onboarding for users to create smart contracts. + +### Project Details + +We’re inspired by [Pagoda.co](http://Pagoda.co), no code builders in the Near Ecosystem. It provides: + +1. No Code Builder: Create smart contracts for Token and NFT +2. Indexer (coming soon): To help successful projects and enterprises scale their dApp. +3. Analytics (coming soon): Data analytics for smart contracts, covering volume, users, transactions, and gas fees. +4. API Analytics (coming soon): To get data from analytics. + +Currently, we’re building MVP for users to create NFT and Token. Analytics, API and Indexer is still under development. + +We’re planning to add more parachains from Polkadot and Kusama to our platform. Here’s our current MVP: [http://console.profond.ai/](http://console.profond.ai/) + +Create NFT Collection + +NFT Tools +NFT Tools, currently require users to manually upload the collection via NFT-Up, we’re working to make it drag&drop + +![Untitled (2)](https://user-images.githubusercontent.com/81077632/232679334-a4c46b51-14e5-4be9-8c56-99a4c32152b2.png) +Token/Coin tools. We’re looking at the example when we creating 1 million XOIN token (see “Coin Minting” section) + +Analytics +Example of smart contract analytic. In this image, we’re doing analytic on marketplace.paras.near. + +### Ecosystem Fit + +We aim to launch on Polkadot and Kusama, here’s what problem we’re trying to solve: + +- For creators, creating a smart contract for their NFTs and tokens is hard. Especially in relatively new WASM smart contracts like ink! . +- For UI developers, blockchain development is too complex. Furthermore, each chain has its own complexity. +- Limited tooling for Polkadot and Kusama ecosystem. +- For emerging chain, we help them create smart contract templates. + +## Team :busts_in_silhouette: + +### Team members + +- CEO & Founder: Adhiguna Mahendra +- Product Lead & Founder: Ekki Rinaldi (Ekki) +- Full-stack Developer & Founder: Rizky Irfianto (Irfi) +- Database Engineer & Founder: Bagas Prakasa +- Full-stack Developer: Ade Yusup +- Smart Contract Engineer: Amajid Sinar (Jedi) +- Business Development: Vincent Salaka + +### Contact + +- **Contact Name:** Ekki +- **Contact Email:** ekki@profond.ai +- **Website:** https://profond.ai + +### Legal Structure + +- **Registered Address:** 2810 North Church Street, Wilmington, Delaware 19802 +- **Registered Legal Entity:** Profond AI, Corp. + +### Team's experience + +Our founders we’re building the biggest NFT marketplace in the Near ecosystem (Paras NFT Marketplace) and recently integrated with Astar Network. As builder and part of NFT community, we understand what builders need (especially FE engineer) and for artist who want to launch their on NFT. Our team led by tech veteran who had experience working in Silicon Valley, Adhiguna Mahendra, with 20+ years of experience. + +We helped grow the NEAR NFT ecosystem by contributing to NFT with open-source projects such as NFT smart contract standard, marketplace smart contract, vesting smart contract, and so on as you can see on the project’s repo: [https://github.com/parasHQ/](https://github.com/parasHQ/) + +Here’s our recent works: + +Paras Launchpad: [https://launchpad.paras.id/](https://launchpad.paras.id/) - NFT Launchpad in Astar using ink! + +Arkana Raffler: [https://arkana.gg/](https://arkana.gg/) + +Pipapo Ticketing System: [https://pipapo.io/](https://pipapo.io/) + +### Team Code Repos + +- [https://github.com/emarai](https://github.com/emarai) +- [https://github.com/ekkirinaldi](https://github.com/orgs/profondHQ/people/ekkirinaldi) +- [https://github.com/bagasprakasa](https://github.com/bagasprakasa) +- [https://github.com/internnos](https://github.com/internnos) +- [https://github.com/adeyusupp](https://github.com/adeyusupp) + +### Team LinkedIn Profiles (if available) + +- [https://www.linkedin.com/in/adhigunamahendra/](https://www.linkedin.com/in/adhigunamahendra/) +- [https://www.linkedin.com/in/bagasprakasa/](https://www.linkedin.com/in/bagasprakasa/) +- [https://www.linkedin.com/in/irfianto/](https://www.linkedin.com/in/irfianto/) +- [https://www.linkedin.com/in/amajidsinar/](https://www.linkedin.com/in/amajidsinar/) +- [https://www.linkedin.com/in/ekkirinaldi/](https://www.linkedin.com/in/ekkirinaldi/) +- [https://www.linkedin.com/in/vincentsalaka/](https://www.linkedin.com/in/vincentsalaka/) +- [https://www.linkedin.com/in/adeyusupp/](https://www.linkedin.com/in/adeyusupp/) + +## Development Status :open_book: + +PoC → Here’s our current MVP [http://console.profond.ai/](http://console.profond.ai/) + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** Duration of the whole project (e.g. 2 months) +- **Full-Time Equivalent (FTE):** 2 FTE +- **Total Costs:** $10.000 + +### Milestone 1 — No code smart contract builder + +- **Estimated duration:** 1 month +- **FTE:** 2 +- **Costs:** 4,000 USD + +| Number | Deliverable | Specification | +| --- | --- | --- | +| 0a. | License | MIT | +| 0b. | Documentation | We will provide documentation page on how to create NFT (PSP34) and FT (PSP22) smart contract with our interface. API documentation for project settings will also be provided. | +| 0c. | Testing and Testing Guide | All functions will be covered with full integration test, testing guide will also be provided. | +| 0d. | Article | We will publish an article that explains the no code builder | +| 1. | No Code NFT Creation (ink!) | Allows users to create NFT collection smart contract (PSP34) using ink! in one of WASM supported Parachains. User will be able to login with Polkadot Wallet (SubWallet, polkadot.js, Talisman) and then deploy smart contract with provided code hash. The code hash will be uploaded using selected templates from OpenBrush PSP34 Smart contract. We are abstracting the technical details from users, users just need to upload NFT images, set metadata, and pay gas fee to deploy the smart contract. We will be using useInkathon for wallet and transaction, Next.Js for frontend framework, and OpenBrush for smart contract templates. | +| 2. | No Code Fungible Token Creation (ink!) | Allows users to create NFT collection smart contract (PSP34) using ink! in one of WASM supported Parachains. User will be able to login with Polkadot Wallet (SubWallet, polkadot.js, Talisman) and then deploy smart contract with provided code hash. The code hash will be uploaded using selected templates from OpenBrush PSP22 Smart contract. We are abstracting the technical details from users, users just need to set metadata and pay gas fee to deploy the smart contract. We will be using useInkathon for wallet and transaction, Next.Js for frontend framework, and OpenBrush for smart contract templates. | +| 3. | Project Management Module | Allows users to create more than one projects. We are using NestJS for backend framework. | +| 4. | Multichain Integration | Allows users to choose between Polkadot Parachains and Kusama | + +### Milestone 2 Example — Analytics and API + +- **Estimated Duration:** 1 month +- **FTE:** 2 +- **Costs:** 6,000 USD + +| Number | Deliverable | Specification | +| --- | --- | --- | +| 0a. | License | MIT | +| 0b. | Documentation | We will provide documentation page on how to create basic NFT collection (PSP34) using our no-code builder and creating a fungible token (PSP22). | +| 0c. | Testing and Testing Guide | All functions will be covered with full integration test, testing guide will also be provided. | +| 0d. | Article | We will publish an article that explains the analytics and API usage | +| 1. | Analytic Functionality | Add on-chain analytic for the smart contract. | +| 2. | REST API Service | API for users to get the data analytic. | + +## Future Plans + +Experimenting in business model. We have two kind of ideation we want to validate: + +1. Indexer service, providing RPC for dApp to cut their operational costs +2. Royalties enforcement for each NFT created. + +On top of that, we aim to onboard more emerging chains and big chains like Solana and Ethereum. + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Web3 Foundation Website From beebea3fb301904e9a4ebfbbb7dd0d0d52444bad Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 4 May 2023 08:09:30 +0200 Subject: [PATCH 368/578] Update index.md Add Profond --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index ab3c77c9264..54320e13e9a 100644 --- a/applications/index.md +++ b/applications/index.md @@ -50,6 +50,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Collective Intelligence Labs](https://collectiveintelligence.dev/) | [Omnichain Infrastructure](./CILA-omnichain-infrastructure.md) | [GitHub](https://github.com/Collective-Intelligence-Labs) | ☐ | ☐ | ☐ | | [TradeLink](https://tradelink.pro/) | [Sandox](./sandox.md) | [GitHub](https://github.com/BEARlogin) | ☐ | ☐ | ☐ | | [Wunderbar Network](https://wunderbar.network/) | [Vue.js + TypeScript Substrate Front-End Template](./vue-typescript-substrate-frontend-template.md) | [GitHub](https://github.com/WunderbarNetwork) | ☐ | ☐ | ☐ | +| [Profond.ai](https://www.profond.ai/) | [Profond](./Profond.md) | [GitHub](https://github.com/emarai) | ☐ | ☐ | ☐ | [🔝](#menu) From f926fa7722ad57845ab932dc2905eff880bc2afe Mon Sep 17 00:00:00 2001 From: Noc2 Date: Thu, 4 May 2023 08:51:41 +0200 Subject: [PATCH 369/578] fix website --- applications/Profond.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/applications/Profond.md b/applications/Profond.md index 305899e3922..1ffc4d68a3a 100644 --- a/applications/Profond.md +++ b/applications/Profond.md @@ -25,15 +25,15 @@ Currently, we’re building MVP for users to create NFT and Token. Analytics, AP We’re planning to add more parachains from Polkadot and Kusama to our platform. Here’s our current MVP: [http://console.profond.ai/](http://console.profond.ai/) -Create NFT Collection +Create NFT Collection -NFT Tools +NFT Tools NFT Tools, currently require users to manually upload the collection via NFT-Up, we’re working to make it drag&drop ![Untitled (2)](https://user-images.githubusercontent.com/81077632/232679334-a4c46b51-14e5-4be9-8c56-99a4c32152b2.png) Token/Coin tools. We’re looking at the example when we creating 1 million XOIN token (see “Coin Minting” section) -Analytics +Analytics Example of smart contract analytic. In this image, we’re doing analytic on marketplace.paras.near. ### Ecosystem Fit From cd65a393a74cf52d28a3cacbc2d3c6296acaf194 Mon Sep 17 00:00:00 2001 From: Cyril Carlier Date: Thu, 4 May 2023 09:39:56 +0200 Subject: [PATCH 370/578] Maki amend 2 (#1717) * Amend Maki - timeline and payment address * Remove merge conflict... * Update Maki.md --- applications/Maki.md | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/applications/Maki.md b/applications/Maki.md index 97771db5e8f..6e6e14e7fa5 100644 --- a/applications/Maki.md +++ b/applications/Maki.md @@ -1,7 +1,7 @@ # Maki - **Team Name:** Cyril Carlier (Individual) -- **Payment Address:** 0x7e575d2140aa4b723ac2014d5627330a7ed514d4 (ERC-20 USDC) +- **Payment Address:** 0x8a0cFA1DE5c26e3Cd553F33Dc560fBfa5267867C (ERC-20 USDC) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 ## Project Overview :page_facing_up: @@ -121,24 +121,14 @@ As mentioned, this application is a response from the [anti-collusion infrastruc ### Overview -<<<<<<< HEAD -- **Total Estimated Duration:** 12 months +- **Total Estimated Duration:** 15 months - **Full-Time Equivalent (FTE):** 0.15 FTE -======= -- **Total Estimated Duration:** 6 months -- **Full-Time Equivalent (FTE):** 0.3 FTE ->>>>>>> origin/master - **Total Costs:** $9,000 ### Milestone 1 — Implement Voter functions -<<<<<<< HEAD -- **Estimated duration:** 6 months +- **Estimated duration:** 9 months - **FTE:** 0.1 FTE -======= -- **Estimated duration:** 2 months -- **FTE:** 0.3 FTE ->>>>>>> origin/master - **Costs:** 3,000 USD | Number | Deliverable | Specification | @@ -157,13 +147,8 @@ Note: As the implementation is based on others work (research and specification) ### Milestone 2 — Coordinator's functions -<<<<<<< HEAD - **Estimated Duration:** 6 months -- **FTE:** 0.2 FTE -======= -- **Estimated Duration:** 4 months - **FTE:** 0.3 FTE ->>>>>>> origin/master - **Costs:** 6,000 USD | Number | Deliverable | Specification | From d0fc6a0db2bd1e4db4dea2041a8770e18e08614e Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 4 May 2023 09:43:17 +0200 Subject: [PATCH 371/578] Update index.md Add Patron --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 54320e13e9a..bbddda6ac52 100644 --- a/applications/index.md +++ b/applications/index.md @@ -51,6 +51,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [TradeLink](https://tradelink.pro/) | [Sandox](./sandox.md) | [GitHub](https://github.com/BEARlogin) | ☐ | ☐ | ☐ | | [Wunderbar Network](https://wunderbar.network/) | [Vue.js + TypeScript Substrate Front-End Template](./vue-typescript-substrate-frontend-template.md) | [GitHub](https://github.com/WunderbarNetwork) | ☐ | ☐ | ☐ | | [Profond.ai](https://www.profond.ai/) | [Profond](./Profond.md) | [GitHub](https://github.com/emarai) | ☐ | ☐ | ☐ | +| [727.ventures](https://727.ventures) | [Patron](./patron.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | [🔝](#menu) From 59fe82fe46ad959aa6735006ffb594876f1231c2 Mon Sep 17 00:00:00 2001 From: Nabil Abdellaoui Date: Mon, 8 May 2023 01:34:28 -0400 Subject: [PATCH 372/578] Update index.md (#1719) XCM Tools first delivery --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index bbddda6ac52..d50233aa800 100644 --- a/applications/index.md +++ b/applications/index.md @@ -98,7 +98,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Zkverse](https://github.com/Zkvers) | [Zkverse](zkverse.md) | [GitHub](https://github.com/Zkvers/substrate-zk) | ☐ | ☐ | ☐ | | [Taiwan Research-based Biopharmaceutical Manufacturers Association](https://trpma.org.tw/cmn) | [Claps Health](Claps.md) | [GitHub](https://github.com/Claps-Health/) | ☐ | ☐ | ☐ | | [Tolga Yaycı](https://github.com/tolgayayci) | [Awesome Polka](Awesome-Polka.md) | [GitHub](https://github.com/tolgayayci/awesome-polka/tree/dev) | ☐ | ☐ | ☐ | -| [gmajor](https://github.com/gmajor-encrypt) | [XCM Tools](xcm-tools.md) | [GitHub](https://github.com/gmajor-encrypt/) | ☐ | ☐ | ☐ | +| [gmajor](https://github.com/gmajor-encrypt) | [XCM Tools](xcm-tools.md) | [GitHub](https://github.com/gmajor-encrypt/) | ☐ | ☒ | ☐ | | [David Semakula](https://github.com/davidsemakula) | [Ink Analyzer](ink-analyzer.md) | [GitHub](https://github.com/ink-analyzer/ink-analyzer) | ☐ | ☐ | ☐ | | [Bright Inventions](https://brightinventions.pl/) | [High-availability validator setup](High_availability_validator_setup.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☐ | | [DIA Data](https://www.diadata.org/) | [Bridges Attestation Oracle](DIA_Bridge_Attestation_Oracle.md) | [GitHub](https://github.com/diadata-org/) | ☐ | ☐ | ☐ | From 40565b9baaee9e576a42d453aa8c1b7e7996baeb Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Mon, 8 May 2023 10:37:49 -0300 Subject: [PATCH 373/578] Update index.md (#1723) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index d50233aa800..9c4324ee93f 100644 --- a/applications/index.md +++ b/applications/index.md @@ -90,7 +90,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Invers Inc](https://invers.tech/) | [Zkwasm Rollups Transfer](zkwasm-rollups-transfer.md) | [GitHub](https://github.com/zero-network) | ☐ | ☐ | ☐ | | [decentraDOT](https://decentradot.com/) | [Cyclops Validator Dashboard](cyclops.md) | [GitHub](https://github.com/ArthurHoeke?tab=repositories) | ☐ | ☒ | ☒ | | [Anwesh Nayak](https://github.com/muddlebee) | [Mempool Dashboard - Version 2](polkadot-mempool-explorer-v2.md) | [GitHub](https://github.com/muddlebee) | ☐ | ☐ | ☐ | -| [Tellor Inc](https://tellor.io/) | [Tellor Oracle Protocol](Tellor.md) | [GitHub](https://github.com/tellor-io/) | ☐ | ☐ | ☐ | +| [Tellor Inc](https://tellor.io/) | [Tellor Oracle Protocol](Tellor.md) | [GitHub](https://github.com/tellor-io/) | ☐ | ☒ | ☐ | | [Jonathan Brown](https://acuity.social/) | [Hybrid Explorer](hybrid.md) | [GitHub](https://github.com/acuity-social) | ☐ | ☒ | ☐ | | [ParaSpell](https://github.com/paraspell) | [ParaSpell_Follow Up 2](ParaSpell_follow-up2.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | | [justmert](https://github.com/justmert) | [PolkaFlow](polkaflow.md) | [GitHub](https://github.com/justmert) | ☐ | ☐ | ☐ | From 9fc0fad1e567675ea4713892ce9de7e66421fe99 Mon Sep 17 00:00:00 2001 From: masapr <40862722+masapr@users.noreply.github.com> Date: Mon, 8 May 2023 15:50:12 +0200 Subject: [PATCH 374/578] proposal: static analysis tool for runtime pallets (#1706) --- applications/sarp-basic-functionality.md | 141 +++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 applications/sarp-basic-functionality.md diff --git a/applications/sarp-basic-functionality.md b/applications/sarp-basic-functionality.md new file mode 100644 index 00000000000..485712cd299 --- /dev/null +++ b/applications/sarp-basic-functionality.md @@ -0,0 +1,141 @@ +# SARP - A Static Analysis Tool for Runtime Pallets + +- **Team Name:** Supercomputing Systems AG (SCS) +- **Payment Address:** 0xd24622311a22470353bd21d9bcd9e02ba0cfebbe (USDC) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + +## Project Overview :page_facing_up: + +This application is a response to the RFP [Static Analysis for Runtime Pallets](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/Static-Analysis-for-Runtime-Pallets.md) + +### Overview + +[Runtime Pallets](https://docs.substrate.io/learn/runtime-development/) are modules for writing the business logic of blockchains in [Substrate](https://github.com/paritytech/substrate) (a Rust framework for building blockchains). These are usually concise pieces of standalone code with relatively few dependencies and clear specifications, hence tractable targets for performing static analysis and verification. The code quality of a runtime pallet is crucial, as even minor defects can result in major exploits like DoS attacks or the stealing of funds by a malicious party. A static code analysis can help to automate the auditing processes and prevent introduction of defects throughout the software life-cycle. + +Therefore we would like to develop a tool - SARP (Static Analysis tool for Runtime Pallets) to perform static analysis with reasonable soundness guarantees. In particular, we would like to target vunerability classes that are detectable using dataflow analysis techniques like *tag analysis* and *taint analysis*. + +Our team has no prior knowledge in static code analysis, but has a good understanding of substrate and Rust. + +### Project Details + +We will base our work on [MIRAI](https://github.com/facebookexperimental/MIRAI/) and extend it with checks on substrate pallets. For details see the [Development Roadmap](#development-roadmap-nut_and_bolt) + +### Ecosystem Fit + +The tool will help any team developing substrate pallets. It can further be integrated in the CI pipelines of the teams, providing a continuous quality check on the pallet code. + +In the long term it could be interesting to connect the work done here with the new emerging auditing DAOs (like [Fuzzland](https://github.com/w3f/Grants-Program/blob/master/applications/FuzzLand.md) or [QRUCIAL DAO](https://github.com/w3f/Grants-Program/blob/master/applications/QRUCIAL_DAO.md)). + + +## Team :busts_in_silhouette: + +### Team members + +- Sabine Proll: Project Lead +- Bigna Härdi: Developer +- Edith Chevrier: Developer +- Thomas Niederberger: Developer + +### Contact + +- **Contact Name:** Sabine Proll +- **Contact Email:** Sabine.Proll@scs.ch | info@scs.ch +- **Website:** https://www.scs.ch + +### Legal Structure + +- **Registered Address:** Technoparkstrasse 1, 8005 Zürich, Switzerland +- **Registered Legal Entity:** Supercomputing Systems AG + +### Team's experience + +Supercomputing Systems AG is a contractor with 130 engineers, working in the fields of software, electronics and system design. Profound know-how, solid methodological competence as well as efficient project management are the foundation of our success. Within the company we have a team of 5 blockchain developers, who have experience in the Polkadot ecosystem. + +Our blockchain team has been a contributor to the ecoysystem since 2019. We started with grants from the Web3 Foundation to build the basis for [Integritee](https://github.com/integritee-network) (see our grants from waves [1](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/substrate_sgx_proposal.md), [3](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/substrate-api-client.md) and [5](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/SubstraTEE-extension-pack1.md)). After that, our team has worked for Integritee and Encointer as a contractor. Recently the team received grants from the Kusama treasury for maintaining and improving the [substrate-api-client](https://github.com/scs/substrate-api-client), see our proposals for [Nov 22 - Jan 23](https://kusama.subsquare.io/referenda/referendum/26) and [Feb 23 - Apr 23](https://kusama.subsquare.io/referenda/referendum/88). + +### Team Code Repos + +The team has mainly worked on the following repositories + +- [Substrate Api Client](https://github.com/scs/substrate-api-client) +- [Integritee Worker](https://github.com/integritee-network/worker) +- [Encointer Sidechain](https://github.com/encointer/community-sidechain) + +Github accounts of the team members + +- https://github.com/masapr +- https://github.com/haerdib +- https://github.com/echevrier +- https://github.com/Niederb + + +### Team LinkedIn Profiles + +- https://www.linkedin.com/in/sabine-proll-5a7118153 +- https://www.linkedin.com/in/bigna-h%C3%A4rdi-736bb21a9 +- https://www.linkedin.com/in/edith-chevrier-90233297 +- https://www.linkedin.com/in/thomas-niederberger-6057b71a7 + +## Development Status :open_book: + +We will base our work on [MIRAI](https://github.com/facebookexperimental/MIRAI) and the RFP [Static Analysis for Runtime Pallets](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/Static-Analysis-for-Runtime-Pallets.md) + +We have not started to work on this. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 0,5 months +- **Full-Time Equivalent (FTE):** 0,8 FTE +- **Total Costs:** 10.000 USD + + + + +#### Vulnerability Classes +For this project we want to address the following vulnerability classes: + +* [incorrect origin](https://github.com/bhargavbh/MIRAI/blob/main/substrate_examples/incorrect-origin/description.md) of dispatchable functions. +* [unsigned transaction](https://github.com/bhargavbh/MIRAI/blob/main/substrate_examples/unsigned-transaction/description.md) validation. + + +### Milestone 1 - Research + +- **Estimated duration:** 0,5 months +- **FTE:** 0,8 FTE +- **Costs:** 10.000 USD + +In milestone 1 we want to investigate how the above stated [vulnerability classes](#vulnerability-classes), can be detected by extending MIRAI. + +#### Deliverables + +| Number | Deliverable | Specification | +|--------|-----------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 0a. | License | MIT | +| 0b. | User Documentation | We will provide a basic **tutorial** that explains how to use the tool on a substrate pallet. | +| 0c. | Testing and Testing Guide | A first set of tests will be provided, together with a testing guide, that describes how to run them. | +| 1. | Prototype Code | Prototype code to approach the above two stated vulnerability classes. | +| 2. | Documentation | Technical documentation
  • describing the approach we plan to implement in milestone 2, incl. its limitations.
  • with (interesting) examples of the vulnerability classes.
| +| 3. | Engagement | Engage with teams at Web3 Foundation and Parity for prioritization. | + + +## Future Plans + +The next steps for the tool would be to: + +1. Implement a first simple version of the tool, together with tests and documentation. +2. Improve the usability, by providing + * means to surpress warnings + * a comprehensive user tutorial, incl. documentation on the risks of each vulnerability +3. Add more features including checks on the following vulnerability classes: + * tracking bad randomness: ensure bad randomness does not leak into sensitive functions. + * detect panics statically to avoid potential DoS attacks: these include [unsafe arithmetic operations](https://github.com/bhargavbh/MIRAI/blob/main/substrate_examples/arithmetic-overflow/description.md), access outside bounds, assertion failures, etc. + * tracking unsanitised input leakage for sensitive functions. + +Once we have a tool with a good feature set and basic usability features, we want to promote it to the Polkadot developers. Once the tool is in use, we hope to receive feedback on further features and improvements by the developers. + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** +We have previously received grants by the Web3 Foundation for other projects (substratee and substrate-api-client). \ No newline at end of file From 9f28bf103f80c4151ac0b81230bcbad3eab53970 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 8 May 2023 16:25:23 +0200 Subject: [PATCH 375/578] Update index.md SARP - A Static Analysis Tool for Runtime Pallets --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 9c4324ee93f..704305d40aa 100644 --- a/applications/index.md +++ b/applications/index.md @@ -52,6 +52,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Wunderbar Network](https://wunderbar.network/) | [Vue.js + TypeScript Substrate Front-End Template](./vue-typescript-substrate-frontend-template.md) | [GitHub](https://github.com/WunderbarNetwork) | ☐ | ☐ | ☐ | | [Profond.ai](https://www.profond.ai/) | [Profond](./Profond.md) | [GitHub](https://github.com/emarai) | ☐ | ☐ | ☐ | | [727.ventures](https://727.ventures) | [Patron](./patron.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | +| [Supercomputing Systems AG](https://www.scs.ch) | [SARP - A Static Analysis Tool for Runtime Pallets](./sarp-basic-functionality.md) | [GitHub](https://github.com/scs) | ☐ | ☐ | ☐ | [🔝](#menu) From 7018b917b448624c700ebbc3e4719c58ec783e0e Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 8 May 2023 17:40:36 +0200 Subject: [PATCH 376/578] RFP: Host test-suite (#1721) * Initial Draft * Update rfp doc, change name * bhargavbh fixes --- .../polkadot-protocol_conformance_tests.md | 48 +++++++++++++++++++ docs/rfps.md | 1 + 2 files changed, 49 insertions(+) create mode 100644 docs/RFPs/Open/polkadot-protocol_conformance_tests.md diff --git a/docs/RFPs/Open/polkadot-protocol_conformance_tests.md b/docs/RFPs/Open/polkadot-protocol_conformance_tests.md new file mode 100644 index 00000000000..2852771e682 --- /dev/null +++ b/docs/RFPs/Open/polkadot-protocol_conformance_tests.md @@ -0,0 +1,48 @@ +# Polkadot Protocol Conformance Tests + +* **Status:** Open +* **Proposer:** [Bhargav Bhatt](https://github.com/bhargavbh), [David Hawig](https://github.com/Noc2) +* **Objectives:** Create and maintain a comprehensive test-suite for conformance of core functionalities of Polkadot Host. + +## Project Description :page_facing_up: +The reliability and security of the Polkadot network crucially depends on bug-free implementation of Hosts/Nodes. Currently, Substrate and Smoldot (in Rust) are implementations in production, while [Gossamer (in Go)](https://github.com/ChainSafe/gossamer) and [Kagome (in C++)](https://github.com/soramitsu/kagome/) are in advanced stages of development. This RFP invites teams to create and maintain a comprehensive test-suite to check conformance of Host implementations against the official [Polkadot Protocol Specification](https://spec.polkadot.network/). + +The objectives are multifold. The test-suite can: +- be used to objectively evaluate the conformance of a Host Implementation against the Spec. +- help implementers in early stages and steer their development efforts. +- complement the specifications to clarify corner cases and intricacies of the Spec. In several scenarios, precise tests are highly valuable in clarifying the inevitable ambiguities in the Spec. + +Initially, the focus would be on unit tests with tests designed and generated at the right layer of abstraction to accommodate the existing implementations. The scope of the test-suite covers all the components/protocols described in the Specification but we would like to prioritise the following: + +- Mapping the consensus attack surface and producing fuzzing targets accordingly. Indicative, non-exhaustive list of potential targets can be seen below: + - Host API: + - sequences of storage and child-storage operations + - cryptography primitives, particularly those exposed in the Host API + - trie root + - BABE + - Block import + - block validation + - next/current validators aka VRF/block lottery + - secondary slot verification + - GRANDPA + - block import + - block validation + - justification import & validation/verification +- trie proof verification +- scale encoding and decoding, for specific message types, and randomly generated ones +- parachain candidate validation + +The goal of the initial grant should be to develop a PoC. The long-term goal should be to develop a comprehensive test suite that is funded by the on-chain treasury. + +**Useful resources:** +- [Polkadot Protocol Specification](https://spec.polkadot.network/) +- [GitHub polkadot-tests](https://github.com/w3f/polkadot-tests) +- [Chopsticks](https://github.com/AcalaNetwork/chopsticks) +- [Zombienet](https://github.com/paritytech/zombienet) +- [try-runtime](https://docs.substrate.io/reference/command-line-tools/try-runtime/) + +## Deliverables + +The structure of the grant and the milestones depends highly on the project itself and the goal of the initial PoC. It’s therefore up to the applying team to come up with a milestone and delivery structure. + + diff --git a/docs/rfps.md b/docs/rfps.md index b89c5d8dddd..e1d63e1c666 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -54,6 +54,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [parachain_validation_conformance_testing.md](RFPs/Open/parachain_validation_conformance_testing.md) | 🟢 | 18.01.2023 | | [php-scale.md](RFPs/Closed/php-scale.md) | 🔴 | 23.11.2022 | | [polkadot-collator-setup.md](RFPs/Closed/polkadot-collator-setup.md) | 🔴 | 22.03.2023 | +| [polkadot-protocol_conformance_tests.md](RFPs/Open/polkadot-protocol_conformance_tests.md) | 🟢 | 08.05.2023 | | [privacy-enhancement-polkadot-extension.md](RFPs/Under%20Development/privacy-enhancement-polkadot-extension.md) | 🟡 | 27.05.22 | | [raft-validators.md](RFPs/Under%20Development/raft-validators.md) | 🟡 | 23.05.2023 | | [scale-codec-comparator.md](RFPs/Under%20Development/scale-codec-comparator.md) | 🟡 | 30.05.2022 | From 38c7a18f64af44612dbc3ae865641c537d5b5e68 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 9 May 2023 10:06:36 +0200 Subject: [PATCH 377/578] Update IDE_for_ink_Smart_Contracts.md (#1727) --- docs/RFPs/Open/IDE_for_ink_Smart_Contracts.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/RFPs/Open/IDE_for_ink_Smart_Contracts.md b/docs/RFPs/Open/IDE_for_ink_Smart_Contracts.md index 40939bf77dc..623b882e162 100644 --- a/docs/RFPs/Open/IDE_for_ink_Smart_Contracts.md +++ b/docs/RFPs/Open/IDE_for_ink_Smart_Contracts.md @@ -17,6 +17,13 @@ The goal of this RFP is to find teams that would like to maintain the browser-ba ## Deliverables -We recommend applying for a [maintenance grant](https://w3f.github.io/Grants-Program/docs/maintenance), which allows a more flexible structure and roadmap. The list of issues and features to be covered by the grant should be discussed with the previous maintainers and the community, but it is generally up to the applying team to come up with a milestone and delivery structure. +We recommend to initially apply for a [regular grant](https://github.com/w3f/Grants-Program#pencil-process) to fix the following issues and make the playground compatible with different versions of ink! as well as automatic updates: + +- https://github.com/paritytech/ink-playground/issues/427 +- https://github.com/paritytech/ink-playground/issues/197 +- https://github.com/paritytech/ink-playground/issues/460 +- https://github.com/paritytech/ink-playground/issues/428 + +After this we would sign a [maintenance grant](https://w3f.github.io/Grants-Program/docs/maintenance), which allows a more flexible structure and roadmap. The list of issues and features to be covered by the grant should be discussed with the previous maintainers and the community, but it is generally up to the applying team to come up with a milestone and delivery structure. From 38dc57f6cb9ff8540639a787523bdb05272985e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Tue, 9 May 2023 14:44:53 +0200 Subject: [PATCH 378/578] Update application_accepted.yml Update repo URL --- .github/workflows/application_accepted.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/application_accepted.yml b/.github/workflows/application_accepted.yml index 59d7622ae91..adb1b302abe 100644 --- a/.github/workflows/application_accepted.yml +++ b/.github/workflows/application_accepted.yml @@ -85,7 +85,7 @@ jobs: "", "", "Signed", - "https://github.com/w3f/Open-Grants-Program/pull/${{ github.event.pull_request.number }}", + "https://github.com/w3f/Grants-Program/pull/${{ github.event.pull_request.number }}", "${{ steps.date.outputs.date }}" ]], "worksheetTitle": "Legal", From 1fc33382e9b3303b2b0707ce7e6feaf89f1cd88e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Tue, 9 May 2023 15:29:39 +0200 Subject: [PATCH 379/578] Terminate DAO Entrance (#1728) --- applications/dao-entrance-phase-1.md | 37 +++++++++++++++++----------- applications/index.md | 2 +- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/applications/dao-entrance-phase-1.md b/applications/dao-entrance-phase-1.md index 107c649370a..3067366c9ca 100644 --- a/applications/dao-entrance-phase-1.md +++ b/applications/dao-entrance-phase-1.md @@ -4,25 +4,28 @@ - **Payment Address:** 1PE3N5KmEdhE561i5jRTxeQidSuQGrGtLj912GFMw4vxXMG (aUSD) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 +* **Status:** [Terminated](https://github.com/w3f/Grant-Milestone-Delivery/pull/844#issuecomment-1539847990) + ## Project Overview :page_facing_up: ### Overview -In recent years, with the rapid development of information technology, people's work mode has gradually changed from centralized work to decentralized work. Besides, the spread and prevalence of COVID-19 in recent years get people know the importance of diverse work modes. With this trend, the concept web3 steps out from its previous version web2. -Currently, most Web3 companies are still working with tools within Web2, such as Telegram, Discord, Google Drive, Enterprise WeChat, DingTalk, Lark, and etc, Which user's information and initiative are limited. +In recent years, with the rapid development of information technology, people's work mode has gradually changed from centralized work to decentralized work. Besides, the spread and prevalence of COVID-19 in recent years get people know the importance of diverse work modes. With this trend, the concept web3 steps out from its previous version web2. + +Currently, most Web3 companies are still working with tools within Web2, such as Telegram, Discord, Google Drive, Enterprise WeChat, DingTalk, Lark, and etc, Which user's information and initiative are limited. -**DAO-entrance** is trying to create a safe, efficient, powerful and Web3-based instant collaboration tool, which is a breakthrough. It establishes solid trust relationship among organization members through open and transparent smart contract; it maintain end-to-end encrypted communication, to ensure efficient and confidentiallity; it improves work efficiency with thousands of open-source collaborative tool libraries; it keeps data in safe hands through distributed and decentralized storage. +**DAO-entrance** is trying to create a safe, efficient, powerful and Web3-based instant collaboration tool, which is a breakthrough. It establishes solid trust relationship among organization members through open and transparent smart contract; it maintain end-to-end encrypted communication, to ensure efficient and confidentiallity; it improves work efficiency with thousands of open-source collaborative tool libraries; it keeps data in safe hands through distributed and decentralized storage. -**DAO-entrance** focuses on providing DAO with a comprehensive collaborative tool. The tool will help DAO to set up a core team. After the core team authorized by the community, they can make decisions on the daily affairs of DAO, in order to avoiding endless voting. +**DAO-entrance** focuses on providing DAO with a comprehensive collaborative tool. The tool will help DAO to set up a core team. After the core team authorized by the community, they can make decisions on the daily affairs of DAO, in order to avoiding endless voting. ### Project Details -Our long-term goal is to provide a safe, private, efficient and automated DAO tool for enterprises, blockchains and web3 practitioners, in a multi-stage style in different period, and, in the meantime, to offer communication, consensus, production, settlement and other basic needs of members. +Our long-term goal is to provide a safe, private, efficient and automated DAO tool for enterprises, blockchains and web3 practitioners, in a multi-stage style in different period, and, in the meantime, to offer communication, consensus, production, settlement and other basic needs of members. -Currently, we provide not only "ink!"-based DAO smart contract templates, but also substrate-based pallet templates, which support instant integration of all substrate-based blockchains. By compatible with existing DAOs through a non-instrusive way, it allows enterprises and organization to create their own DAOs in a more convenient way. +Currently, we provide not only "ink!"-based DAO smart contract templates, but also substrate-based pallet templates, which support instant integration of all substrate-based blockchains. By compatible with existing DAOs through a non-instrusive way, it allows enterprises and organization to create their own DAOs in a more convenient way. -At this stage, **DAO-entrance** will provide a slack-like client which is based on the matrix protocol for instant messaging. Users can log in with a blockchain account. This tool is designed for modern devices and is compatible with devices equipped with Windows/mac/Linux/android/iOS, and provides organization members with a concise and convenient collaboration platform. +At this stage, **DAO-entrance** will provide a slack-like client which is based on the matrix protocol for instant messaging. Users can log in with a blockchain account. This tool is designed for modern devices and is compatible with devices equipped with Windows/mac/Linux/android/iOS, and provides organization members with a concise and convenient collaboration platform. ![img](https://github.com/dao-entrance/app/raw/main/docs/ui.png) @@ -36,9 +39,10 @@ Through DAPP rendering engine which is based on flutter, **DAO-entrance** is co **DAO-entrance** Client is a non-intrusive client that supports layer1 blockchain and layer2 smart contracts, and it's dedicated to adapting DAO scenarios. As an initial stage, we build the **DAO-entrance** chain based on the substrate, and manage the **DAO-entrance** chain by using DAO. After continuous improvement of the Client, we create **DAO-entrance** DAO, which is a fully autonomous and decentralized organization. Through our own requirements of **DAO-entrance** and continuous introduction of other work modes of DAO, we provide substrate pallet and "ink!" smart contracts with a fast DAO solution Polkadot Ecosystem. -According to business needs, DAO organizations will set up skill groups, called "guilds", and each guild will automatically create public chat channels and Kanbans in **DAO-entrance**. Users can join a guild based on their own strengths or willings. Members can choose whether to participate in projects or events according to their own strengths and willingness. +According to business needs, DAO organizations will set up skill groups, called "guilds", and each guild will automatically create public chat channels and Kanbans in **DAO-entrance**. Users can join a guild based on their own strengths or willings. Members can choose whether to participate in projects or events according to their own strengths and willingness. We provide DAO templates the substrate pallet and ink! Smart contracts: + 1. RoadMap management. 2. Manage DAO share. 3. Management of core team and guild. @@ -49,13 +53,14 @@ We provide DAO templates the substrate pallet and ink! Smart contracts: 8. Contribution value and medal management. 9. Level management. -**DAO-entrance** focuses on providing DAO with a comprehensive collaborative tool. The tool will help DAO to set up a core team. After the core team authorized by the community, they can make decisions on the daily affairs of DAO, in order to avoiding endless voting. +**DAO-entrance** focuses on providing DAO with a comprehensive collaborative tool. The tool will help DAO to set up a core team. After the core team authorized by the community, they can make decisions on the daily affairs of DAO, in order to avoiding endless voting. -According to business needs, DAO organizations will set up skill groups, called "guilds", and each guild will automatically create public chat channels and Kanbans in DAO-entrance. Users can join a guild based on their own strengths or willings. Members can choose whether to participate in projects or events according to their own strengths and willingness. +According to business needs, DAO organizations will set up skill groups, called "guilds", and each guild will automatically create public chat channels and Kanbans in DAO-entrance. Users can join a guild based on their own strengths or willings. Members can choose whether to participate in projects or events according to their own strengths and willingness. ![img](https://github.com/dao-entrance/app/raw/main/docs/structure.png) We provide DAO templates the substrate pallet and ink! Smart contracts: + 1. RoadMap management. 2. Manage DAO share. 3. Management of core team and guild. @@ -91,28 +96,32 @@ We will make substrate pallets and "ink!" Smart contracts open-sourced to provid ### Legal Structure -- **Registered Address:** Building 11, No. 6055, Jinhai way, Fengxian District, Shanghai, China +- **Registered Address:** Building 11, No. 6055, Jinhai way, Fengxian District, Shanghai, China - **Registered Legal Entity:** Diandaoweizhi Technology Co., Ltd. ### Team's experience Erica + - 4-years project management and investing experience in the blockchain industry. She is good at structuring and organizing the teams around the projects. - 5-years product Manager experience in Alibaba. Bai L + - 10-years full stack software development experience - Solid knowledge and experience with various programming language i.e. Go,Dart,Javascript,Rust - Blockchain & Substrate enthusiast Vicent + - 10-years Data-science Manerger experience. - 7-years DAO believers Wilson Lin + - 15 years management experience in big data industry includes 9 years as CEO of start up company. -- 12 years working experience in globe IT vendor like as Oracle, Sun microsystem, EMC, NCR, etc.. -- The believer of Block Chain, DAO and cryptocurrency +- 12 years working experience in globe IT vendor like as Oracle, Sun microsystem, EMC, NCR, etc.. +- The believer of Block Chain, DAO and cryptocurrency ### Team Code Repos @@ -147,7 +156,7 @@ Team github accounts | **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | | 1. | Substrate module: **DAO-entrance** | we create a substrate pallet specifically designed for DAO, which includes the following functions: 1. RoadMap Target Management 2. DAO Share Management 3. Core Team, Association Management 4. Workflow Management (board/task) 5. Financial Management 6. Task reward management 7. Hot-plug voting management 8. Contribution Value, Medal Management 9. Hierarchical Management | -### Milestone 2 — Decentralized real-time communication base on matrix  +### Milestone 2 — Decentralized real-time communication base on matrix - **Estimated duration:** 1 month - **FTE:** 1 FTE diff --git a/applications/index.md b/applications/index.md index 704305d40aa..5fa4cbfcf6a 100644 --- a/applications/index.md +++ b/applications/index.md @@ -72,7 +72,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [OmniBTC](https://omnibtc.finance/) | [Polkadot Smart Chain](psc.md) | [GitHub](https://github.com/OmniBTC/PSC) | ☐ | ☒ | ☒ | | [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☒ | ☒ | | [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | -| [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☐ | ☒ | ☐ | +| [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☒ | ☒ | ☐ | | [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☒ | ☒ | | [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☒ | | [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☒ | ☐ | From 887d0c1d57ddf7c59e80771b34297f89c2f18884 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Tue, 9 May 2023 15:31:00 +0200 Subject: [PATCH 380/578] Update README.md Fix icons --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b8c682a7303..2ce4d02331e 100644 --- a/README.md +++ b/README.md @@ -259,7 +259,7 @@ It is **not** a chance to pitch your project, especially since only a small subs
-| | | | | | | +| | | | | | | | :-: | :-: | :-: | :-: | :-: | :-: | | [W3F Website](https://web3.foundation) | [W3F Twitter](https://twitter.com/web3foundation) | [W3F Medium](https://medium.com/web3foundation) | [Polkadot Wiki](https://wiki.polkadot.network/en/) | [Web 3.0 Reddit](https://www.reddit.com/r/web3) | [W3F YouTube](https://www.youtube.com/channel/UClnw_bcNg4CAzF772qEtq4g) | From fdf169d94365472533f419e337cc05f65cb564b3 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Tue, 9 May 2023 15:37:44 +0200 Subject: [PATCH 381/578] Remove reddit --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 2ce4d02331e..909cb59da8a 100644 --- a/README.md +++ b/README.md @@ -259,9 +259,9 @@ It is **not** a chance to pitch your project, especially since only a small subs
-| | | | | | | -| :-: | :-: | :-: | :-: | :-: | :-: | -| [W3F Website](https://web3.foundation) | [W3F Twitter](https://twitter.com/web3foundation) | [W3F Medium](https://medium.com/web3foundation) | [Polkadot Wiki](https://wiki.polkadot.network/en/) | [Web 3.0 Reddit](https://www.reddit.com/r/web3) | [W3F YouTube](https://www.youtube.com/channel/UClnw_bcNg4CAzF772qEtq4g) | +| | | | | | +| :-: | :-: | :-: | :-: | :-: | +| [W3F Website](https://web3.foundation) | [W3F Twitter](https://twitter.com/web3foundation) | [W3F Medium](https://medium.com/web3foundation) | [Polkadot Wiki](https://wiki.polkadot.network/en/) | [W3F YouTube](https://www.youtube.com/channel/UClnw_bcNg4CAzF772qEtq4g) |
From 80f0b3a28193d5a4ddecd99de18afe153b050993 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Tue, 9 May 2023 15:39:39 +0200 Subject: [PATCH 382/578] remove reddit --- docs/help.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/help.md b/docs/help.md index fcd26c13545..8653fe7dc12 100644 --- a/docs/help.md +++ b/docs/help.md @@ -36,8 +36,8 @@ It is **not** a chance to pitch your project, especially since only a small subs
-| | | | | | | -| :-: | :-: | :-: | :-: | :-: | :-: | -| [W3F Website](https://web3.foundation) | [W3F Twitter](https://twitter.com/web3foundation) | [W3F Medium](https://medium.com/web3foundation) | [Polkadot Wiki](https://wiki.polkadot.network/en/) | [Web 3.0 Reddit](https://www.reddit.com/r/web3) | [W3F YouTube](https://www.youtube.com/channel/UClnw_bcNg4CAzF772qEtq4g) | +| | | | | | +| :-: | :-: | :-: | :-: | :-: | +| [W3F Website](https://web3.foundation) | [W3F Twitter](https://twitter.com/web3foundation) | [W3F Medium](https://medium.com/web3foundation) | [Polkadot Wiki](https://wiki.polkadot.network/en/) | [W3F YouTube](https://www.youtube.com/channel/UClnw_bcNg4CAzF772qEtq4g) |
From 12e32b29a3e053360f4922dc99067dba7a8d7e3b Mon Sep 17 00:00:00 2001 From: Ed Anderson <36516131+eca20@users.noreply.github.com> Date: Tue, 9 May 2023 11:16:13 -0400 Subject: [PATCH 383/578] add blockchainia.md (#1562) * Create blockchainia.md * revisions first round of updates/refinements * pr comments updated pr comments, payout entity * pr updates, change to payment address (TBD) * updated Matt Github URL * misc pr updates * large overhaul of application * updates to similar projects * moved section * added diagram image * architecture updates * Update blockchainia.md * update FTE estimate * added payment address --- applications/blockchainia.md | 151 +++++++++++++++++++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 applications/blockchainia.md diff --git a/applications/blockchainia.md b/applications/blockchainia.md new file mode 100644 index 00000000000..2fb4338c8d6 --- /dev/null +++ b/applications/blockchainia.md @@ -0,0 +1,151 @@ +# Blockchainia + +- **Team Name:** Blockchainia +- **Payment Address:** 0xf246aede3d892234b52c9bb6f246ab0ac8c0491d (DAI) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview + +### Overview + + Blockchainia delivers the benefits of digital ownership straight to gamers fingertips. Our infrastructure will enable developers to create games for gamers that decide to take ownership of their digital achievements. The Blockchainia library of pallets enables affordable pay-to-play games that forever immortalize gamings greatest moments on-chain. As an eventual competitive gaming metaverse, Blockchaina's ecosystem includes a community hosted online multiplayer infrastructure including a game engine that will interact directly with our gamechain for user moderated online gaming. + +Our Milestone 1 open-source pallets will enable: +- a web based online multiplayer PvPvE first-person shooter (Player vs Player vs Environment (AI) Enemy) +- the engine that drives interactions between server and client +- a leader board that aggregates in-game earned on-chain statistics by week, month, and year. + - air dropped NFTs earned by completing in game tasks and leader board achievements + - environment enemies spawned from on-chain NFT assets that funnel spoils back to its owner's wallet + - a player prompt to create a wallet upon exit or completion + - community driven DAO that manages the online server infrastructure + +Future milestones will include updates to: +- an evolving and expanding list of features through our open-source substrate pallet library +- Two games that use our pallets to share in game items between them + - an evolving JRPG that explains our gamechains "lore" + - an evolving arcade style online multiplayer PvPvE + +While there are other gaming projects in the ecosystem, ours differs in various ways. First, we will break the stigma gamers associate with NFTs through a fun JRPG. Non-playable character "blocks" will explain their purpose as well as the metaverse they inhabit in their on-chain existence. However, not all is as it seems in the troubled world of Blockchainia. Players will make their way through seasonally released updates to uncover the deep lore, rescue these NPC blocks, and discover the fun that digital ownership brings to the future of gaming. The items and experience earned in this JRPG will be stored on-chain to the users wallet and available in our arcade PvPvE. We have acquired the URL Blockchainia.gg as the landing page for both of these games. + +Other similar projects in the ecosystem are Ajuna and Bajun. We plan to build off of Ajuna's Layer 1 solution, and expand on their layer 2 and 3 solutions with our own side chain. + + We differ in that we have the behavioral and marketing background to rapidly onboard users, as well as a product that can create a niche for itself in currently over-saturated market. Mark Zuckerberg tried and failed to create a metaverse with endless resources because he fails to realize the human utility of the technology of his time. We have the right team and the right vision to bring the metaverse to fruition, through a fair and economical value proposition that helped NBA Jam (Midway Games) earn 1 billion dollars to Jurassic Park's (Amblin Entertainment) 395 million in 1993, in quarters (.25USD). We believe we can minimize the cost to consumers by operating our sidechain at the lowest cost possible while allowing a DAO driven public server community to earn a reasonable fee for hosting the online multiplayer infrastructure of the games in our ecosystem. This fee will eventually approach a real market value which will add value to the various fungible tokens used throughout the ecosystem. + +We will create free-to-use Unity assets that compliment our tech stack to allow independent developers to duplicate our model and optionally distribute their games via our distribution architecture or use our reputation based, community moderated online-multiplayer infrastructure. + +## Project Details + +### Architecture Diagram +![Blockchainia Architecture](https://github.com/eca20/Blockchainia-Pitch/blob/main/blockchainiadiagram.jpg?raw=true?raw=true "Blockchainia Architecture") + +#### Technologies Used + +- Rust +- Substrate +- ink! Smart Contracts +- Node.js Front End +- C# +- Unity +- Adobe Creative Suite +- Blender + +### Ecosystem Fit + +Our target audience includes game developers and gamers. Our initial target will focus on indie gamers who would like to remove the overhead realized by releasing their games through traditional distribution channels. Using our infrastructure, developers can release their game free-to-try. Developers will release an NFT collection of playable characters at the same time which grants players full access to decentralized features that will change the way gamers think about the accomplishments and items they earn in game. + +To do this, we will create or modify many existing parts of the Polkadot ecosystem, including browser wallets, chain browsers, and our own parachain optimized for handling real-time game events as on-chain transactions. Our project will have a touch point on almost all levels of the Polkadot stack. + +In future updates, we plan to develop a decentralized means of distribution that allows game developers to release directly to consumers. Our DAO-driven community will engage with developers and provide valuable feedback on desired features, games, and the direction of Blockchainia as a whole. + + +## Team + +### Team members + +- Ed Anderson (eca20@pitt.edu) +- Will Chastka (wchastka@tepper.cmu.edu) +- Matt Dennis (oopmatt@gmail.com) + +### Contact + +- **Contact Name:** Ed Anderson +- **Contact Email:** eca20@pitt.edu +- **Website:** https://github.com/eca20 + +### Legal Structure + +- **Registered Address:** 502 W 7th St, Suite 100, Erie, PA 16502 +- **Registered Legal Entity:** Blockchainia LLC + +### Team's experience + +#### Ed Anderson +Ed has three years of software engineering experience developing and renovating the full stack of an enterprise scale system. He holds a B.S. in Computer Science from the University of Pittsburgh, where his Capstone requirement included implementing a MVP token concept, PittCoin, which relied on a bounty-program to connect students to community-sourced homework solutions, the tokens earned from which could be exchanged for extra credit from their professors. He also has five years of experience as the creator and manager of the Katz Business Research Center, during which he oversaw the implementation and successful completion of over one thousand market research and consumer behavior studies and focus groups. + +#### Matt Dennis +Matt is an entrepreneur with over 10 years of sales and operational experience in the Computer Security and Blockchain industry. He holds a B.S. in Computer Forensics and Information Security, and as certifications in multiple levels of the web3 tech stack. + +#### Will Chastka +Will has a passion for gaming, ever since his first gaming console, a sega Saturn, playing virtual fighter 2 and Shinobi Legends, to Starcraft and DOTA. His passion for crypto extends decentralized finance, gaming, and many other applications. He previously held position as Community and Marketing Manager for CryptoAquatics NFT project, and holds a Master's in Business administration from the University of Pittsburgh and a M.S. in Business Analytics from Carnegie Mellon University. + +We plan to leverage all of our experience and industry connections to build a heavily engaged community to gain market share through exploiting an emerging niche in the market with improved technology, our parachain. + +### Team Code Repos + +- https://github.com/eca20/Coursework/tree/main/PittCoin +- https://github.com/eca20/Coursework/tree/main/CS1699-Blockchain +- https://github.com/eca20/BlockchainiaJRPG +- https://github.com/eca20 +- https://github.com/oopmatt + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/edanderson4hire/ +- https://www.linkedin.com/in/wchastka/ + + +## Development Status +We have begun development on a server authoritative online multiplayer game engine that allows for a dedicated server to interact with a game client and perform the prediction and interpolation to reduce perceived latency enough to allow for a seamless game play experience. We will be adding these repositories below over the next few weeks. When the game is in its first "playable" state we will begin experimentation with Ajuna's service layer for our on chain interactions, building on top of their service layer to implement our custom pallets and interact with a custom game chain. + + +- https://github.com/eca20/BlockchainiaJRPG +- https://github.com/eca20/SubstratePlayGround +- https://github.com/eca20/Blockchainia-Pitch + + + Development Roadmap :nut_and_bolt: + + ### Overview + + - **Total Estimated Duration:** Continuous + - **Full-Time Equivalent (FTE):** 2 + - **Total Costs:** $25,000 + + ### Milestone 1 — Basic MVP + + - **Estimated duration:** 15 weeks development + - **FTE:** 1 FTE + - **Costs:** $25,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 / GPLv3 / MIT / Unlicense | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works. This project also includes creating documentation to will allow our community to test and involve themselves in our multiplayer gaming infrastructure. We hope to receive and respond to feedback on this community documentation in Milestone 2.| +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. Unit tests will be written for relevant game server functionality. Unit tests will be written for the DeathToll pallet. In each guide (in each project's Github repo), we will describe how to run these tests. Manual integration testing will be through in-game functionality (i.e, Given an enemy is eliminated on server, the proper state functions are executed on chain, and the leader board updates through the in-game chain browser) | +| **0d.** | Docker | We will provide Dockerfiles that can be used to run and test all the functionality delivered with this milestone. This will include a deployable "Full Node" that encases both a game server and substrate node. These will interact with our game client and substrate parachain respectively. A successful MVP will allow a game client to register events on the game server (Server-Authoritative model), which is then written to the parachain ledger. Upon completion of the initial game "level", an "accolade" NFT will be deposited via ink! smart contract to the wallet that completed the required in-game tasks. | +| 1. | Substrate module: Game Engine Events | The Game Events Substrate module will contain functionality for asynchronously administering the the match between the game server and blockchain node. It is likely that we will break this into multiple pallets, one for core gaming functionality, and one specific to the needs of the DeathToll game-type. The initial pallet features include functionality to create, administer, and write the outcome of a match to the chain, updating the wallets of all players with their earned experience (which is key to the economy of Blockchainia). This module will work on top of Ajuna's service layer to aggregate and marshall game state information relevant to tracked leader board statistics and write to chain. These events will include in game events like player eliminations, deaths, attacks attempted/missed, wins, and other in-game achievements in our continuously expanding list of features. Eventually, this list of configurable features will allow a server owner to run game types similar to those seen in other first-person shooters, like death match, hostage rescue, and capture the flag. The configurable nature of our servers will allow our community to self-explore and find a region of our community that suits their personal play style and temperament. +| 2. | Unity Game Engine and Configurable Server/Client | We will embed our substrate based chain interactions into our game engine. While the game client and server communicate to drive game play, the game server will also publish certain events to the game chain via Ajuna's Service layer. Each of these processes will initially be deployable via docker container. The game server architecture will operate from a community driven DAO implemented with existing society and membership pallets available in the Substrate store. The value in the deliverable for the game/server lies in its online multiplayer architecture. We will use a server authoritative model embedded with our web3 backend via the substrate modules created in deliverable 1. We will layer these on top and alongside services provided by Ajuna to interact with our game chain. To start a match, the server must request that a "match" be created on chain via ink! smart contract after collecting a nominal fee from connected players. The server will also request the information necessary to spawn environment enemies in the game map from owned NFTs on chain at random. Lastly, players will spawn and game play will begin. In game events, such as when a player eliminates another player or environment enemy, will be written to chain. These streams of game commands which make up the packets sent by the client to the server are used to compensate for latency with methods like prediction and interpolation. Our engine will be similar to that used in Quake (id Software, Microsoft) and Half-Life (Valve, Sierra Studios), using various methods to compensate for latency and ensure a pleasant user experience, the key difference being that interactions leading to specific events will be logged to the chain. With this advancement in technology, Blockchainia will redefine how streamers and creators interact with their followers, and re-imagine how games can interact with a player. Gamings greatest moments will be immortalized on chain, allowing players the chance to engrave their accomplishments on web3's Stanley Cup, our eternal sliding time window leader board. Milestone 1 begins with a simple MVP to onboard users and test our engine before expanding on our functionality and appealing to a broader market. We will receive community feedback on how to fairly and equitably handle situations including server crashes and moderation of hacking and toxicity. This will lead to a code of conduct in deliverable 2 as we expand our features to include a map and item builder, as well as a strong in-game economy. We will also expand on a configurable set of features that affords future web3 game developers to configure our engine for their own games and expand on its features. +| 3. | Unity Assets | Besides the NFT playable characters released in our games collections, all assets created by our team will be released free to use by other developers who would like to use our ecosystem to create their own games and mods. These will include wall and floor textures, doors, environment enemies, and other sprites used throughout our games. + +## Future Plans +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 1. | Oculus VR Port | We plan to port our PvPvE and JRPG to Oculus VR. This will be used to expand into a metaverse of gamers, lead by a community of streamers and industry leaders who moderate their servers and influence the direction of our development team through their position in our community DAO. +| 2. | Front End Expansion| Our initial browser will be embedded into the game client itself. We plan to expand this to an iOS and Android apps for viewing leader boards, displaying accomplishments, and trading collectibles. +| 3. | Community Expansion| Users who are invited to the DAO will be encouraged to run their own reputable server/node to grow their community and earn money from the pay-to-play architecture. Owners will create a hierarchy of moderators called "admins" that will ensure fair, fun, and competitive game play throughout our ecosystem. Owners/Servers who do not fulfill their commitments to the greater community will have their influence slashed. +| 4. | Automate integration testing | Automated integration tests for all game server/blockchain interactions. +| 5. | Substrate module: DeathToll Game Events Expansion| We will add new features to the DeathToll Game Events Substrate module in seasonal updates. The features added will be driven in part by the community that plays the game, in the form of the DAO created during Milestone + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Web3 Foundation Website / LinkedIn \ No newline at end of file From 9e2f0bcaf73dcf3d3a53a1227be78e9e650bf58a Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 9 May 2023 17:24:43 +0200 Subject: [PATCH 384/578] Update index.md Add Blockchainia --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 5fa4cbfcf6a..9bef87ae441 100644 --- a/applications/index.md +++ b/applications/index.md @@ -53,6 +53,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Profond.ai](https://www.profond.ai/) | [Profond](./Profond.md) | [GitHub](https://github.com/emarai) | ☐ | ☐ | ☐ | | [727.ventures](https://727.ventures) | [Patron](./patron.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | | [Supercomputing Systems AG](https://www.scs.ch) | [SARP - A Static Analysis Tool for Runtime Pallets](./sarp-basic-functionality.md) | [GitHub](https://github.com/scs) | ☐ | ☐ | ☐ | +| [Ed Anderson](https://github.com/eca20) | [Blockchainia](./blockchainia.md) | [GitHub](https://github.com/eca20) | ☐ | ☐ | ☐ | [🔝](#menu) From 0a31dc71df1d9f0c1dbaeb3b7c5927de06684a02 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Wed, 10 May 2023 14:59:42 -0400 Subject: [PATCH 385/578] Update index.md (#1732) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 9bef87ae441..403711f9cb6 100644 --- a/applications/index.md +++ b/applications/index.md @@ -65,7 +65,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Deep Ink Ventures GmbH](http://deep-ink.ventures/) | [GenesisDAO](GenesisDAO.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☒ | ☐ | | [ArtZero](https://artzero.io/) | [ArtZero & InkWhale](ArtZero_InkWhale.md) | [GitHub](https://github.com/artzero-io) | ☐ | ☒ | ☐ | | [EightFish](https://github.com/eightfish-org/eightfish) | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☒ | ☐ | -| [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☒ | ☐ | +| [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☒ | ☒ | | [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☒ | ☐ | | [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | | [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☒ | ☐ | From b5312dd0b76552234ff397d21b92d4b7f9782f91 Mon Sep 17 00:00:00 2001 From: valeriacaracciolo <71491710+valeriacaracciolo@users.noreply.github.com> Date: Wed, 10 May 2023 16:04:18 -0300 Subject: [PATCH 386/578] ScoutCoinFabrik: Milestone 2 (#1666) * Added ScoutCoinFabrik_2.md * Updated Milestone Number and Descriptions * Updated payment token --- applications/ScoutCoinFabrik_2.md | 116 ++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 applications/ScoutCoinFabrik_2.md diff --git a/applications/ScoutCoinFabrik_2.md b/applications/ScoutCoinFabrik_2.md new file mode 100644 index 00000000000..507e6a558c3 --- /dev/null +++ b/applications/ScoutCoinFabrik_2.md @@ -0,0 +1,116 @@ +# Scout CoinFabrik +- **Team Name:** CoinFabrik (Nektra S.A) +- **Payment Address:** 0xf488039EDe6B38D7689fDCC6A9FC2dd0EF39D54e (USDC) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +### Overview + +Scout: Security Analysis Tool + +We are building an extensible open-source tool (or set of tools) to assist ink! smart contract developers detect common security issues and deviations from best practices. To improve coverage and precision, we will persist in research efforts on static and dynamic analysis techniques. + +This tool will help developers write secure and more robust smart contracts. + +Our interest in this project comes from our experience in manual auditing and our usage of comparable tools in other blockchains. + + +### Project Details + +We have already conducted research work with the University of Buenos Aires to better comprehend the current status of analysis tools built for Rust, while foreseeing different lines of development. + +We are currently working on tools to assist developers to apply best practices and to identify possible vulnerabilities. + +### Ecosystem Fit + +We believe we can bring value to the Polkadot / Kusama community by offering a tool to detect security bugs from a development perspective. By including this tool in their toolchain, ink! developers will be assisted to remove bugs in their code, raising the quality and security of their smart contracts. + +## Team :busts_in_silhouette: + +### Team members + +- Ariel Wassbein, Head of Reaseach +- Valeria Caracciolo, Business Develpoment +- CoinFabrik's development and auditing team - when required. + +### Contact + +- **Contact Name:** Valeria Caracciolo +- **Contact Email:** valeria.caracciolo@coinfabrik.com +- **Website:** https://www.coinfabrik.com/ + +### Legal Structure + +- **Registered Address:** Dr. Emilio Ravignani 2394, C1425 CABA, Argentina +- **Registered Legal Entity:** Nektra S.A. + +### Team's experience +We are a research and development company specialized in Web3, with a strong background in cybersecurity. Founded in 2014, we have worked on over 180 blockchain-related projects, EVM based and also for Solana, Algorand, and Polkadot. Beyond development, we offer security audits through a dedicated in-house team of senior cybersecurity professionals, currently working on code in Substrate, Solidity, Clarity, Rust, and TEAL. + +Our team has an academic background in computer science and mathematics, with work experience focused on cybersecurity and software development, including academic publications, patents turned into products, and conference presentations. Furthermore, we have an ongoing collaboration on knowledge transfer and open-source projects with the University of Buenos Aires. + +### Team Code Repos + +- https://github.com/CoinFabrik/web3-grant +- https://gitlab.com/coinfabrik-private/data/frecuencia-de-vulnerabilidades +- https://drive.google.com/drive/u/1/folders/1HoaL6EXX1Wky7e1SHYBY6oIZDGK2sgDD + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/arielwaissbein/ +- https://www.linkedin.com/in/valeriacaracciolo/ + + +## Development Status :open_book: + +We have been working on different aspects of the tool: +- Research on security analysis tools for Rust-based blockchains, applicable to ink! Smart contracts +- Listing common vulnerabilities, best practices, and enhancements related to smart contracts written in ink! +- Producing code examples and snippets of smart contracts showing the mentioned issues. +- Built a PoC (proof of concept) of a tool that identifies relevant security issues. + +We briefly validated the idea of the development described in this application with David Hawig and Bhargav Bhatt from Web3 Foundation, who encourage us to apply for this grant. + +We have finished the first milestone of this project ([Milestone 1 of ScoutCoinFabrik PoC](https://github.com/w3f/Grants-Program/blob/master/applications/ScoutCoinFabrik.md#milestone-1-proof-of-concept)), accomplishing all the deliverables listed in the milestone table. + +Please note, however, that this milestone is the second grant associated with the same project: [ScoutCoinFabrik](https://github.com/CoinFabrik/web3-grant). The first grant focused on the tool’s PoC, and in this second grant we aim to develop a prototype. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 5 weeks +- **Full-Time Equivalent (FTE):** 5 FTE +- **Total Costs:** 30,000 USD + +### Milestone 1: Prototype + +- **Estimated duration:** 5 weeks +- **FTE:** 5 +- **Costs:** 30,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | MIT | +| 0b. | Documentation | Documentation hosted on a separate webpage. | +| 0c. | Testing | Integration testing. Specific tests for every linting detector based on code examples and snippets of smart contracts. | +| 0d. | Docker | Does not apply at this stage. | +| 0e. | Article | We will upload a report summary to our blog. | + **1.a** | Research and Development | Vulnerability examples. In addition to the [examples developed in Milestone 1 of ScoutCoinFabrik PoC](https://github.com/w3f/Grants-Program/blob/master/applications/ScoutCoinFabrik.md#milestone-1-proof-of-concept), we will develop more code examples and snippets of vulnerabilities, best practices, and enhancements related to smart contracts written in ink!. | + **1.b** | Research and Development | Further example versions of [vulnerabilities developed in Milestone 1 of ScoutCoinFabrik PoC](https://github.com/CoinFabrik/web3-grant/tree/main/vulnerabilities). This step is geared to provide a wider set of examples, therefore improving our ability to measure the precision of our prototype and any other ink! vulnerability detection tool. | + **2.a** | Development | Building a prototype that improves over the [development of Milestone 1 of ScoutCoinFabrik PoC](https://github.com/w3f/Grants-Program/blob/master/applications/ScoutCoinFabrik.md#milestone-1-proof-of-concept), detecting more classes of vulnerabilities and improving in precision on existing detectors. We are to build a prototype that can analyze Rust code to detect vulnerabilities in ink! smart contracts and possibly in pallets and other pieces of code. This builds over [this proof-of-concept tool](https://github.com/CoinFabrik/web3-grant) we've built and [delivered as part of a grant for the web3 foundation](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/deliveries/ScoutCoinFabrik-1.md) by:
a) Moving from a proof-of-concept (PoC) tool to a robust tool that integrates with a popular IDE (VSCode), includes a CLI, etc,
b) We will improve on the precision of the detectors we included in the PoC reducing the rate of false positives, and
c) We will add more detectors in order to have a reasonable coverage of the relevant security vulnerabilities that happen in smart contracts. | + **2.b** | Development | Command line interface for the prototype. For this prototype, we want to develop a simple command line interface like the one used in other static analyzers from other blockchains (eg: [Slither](https://github.com/crytic/slither), [Rustle](https://github.com/blocksecteam/rustle)).
In particular, we will develop the possibility to run the prototype on smart contract files or directories.
The base command will be: `cargo scout file_name.rs`
We will also include options for running subsets of detectors and triggering errors for CI/CD workflows. | + **2.c** | Development | VSCode integration for the prototype. Our VSCode development will list security issues, highlight issues with squiggles and hover-over descriptions. We will seek compatibility of this development with other relevant ink! extensions such as [Ink! Analyzer](https://w3f.github.io/Grants-Program/applications/ink-analyzer#future-plans). | + **3** | Evaluation | Prototype validation against a selection of projects deployed on testnet or mainnet in order to evaluate detector precision. Evaluation report and detector improvement. | + + +## Future Plans + +(Our original plan was to apply for a 3 milestones grant, to reach a public release of the tool. But we were advised to apply for a shorter objective) After completing the PoC in our first milestone (Milestone #1), we are now applying for this second milestone to reach a tool prototype (Milestone #2). We envison a third milestone together with a public release (Milestone #3). Our mission is to continue to work on improving automated and assisted tools for finding security vulnerabilities and writing more secure code. Our objective is to help the Polkadot / Kusama community produce better and more secure code with these tools. + +## Referral Program (optional) :moneybag: + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Richard Casey from Parity brought this program to our attention. Our inquiries were addressed by David Hawig and Bhargav Bhatt, who also gently advised us on this presentation. From 429dab2d67972827c94fd4c928f3bcc14c841f1f Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 10 May 2023 21:07:34 +0200 Subject: [PATCH 387/578] Update index.md ScoutCoinFabrik: Milestone 2 --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 403711f9cb6..516a90a3c3e 100644 --- a/applications/index.md +++ b/applications/index.md @@ -54,6 +54,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [727.ventures](https://727.ventures) | [Patron](./patron.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | | [Supercomputing Systems AG](https://www.scs.ch) | [SARP - A Static Analysis Tool for Runtime Pallets](./sarp-basic-functionality.md) | [GitHub](https://github.com/scs) | ☐ | ☐ | ☐ | | [Ed Anderson](https://github.com/eca20) | [Blockchainia](./blockchainia.md) | [GitHub](https://github.com/eca20) | ☐ | ☐ | ☐ | +| [CoinFabrik](https://www.coinfabrik.com/) | [ScoutCoinFabrik: Milestone 2](ScoutCoinFabrik_2.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | [🔝](#menu) From 803c3909c0fcadb23d08120f4b95909e11c41d14 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Wed, 10 May 2023 21:16:09 +0200 Subject: [PATCH 388/578] Fix website --- applications/ScoutCoinFabrik_2.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/applications/ScoutCoinFabrik_2.md b/applications/ScoutCoinFabrik_2.md index 507e6a558c3..f627032e0a1 100644 --- a/applications/ScoutCoinFabrik_2.md +++ b/applications/ScoutCoinFabrik_2.md @@ -99,8 +99,8 @@ Please note, however, that this milestone is the second grant associated with th | 0e. | Article | We will upload a report summary to our blog. | **1.a** | Research and Development | Vulnerability examples. In addition to the [examples developed in Milestone 1 of ScoutCoinFabrik PoC](https://github.com/w3f/Grants-Program/blob/master/applications/ScoutCoinFabrik.md#milestone-1-proof-of-concept), we will develop more code examples and snippets of vulnerabilities, best practices, and enhancements related to smart contracts written in ink!. | **1.b** | Research and Development | Further example versions of [vulnerabilities developed in Milestone 1 of ScoutCoinFabrik PoC](https://github.com/CoinFabrik/web3-grant/tree/main/vulnerabilities). This step is geared to provide a wider set of examples, therefore improving our ability to measure the precision of our prototype and any other ink! vulnerability detection tool. | - **2.a** | Development | Building a prototype that improves over the [development of Milestone 1 of ScoutCoinFabrik PoC](https://github.com/w3f/Grants-Program/blob/master/applications/ScoutCoinFabrik.md#milestone-1-proof-of-concept), detecting more classes of vulnerabilities and improving in precision on existing detectors. We are to build a prototype that can analyze Rust code to detect vulnerabilities in ink! smart contracts and possibly in pallets and other pieces of code. This builds over [this proof-of-concept tool](https://github.com/CoinFabrik/web3-grant) we've built and [delivered as part of a grant for the web3 foundation](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/deliveries/ScoutCoinFabrik-1.md) by:
a) Moving from a proof-of-concept (PoC) tool to a robust tool that integrates with a popular IDE (VSCode), includes a CLI, etc,
b) We will improve on the precision of the detectors we included in the PoC reducing the rate of false positives, and
c) We will add more detectors in order to have a reasonable coverage of the relevant security vulnerabilities that happen in smart contracts. | - **2.b** | Development | Command line interface for the prototype. For this prototype, we want to develop a simple command line interface like the one used in other static analyzers from other blockchains (eg: [Slither](https://github.com/crytic/slither), [Rustle](https://github.com/blocksecteam/rustle)).
In particular, we will develop the possibility to run the prototype on smart contract files or directories.
The base command will be: `cargo scout file_name.rs`
We will also include options for running subsets of detectors and triggering errors for CI/CD workflows. | + **2.a** | Development | Building a prototype that improves over the [development of Milestone 1 of ScoutCoinFabrik PoC](https://github.com/w3f/Grants-Program/blob/master/applications/ScoutCoinFabrik.md#milestone-1-proof-of-concept), detecting more classes of vulnerabilities and improving in precision on existing detectors. We are to build a prototype that can analyze Rust code to detect vulnerabilities in ink! smart contracts and possibly in pallets and other pieces of code. This builds over [this proof-of-concept tool](https://github.com/CoinFabrik/web3-grant) we've built and [delivered as part of a grant for the web3 foundation](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/deliveries/ScoutCoinFabrik-1.md) by:
a) Moving from a proof-of-concept (PoC) tool to a robust tool that integrates with a popular IDE (VSCode), includes a CLI, etc,
b) We will improve on the precision of the detectors we included in the PoC reducing the rate of false positives, and
c) We will add more detectors in order to have a reasonable coverage of the relevant security vulnerabilities that happen in smart contracts. | + **2.b** | Development | Command line interface for the prototype. For this prototype, we want to develop a simple command line interface like the one used in other static analyzers from other blockchains (eg: [Slither](https://github.com/crytic/slither), [Rustle](https://github.com/blocksecteam/rustle)).
In particular, we will develop the possibility to run the prototype on smart contract files or directories.
The base command will be: `cargo scout file_name.rs`
We will also include options for running subsets of detectors and triggering errors for CI/CD workflows. | **2.c** | Development | VSCode integration for the prototype. Our VSCode development will list security issues, highlight issues with squiggles and hover-over descriptions. We will seek compatibility of this development with other relevant ink! extensions such as [Ink! Analyzer](https://w3f.github.io/Grants-Program/applications/ink-analyzer#future-plans). | **3** | Evaluation | Prototype validation against a selection of projects deployed on testnet or mainnet in order to evaluate detector precision. Evaluation report and detector improvement. | From a3dc35e5083afd057783d8aaf28a9b104f9094b9 Mon Sep 17 00:00:00 2001 From: philpotisk <55081379+philpotisk@users.noreply.github.com> Date: Thu, 11 May 2023 11:05:11 +0200 Subject: [PATCH 389/578] Changed to FIAT payment option (#1730) --- applications/walt-id_nft-infra.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/walt-id_nft-infra.md b/applications/walt-id_nft-infra.md index 3e95e189958..3e41fb2688c 100644 --- a/applications/walt-id_nft-infra.md +++ b/applications/walt-id_nft-infra.md @@ -6,7 +6,7 @@ Any implementation that is EVM compatible (e.g. Moonriver or RMRK with EVM bridg - **Project Name:** NFT infrastructure | by walt.id - **Team Name:** walt.id -- **Payment Address:** 0xa4c6c2013810661a6750443aEF86cFeAc983e07f (USDC) +- **Payment Address:** Fiat (Mail: May 10, 2023, 8:55 AM) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 ## Project Overview :page_facing_up: From cba23df73ab5f7e2bdaa67723b672b3f3c9bab75 Mon Sep 17 00:00:00 2001 From: Doordashcon Date: Thu, 11 May 2023 14:26:16 +0100 Subject: [PATCH 390/578] Interoperable State Machine Protocol (#1645) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * initial * add publications * adds image and deliverables * add request image * update deliverables * adds milestones * formatting * more formatting * milestone completion & fix typos * overview & furture plans * treasury * cumulus requirement already met (#3) * add use-case section * update TED * Update applications/ismp.md Co-authored-by: Sebastian Müller --------- Co-authored-by: Seun Lanlege Co-authored-by: Sebastian Müller --- applications/ismp.md | 184 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 184 insertions(+) create mode 100644 applications/ismp.md diff --git a/applications/ismp.md b/applications/ismp.md new file mode 100644 index 00000000000..dc8cf22520f --- /dev/null +++ b/applications/ismp.md @@ -0,0 +1,184 @@ +# Interoperable State Machine Protocol + +- **Team Name:** Polytope Labs +- **Payment Address:** 0x486cbad2d704bc76f8d0cdda6aa93c94d53297b9 (Ethereum DAI) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 3 + +## Project Overview :page_facing_up: + +### Overview +The Interoperable State Machine Protocol, or ISMP for short, is the product of our [research](https://research.polytope.technology/state-(machine)-proofs) into state proofs. We show that state-proof based interoperability is possible and more efficient as the messages no longer need to be routed through the relay chain and can be exchanged independent of it, while still maintaining the same level of trustlessness and security. This protocol allows not just for messaging but also [state reads of other parachains](https://github.com/paritytech/polkadot/issues/5087) in a trustless and secure manner. + +Unfortunately, Parachain-to-Parachain communication today relies on the relay chain for message routing. This is highly inefficient and relieving the relay chain of this burden will allow for better Parachain throughput and scalability. We believe ISMP is the end-game for parachain interoperability, with the relevant ISMP modules, each parachain can send and receive messages and assets to and from other parachains which also have the ISMP modules. Seconded by Rob Habermeier on [twitter](https://twitter.com/rphmeier/status/1631448117634650114). + +## Project Details + +ISMP is a simple protocol for state machines to send requests that can be handled by a counterparty chain. Akin to the HTTP paradigm in web2, parachains can issue GET-like requests for storage reads as well as POST-like requests for sending data. + +Requests are stored in a [merkle mountain range tree](https://research.polytope.technology/merkle-mountain-range-multi-proofs) on the sending chain as this data structure provides some benefits, binary merkle trees have more compact proof sizes than patricia merkle tries, and in particular, merkle mountain range trees have much smaller proof sizes for recently inserted items in the tree. We believe this choice will enable higher bandwidth parachain <> parachain messaging with smaller proof sizes. + +ISMP will also support request timeouts, allowing for more safer parachain <> parachain messaging. + +![Architecture](https://drive.google.com/uc?id=1t8Qow88En3-ZCW7P0LYjRnbSqzFS30be) + +### Use cases + +For instance a user wanting to transfer their funds from parachain A to parachain B will initiate a post request on parachain A. This post request is stored in an mmr maintained in the state trie on parachain A. Parachain A's headers also contain the root for this mmr structure. + +The user('s wallet) after observing that parachain A's headers have been finalized and made it's way into the relay chain state trie, can present a merkle proof of parachain A's header in the relay chain state trie which parachain B can verify using it's access to the latest relay chain state root. Next they present the mmr proof for the request which they had previously initiated on parachain A. After verifying this mmr proof, parachain B can "execute" the request. In this case minting the equivalent asset that was burnt on parachain A. + +There are of course other use cases that can be built on POST requests, but this is the simplest case. + +For GET requests, a different mechanism is at play. Perhaps a user wants to settle a bet they had made in a prediction market in parachain A. The data that is needed to settle this bet is on parachain B where we regard parachain B as the oracle parachain. The user initiates a GET request, with it's content the keys of the storage items they need to settle their bet. After initiating the request, the request is stored in the parachain A's mmr trie, but it is never relayed anywhere. Instead, the user('s wallet) then reads the state trie of parachain B and provides the state proof for the appropriate data that was requested. + + +### **`pallet-ismp`** +This serves as the foundational element for state-proof based messaging between parachains, enabling state reads of the relay chain directly from any given parachain, granting the ability to verify incoming messages and data from other parachains under the shared security umbrella of the relay chain. + +**Custom crates** + +- `ismp-rs` - A set of primitives necessary for pallet-ismp + - `ISMPHost`: Represents a state machine's core functionality + - `ISMPRouter`: Embodies the request and response routing logic for parachain interactions + - `ConsensusClient`: Logic for consensus proof verification + +This module can also serve as an alternative transport layer for XCM programs. + +### Ecosystem Fit + +Currently messages are sent over the Relay Chain through opening HRMP channels but through ISMP we can increase the bandwidth of messaging between parachains without burdening the relay chain with these messages. This allows the relay chain to focus on its main task: enforcing the validity of parachain state transitions. + +## Team :busts_in_silhouette: + +### Team members + +- Leads: Seun Lanlege, David Salami +- Members: Damilare Akinlose, Femi Bankole, Jesse Chejieh + +### Contact + +- **Contact Name:** Jesse Chejieh +- **Contact Email:** jesse@polytope.technology +- **Website:** [research.polytope.technology](https://research.polytope.technology/) + +### Legal Structure +- **Registered Address:** Harneys Fiduciary (Cayman) Limited, 4th Floor, Harbour Place, 103 South Church Street, Cayman Islands +- **Registered Legal Entity:** Polytope Labs Ltd. + +### Team's experience + +Polytope Labs is a collective of core blockchain engineers, researchers & scientists from varying blockchain protocol backgrounds passionate about the proliferation of networks over platforms and enabling this future through blockchain research, education, tooling and core infrastructure development. + +1. Seun Lanlege - Founder, Mad Scientist at Polytope Labs and [Polkadot Fellowship Member](https://github.com/polkadot-fellows/seeding/pull/33). Previously core developer at Parity Tech, Worked on Ethereum and Polkadot with over 4 years of industry experience. + +2. David Salami - Scientist at Polytope Labs and [Polkadot Fellowship Member](https://github.com/polkadot-fellows/seeding/pull/38). Previously Senior Blockchain Engineer at [Composable Finance](https://github.com/ComposableFi/) and [Webb](https://github.com/webb-tools). + +3. Damilare Akinlose - Lab Intern at Polytope Labs and [Polkadot Fellowship Member](https://github.com/polkadot-fellows/seeding/pull/41). Previously Blockchain Engineer at [Webb](https://github.com/webb-tools) + +4. Femi Bankole - Blockchain engineer at [Matchx_iot](https://matchx.io/) + [MXC Foundation](https://www.mxc.org/) and Lab Intern at Polytope Labs. + +5. Jesse Chejieh - [Polkadot Fellowship Member](https://github.com/polkadot-fellows/seeding/pull/25). + +### Research Publications + + - [Consensus Proofs](https://research.polytope.technology/consensus-proofs) + - [State (Machine) Proofs](https://research.polytope.technology/state-(machine)-proofs) + - [Merkle Mountain Range Proofs](https://research.polytope.technology/merkle-mountain-range-multi-proofs) + - [Merkle Multi Proofs](https://research.polytope.technology/merkle-multi-proofs) + +### Team Code Repos +- [sync-committee-rs](https://github.com/polytope-labs/sync-committee-rs) +- [Merkle Patricia Trie](https://github.com/polytope-labs/patricia-merkle-trie) +- [Solidity Merkle Trees](https://github.com/polytope-labs/solidity-merkle-trees) +- [Simnode](https://github.com/polytope-labs/sc-simnode) + + +### Team GitHub Profiles + +- [Seun Lanlege](https://github.com/seunlanlege/) +- [David Salami](https://github.com/Wizdave97/) +- [Damilare Akinlose](https://github.com/dharjeezy/) +- [Femi Bankole](https://github.com/iTranscend/) +- [Jesse Chejieh](https://github.com/Doordashcon/) + +### Team LinkedIn Profiles + +- [Seun Lanlege](https://www.linkedin.com/in/seunlanlege/) +- [David Salami](https://www.linkedin.com/in/david-salami-188aa8170) +- [Damilare Akinlose](https://www.linkedin.com/in/damilare-akinlose-6289b5b8) +- [Femi Bankole](https://www.linkedin.com/in/femibankole) +- [Jesse Chejieh](https://www.linkedin.com/in/jesse-chejieh-47020322a) + + +## Development Status :open_book: +State-proof based parachain messaging has been discussed on the [Polkadot Forum](https://forum.polkadot.network/t/state-proof-based-parachain-parachain-messaging/2214/4). + +And some Updates to cumulus, required for parachains to read the relay chain state has been [approved](https://github.com/paritytech/cumulus/pull/2268) + +## Development Roadmap :nut_and_bolt: + +### Overview +- **Total Estimated Duration:** 4.5 Months +- **Full-Time Equivalent (FTE):** 3 +- **Total Costs:** 75,000 USD + +### Milestone 1 — `ismp-rs` + +- **Estimated duration:** 1.5 months +- **FTE:** 3 +- **Costs:** 30,000 USD + +In this milestone we develop the core primitives needed for pallet-ismp + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a README stating objectives of this ISMP primitive on the project repository. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test functionalities delivered with this milestone. | +| 0e. | Article | We will publish an article that explains what was achieved as part of the grant. | +| 0f. | ISMP Specification | We will put together a technical specification detailing the ISMP protocol. | +| **1.** | `ismp-rs`| Rust implementation of ISMP primitives for handling incoming messages to and from connected parachains. | +| 1a. | `ISMPHost` | State machine host functionality required to support ISMP. | +| 1b. | `ISMPRouter` | Sub-component for routing incoming requests & response to the destination ISMP modules. | +| 1c. | `ISMPModule` | Interface modules/pallets must conform to in order to receive incoming ISMP requests/responses. | +| 1d. | `ConsensusClient` | Logic for consensus proof verification, In the case of parachains, we will leverage the relay chain as a `ConsensusClient` through the new host functions in cumulus. | +| | Request/Response proof verification | Sub-component for verifying membership of proofs of a request/response in a merkle mountain range tree. | +| | Request Timeout verification | Verifying non-membership of a request in the state trie of a parachain. | +| 1e. | Handlers | Logic for handling varying types of incoming messages. | +| | `CreateConsensusClient` | Functionality for creating a consensus client on the receiving state machine. | +| | `ConsensusMessage` | Functionality for handling consensus update messages from other state machines. | +| | `RequestMessage` | Functionality for handling request messages from other state machines. | +| | `ResponseMessage` | Functionality for handling response messages from other state machines. | +| | `TimeoutMessage` | Functionality for handling request timeout messages from other state machines. | + +### Milestone 2 — `pallet-ismp` + +- **Estimated duration:** 3 months +- **FTE:** 3 +- **Costs:** 45,000 USD + +In this milestone we develop pallet-ismp + + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a README stating objectives of this ISMP primitive on the project repository. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test functionalities delivered with this milestone. | +| **1.** | pallet-ismp | Building the substrate pallet with above stated dependencies. | +| **1b.** | Host | `ISMPHost` implementation for the pallet. | +| **1c.** | Router | `ISMPRouter` implementation for the pallet. | +| **1c.** | `ParachainConsensusClient` | `ConsensusClient` implementation for the pallet-ismp, utilizing the relay chain as consensus client for parachains. | +| **1d.** | RPC | This sub-crate will allow for users to query relevant ISMP data over RPC. | +| **1e.** | Runtime-APIs | This sub-crate will expose relevant ISMP data from the runtime through runtime APIS. | +| **1f.** | Benchmarks | We will benchmark pallet-ismp, providing a benchmark crate for parachain teams to run so as to generate the proper weights for their runtime. | + + +## Future Plans +We recognize the significant benefits that pallet-ismp offers to the ecosystem, and therefore, after the grant completion we plan to continue providing maintenance with support from the Polkadot/Kusama treasury. + +## Additional Information :heavy_plus_sign: + +[Solidity Trie Verifier](https://github.com/w3f/Grant-Milestone-Delivery/pull/774) From 4b6b60ad35c77dc6f07b7809097164384269fc35 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 11 May 2023 15:28:45 +0200 Subject: [PATCH 391/578] Update index.md Add Interoperable State Machine Protocol --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 516a90a3c3e..516874082b3 100644 --- a/applications/index.md +++ b/applications/index.md @@ -55,6 +55,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Supercomputing Systems AG](https://www.scs.ch) | [SARP - A Static Analysis Tool for Runtime Pallets](./sarp-basic-functionality.md) | [GitHub](https://github.com/scs) | ☐ | ☐ | ☐ | | [Ed Anderson](https://github.com/eca20) | [Blockchainia](./blockchainia.md) | [GitHub](https://github.com/eca20) | ☐ | ☐ | ☐ | | [CoinFabrik](https://www.coinfabrik.com/) | [ScoutCoinFabrik: Milestone 2](ScoutCoinFabrik_2.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | +| [Polytope Labs](https://research.polytope.technology/) | [Interoperable State Machine Protocol](ismp.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | [🔝](#menu) From 1874bec40a6a52a5d038ca4bb2ebc2b401dba6e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 11 May 2023 16:04:43 +0200 Subject: [PATCH 392/578] Fix website --- applications/ismp.md | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/applications/ismp.md b/applications/ismp.md index dc8cf22520f..89d61a5801b 100644 --- a/applications/ismp.md +++ b/applications/ismp.md @@ -7,6 +7,7 @@ ## Project Overview :page_facing_up: ### Overview + The Interoperable State Machine Protocol, or ISMP for short, is the product of our [research](https://research.polytope.technology/state-(machine)-proofs) into state proofs. We show that state-proof based interoperability is possible and more efficient as the messages no longer need to be routed through the relay chain and can be exchanged independent of it, while still maintaining the same level of trustlessness and security. This protocol allows not just for messaging but also [state reads of other parachains](https://github.com/paritytech/polkadot/issues/5087) in a trustless and secure manner. Unfortunately, Parachain-to-Parachain communication today relies on the relay chain for message routing. This is highly inefficient and relieving the relay chain of this burden will allow for better Parachain throughput and scalability. We believe ISMP is the end-game for parachain interoperability, with the relevant ISMP modules, each parachain can send and receive messages and assets to and from other parachains which also have the ISMP modules. Seconded by Rob Habermeier on [twitter](https://twitter.com/rphmeier/status/1631448117634650114). @@ -15,9 +16,9 @@ Unfortunately, Parachain-to-Parachain communication today relies on the relay ch ISMP is a simple protocol for state machines to send requests that can be handled by a counterparty chain. Akin to the HTTP paradigm in web2, parachains can issue GET-like requests for storage reads as well as POST-like requests for sending data. -Requests are stored in a [merkle mountain range tree](https://research.polytope.technology/merkle-mountain-range-multi-proofs) on the sending chain as this data structure provides some benefits, binary merkle trees have more compact proof sizes than patricia merkle tries, and in particular, merkle mountain range trees have much smaller proof sizes for recently inserted items in the tree. We believe this choice will enable higher bandwidth parachain <> parachain messaging with smaller proof sizes. +Requests are stored in a [merkle mountain range tree](https://research.polytope.technology/merkle-mountain-range-multi-proofs) on the sending chain as this data structure provides some benefits, binary merkle trees have more compact proof sizes than patricia merkle tries, and in particular, merkle mountain range trees have much smaller proof sizes for recently inserted items in the tree. We believe this choice will enable higher bandwidth parachain <> parachain messaging with smaller proof sizes. -ISMP will also support request timeouts, allowing for more safer parachain <> parachain messaging. +ISMP will also support request timeouts, allowing for more safer parachain <> parachain messaging. ![Architecture](https://drive.google.com/uc?id=1t8Qow88En3-ZCW7P0LYjRnbSqzFS30be) @@ -33,15 +34,16 @@ For GET requests, a different mechanism is at play. Perhaps a user wants to sett ### **`pallet-ismp`** + This serves as the foundational element for state-proof based messaging between parachains, enabling state reads of the relay chain directly from any given parachain, granting the ability to verify incoming messages and data from other parachains under the shared security umbrella of the relay chain. **Custom crates** -- `ismp-rs` - A set of primitives necessary for pallet-ismp - - `ISMPHost`: Represents a state machine's core functionality - - `ISMPRouter`: Embodies the request and response routing logic for parachain interactions - - `ConsensusClient`: Logic for consensus proof verification - +- `ismp-rs` - A set of primitives necessary for pallet-ismp + - `ISMPHost`: Represents a state machine's core functionality + - `ISMPRouter`: Embodies the request and response routing logic for parachain interactions + - `ConsensusClient`: Logic for consensus proof verification + This module can also serve as an alternative transport layer for XCM programs. ### Ecosystem Fit @@ -62,6 +64,7 @@ Currently messages are sent over the Relay Chain through opening HRMP channels b - **Website:** [research.polytope.technology](https://research.polytope.technology/) ### Legal Structure + - **Registered Address:** Harneys Fiduciary (Cayman) Limited, 4th Floor, Harbour Place, 103 South Church Street, Cayman Islands - **Registered Legal Entity:** Polytope Labs Ltd. @@ -81,12 +84,13 @@ Polytope Labs is a collective of core blockchain engineers, researchers & scient ### Research Publications - - [Consensus Proofs](https://research.polytope.technology/consensus-proofs) - - [State (Machine) Proofs](https://research.polytope.technology/state-(machine)-proofs) - - [Merkle Mountain Range Proofs](https://research.polytope.technology/merkle-mountain-range-multi-proofs) - - [Merkle Multi Proofs](https://research.polytope.technology/merkle-multi-proofs) +- [Consensus Proofs](https://research.polytope.technology/consensus-proofs) +- [State (Machine) Proofs](https://research.polytope.technology/state-(machine)-proofs) +- [Merkle Mountain Range Proofs](https://research.polytope.technology/merkle-mountain-range-multi-proofs) +- [Merkle Multi Proofs](https://research.polytope.technology/merkle-multi-proofs) ### Team Code Repos + - [sync-committee-rs](https://github.com/polytope-labs/sync-committee-rs) - [Merkle Patricia Trie](https://github.com/polytope-labs/patricia-merkle-trie) - [Solidity Merkle Trees](https://github.com/polytope-labs/solidity-merkle-trees) @@ -111,6 +115,7 @@ Polytope Labs is a collective of core blockchain engineers, researchers & scient ## Development Status :open_book: + State-proof based parachain messaging has been discussed on the [Polkadot Forum](https://forum.polkadot.network/t/state-proof-based-parachain-parachain-messaging/2214/4). And some Updates to cumulus, required for parachains to read the relay chain state has been [approved](https://github.com/paritytech/cumulus/pull/2268) @@ -118,6 +123,7 @@ And some Updates to cumulus, required for parachains to read the relay chain sta ## Development Roadmap :nut_and_bolt: ### Overview + - **Total Estimated Duration:** 4.5 Months - **Full-Time Equivalent (FTE):** 3 - **Total Costs:** 75,000 USD @@ -146,7 +152,7 @@ In this milestone we develop the core primitives needed for pallet-ismp | | Request/Response proof verification | Sub-component for verifying membership of proofs of a request/response in a merkle mountain range tree. | | | Request Timeout verification | Verifying non-membership of a request in the state trie of a parachain. | | 1e. | Handlers | Logic for handling varying types of incoming messages. | -| | `CreateConsensusClient` | Functionality for creating a consensus client on the receiving state machine. | +| | `CreateConsensusClient` | Functionality for creating a consensus client on the receiving state machine. | | | `ConsensusMessage` | Functionality for handling consensus update messages from other state machines. | | | `RequestMessage` | Functionality for handling request messages from other state machines. | | | `ResponseMessage` | Functionality for handling response messages from other state machines. | @@ -177,6 +183,7 @@ In this milestone we develop pallet-ismp ## Future Plans + We recognize the significant benefits that pallet-ismp offers to the ecosystem, and therefore, after the grant completion we plan to continue providing maintenance with support from the Polkadot/Kusama treasury. ## Additional Information :heavy_plus_sign: From fb2f51fad94c9b001ec207ef6259cf5222b34fda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 11 May 2023 16:07:47 +0200 Subject: [PATCH 393/578] Update index.md EightFish complete --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 516874082b3..651fc1d2354 100644 --- a/applications/index.md +++ b/applications/index.md @@ -66,7 +66,7 @@ Use this page for an overview of all public grants and their status. Use the sid | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------------------------------- | :--------- | :------------: | :--------: | | [Deep Ink Ventures GmbH](http://deep-ink.ventures/) | [GenesisDAO](GenesisDAO.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☒ | ☐ | | [ArtZero](https://artzero.io/) | [ArtZero & InkWhale](ArtZero_InkWhale.md) | [GitHub](https://github.com/artzero-io) | ☐ | ☒ | ☐ | -| [EightFish](https://github.com/eightfish-org/eightfish) | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☒ | ☐ | +| [EightFish](https://github.com/eightfish-org/eightfish) | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☒ | ☒ | | [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☒ | ☒ | | [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☒ | ☐ | | [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | From c3e4e5a27f6f28d0070a161e79cda0b56640586d Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Thu, 11 May 2023 11:48:30 -0300 Subject: [PATCH 394/578] Update index.md (#1734) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 651fc1d2354..571306bf940 100644 --- a/applications/index.md +++ b/applications/index.md @@ -103,7 +103,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Taiwan Research-based Biopharmaceutical Manufacturers Association](https://trpma.org.tw/cmn) | [Claps Health](Claps.md) | [GitHub](https://github.com/Claps-Health/) | ☐ | ☐ | ☐ | | [Tolga Yaycı](https://github.com/tolgayayci) | [Awesome Polka](Awesome-Polka.md) | [GitHub](https://github.com/tolgayayci/awesome-polka/tree/dev) | ☐ | ☐ | ☐ | | [gmajor](https://github.com/gmajor-encrypt) | [XCM Tools](xcm-tools.md) | [GitHub](https://github.com/gmajor-encrypt/) | ☐ | ☒ | ☐ | -| [David Semakula](https://github.com/davidsemakula) | [Ink Analyzer](ink-analyzer.md) | [GitHub](https://github.com/ink-analyzer/ink-analyzer) | ☐ | ☐ | ☐ | +| [David Semakula](https://github.com/davidsemakula) | [Ink Analyzer](ink-analyzer.md) | [GitHub](https://github.com/ink-analyzer/ink-analyzer) | ☐ | ☒ | ☐ | | [Bright Inventions](https://brightinventions.pl/) | [High-availability validator setup](High_availability_validator_setup.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☐ | | [DIA Data](https://www.diadata.org/) | [Bridges Attestation Oracle](DIA_Bridge_Attestation_Oracle.md) | [GitHub](https://github.com/diadata-org/) | ☐ | ☐ | ☐ | | [TogetherCrew](http://www.togethercrew.com/) | [Community Health Check](community-health-check.md) | [GitHub](https://github.com/RnDAO) | ☐ | ☐ | ☐ | From 9af15aaf9fa85dc18303fc692470e3742764f225 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 11 May 2023 17:07:37 +0200 Subject: [PATCH 395/578] Cancel Perpetual Altruism --- ...col_for_NFT_Migration_and_Data_Exchange.md | 177 ++++++++++-------- applications/index.md | 2 +- 2 files changed, 99 insertions(+), 80 deletions(-) diff --git a/applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md b/applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md index ece5ba07b63..f34d39aa1ad 100644 --- a/applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md +++ b/applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md @@ -1,30 +1,32 @@ # Protocol for NFT Migration and Data Exchange -* **Team Name:** Perpetual Altruism -* **Payment Address:** -BTC : 1B6AHziiBvE28Lg74n23V3dYXbxcVLGKYi +- **Team Name:** Perpetual Altruism +- **Payment Address:** +BTC : 1B6AHziiBvE28Lg74n23V3dYXbxcVLGKYi ETH/DAI : 0xA7427d0D45e8dd969049872F9cDE383716A39B23 +- **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/809#issuecomment-1160448332) -## Project Overview :page_facing_up: +## Project Overview :page_facing_up: This proposal is in response to Polkadot Bridge RFP. + ### Overview -In this proposal, we use the following terms and definitions: +In this proposal, we use the following terms and definitions: -* *NFT:* Intangible asset that is compatible with the ERC-721 standard (i.e. the unique intangible asset is abstracted from the concept of token, which is how the asset is represented on a blockchain). An NFT always exists in a world, which is itself in a universe. +- *NFT:* Intangible asset that is compatible with the ERC-721 standard (i.e. the unique intangible asset is abstracted from the concept of token, which is how the asset is represented on a blockchain). An NFT always exists in a world, which is itself in a universe. -* *Universe* e.g. a blockchain or parachain, the Web2.0 internet, a private company’s database… +- *Universe* e.g. a blockchain or parachain, the Web2.0 internet, a private company’s database… -* *World (within a universe)* e.g. a smart contract or smart contract ecosystem, a website, a private company project… +- *World (within a universe)* e.g. a smart contract or smart contract ecosystem, a website, a private company project… -* *Migration:* The movement of an NFT from an origin universe to a destination universe. +- *Migration:* The movement of an NFT from an origin universe to a destination universe. -* *IOU migration:* An NFT migration where the original token is put in escrow in the origin universe bridge, and a deed that allows the bearer to redeem that original token in the origin universe is created in the destination universe. +- *IOU migration:* An NFT migration where the original token is put in escrow in the origin universe bridge, and a deed that allows the bearer to redeem that original token in the origin universe is created in the destination universe. -* *Full migration:* An NFT migration which is handled by the publisher of the NFT, who controls the destination world, and thus can allow the NFT’s features and intellectual property rights to be transferred to the new token in the destination universe. +- *Full migration:* An NFT migration which is handled by the publisher of the NFT, who controls the destination world, and thus can allow the NFT’s features and intellectual property rights to be transferred to the new token in the destination universe. -* *Digital Rights Management:* The systematic approach to prevent unauthorized redistribution of digital rights and intellectual property rights infringement during a full NFT migration. +- *Digital Rights Management:* The systematic approach to prevent unauthorized redistribution of digital rights and intellectual property rights infringement during a full NFT migration. The aim of this proposal is to standardize what information is sufficient and which are necessary to allow the migration of an NFT from an arbitrary universe to another. Both of the endpoints (origin universe/world and destination universe/world) must be ERC-721 compatible, but they do not have to be blockchains (e.g : domain name tokenization using an ERC-721 compatible API). @@ -34,126 +36,143 @@ There are already Polkadot bridges under development for ERC-20 tokens and other Our team is building NFT.com, a marketplace for the world’s tokenized assets and we need this infrastructure for our marketplace to work effectively on the Polkadot Network. Previous to this we also developed [Cryptograph](https://cryptograph.co), an NFT publisher and marketplace on Ethereum. ### Project Details + The deliverable of this proposal is a standardized protocol specification. -### Ecosystem Fit +### Ecosystem Fit + To our knowledge, there is currently no work being done on a standardized, universal bridge protocol for cross-chain NFT migration. ## Team :busts_in_silhouette: + ### Team members + * Guillaume Gonnaud -* Edouard Bessire +- Edouard Bessire ### Contact + * Guillaume Gonnaud -* g.gonnaud@perpetual-altruism.org -* [NFT.com](http://NFT.com) +- g.gonnaud@perpetual-altruism.org +- [NFT.com](http://NFT.com) + +### Legal Structure -### Legal Structure * Perpetual Altruism Ltd -* 2 Ordnance Mews, London NW86PF, United Kingdom +- 2 Ordnance Mews, London NW86PF, United Kingdom ### Team's experience + **[Guillaume Gonnaud](https://github.com/Nokhal):** Co-Founder and CTO of Perpetual Altruism Ltd, the developer of NFT publisher and marketplace Cryptograph. Previously co-founded two other companies as CTO, and worked as a researcher and developer for Japan’s National Institute of Informatics in Tokyo. He holds a MSc Computer Science from France’s National Polytechnic Institute and a MSc Research in Artificial Intelligence from Paul Sabatier University. He is the main author of the [GBM auction mechanism](https://medium.com/cryptograph/incentivised-bidding-the-gbm-auction-c6dae5a756e5) as well as of the ERC-2665 standard. **[Edouard Bessire](https://github.com/edouardru):** Co-Founder of Perpetual Altruism Ltd, the developer of NFT publisher and marketplace Cryptograph. Computer science Engineer with extensive product development and project management experience. Edouard holds an MSc in Applied Mathematics from France’s National Polytechnic Institute, and an MSc in Innovation, Entrepreneurship and Management from the Imperial College Business School. He is also a co-author of the [GBM auction mechanism](https://medium.com/cryptograph/incentivised-bidding-the-gbm-auction-c6dae5a756e5). ### Team Code Repos -[https://github.com/Nokhal/Cryptograph_Project](https://github.com/Nokhal/Cryptograph_Project) -[https://github.com/ethereum/EIPs/issues/2665](https://github.com/ethereum/EIPs/issues/2665) + +[https://github.com/Nokhal/Cryptograph_Project](https://github.com/Nokhal/Cryptograph_Project) +[https://github.com/ethereum/EIPs/issues/2665](https://github.com/ethereum/EIPs/issues/2665) ### Team LinkedIn Profiles -[https://www.linkedin.com/in/guillaume-gonnaud/](https://www.linkedin.com/in/guillaume-gonnaud/) -[https://www.linkedin.com/in/edouardbessire/](https://www.linkedin.com/in/edouardbessire/) +[https://www.linkedin.com/in/guillaume-gonnaud/](https://www.linkedin.com/in/guillaume-gonnaud/) +[https://www.linkedin.com/in/edouardbessire/](https://www.linkedin.com/in/edouardbessire/) + + +## Development Roadmap :nut_and_bolt: -## Development Roadmap :nut_and_bolt: ### Overview + * **Total Estimated Duration:** Less than 7 weeks -* **Full-time equivalent (FTE):** 2 FTE -* **Total Work Days:** 66 days -* **Cost per work day:** £300 -* **Total Costs:** £19,800 (26862.66 USD/DAI) +- **Full-time equivalent (FTE):** 2 FTE +- **Total Work Days:** 66 days +- **Cost per work day:** £300 +- **Total Costs:** £19,800 (26862.66 USD/DAI) + +### Milestone 1 — Desirable Protocol Features -### Milestone 1 — Desirable Protocol Features * **Estimated Duration:** ~2 weeks -* **FTE:** 2 FTE -* **Work Days:** 21 days -* **Cost per work day:** £300 -* **Costs:** £6,300 (8558.05 USD/DAI) -* **Deliverable:** A list of clearly defined, measurable features that the final bridges built using this vision should support, as well as how to test them using pseudocode. +- **FTE:** 2 FTE +- **Work Days:** 21 days +- **Cost per work day:** £300 +- **Costs:** £6,300 (8558.05 USD/DAI) +- **Deliverable:** A list of clearly defined, measurable features that the final bridges built using this vision should support, as well as how to test them using pseudocode. We will write up and engage with the community to determine the desirable features of a NFT migration and data exchange messaging protocol. So far, we have determined that the protocol must allow for the following features: -* Migrate any ERC-721 token between EVM-compatible chains -* Migrate an NFT back and forth to get the original token back. -* Be ERC-1155 compatible -* Migrate an NFT outside of an EVM universe and redeem the same token back -* Migrate an NFT to an arbitrary world (as the owner of an NFT, you should be able to choose where you want the NFT to be migrated to and who will mint it i.e. the protocol is not restricted to a specific project) -* Have built-in protections against “bad” migration by preventing migration to non-registered destination worlds. -* Allowing polkadot parachains to trustlessly migrate NFTs from one parachain to an another using SPREE. -* Perform both IOU migration (no Digital Rights Management requirement) and Full migration (which requires Digital Rights Management at the bridge level) -* Migrate an NFT with either a ‘checked’ migration (need to be acknowledged by both the sender and the receiver of a token) or ‘unchecked’ migration (the token in the original world needs to first be attributed to a tokenID on the destination chain, then it is simply put in escrow with the bridge on the origin chain). NB: Checked migrations are fully trutless and decentralized and optimised for security, whilst unchecked migrations are optimised for gas costs. -* Licensed under the [Unlicense](https://unlicense.org) +- Migrate any ERC-721 token between EVM-compatible chains +- Migrate an NFT back and forth to get the original token back. +- Be ERC-1155 compatible +- Migrate an NFT outside of an EVM universe and redeem the same token back +- Migrate an NFT to an arbitrary world (as the owner of an NFT, you should be able to choose where you want the NFT to be migrated to and who will mint it i.e. the protocol is not restricted to a specific project) +- Have built-in protections against “bad” migration by preventing migration to non-registered destination worlds. +- Allowing polkadot parachains to trustlessly migrate NFTs from one parachain to an another using SPREE. +- Perform both IOU migration (no Digital Rights Management requirement) and Full migration (which requires Digital Rights Management at the bridge level) +- Migrate an NFT with either a ‘checked’ migration (need to be acknowledged by both the sender and the receiver of a token) or ‘unchecked’ migration (the token in the original world needs to first be attributed to a tokenID on the destination chain, then it is simply put in escrow with the bridge on the origin chain). NB: Checked migrations are fully trutless and decentralized and optimised for security, whilst unchecked migrations are optimised for gas costs. +- Licensed under the [Unlicense](https://unlicense.org) ### Milestone 2 — Checked Migration Process + * **Estimated Duration:** ~2 weeks -* **FTE:** 2 -* **Work Days:** 20 days -* **Cost per work day:** £300 -* **Costs:** £6,000 (8150.52 USD/DAI) -* **Deliverable:** A documented step by step process that would allow a trusted relayer to perform efficient migrations of NFTs. +- **FTE:** 2 +- **Work Days:** 20 days +- **Cost per work day:** £300 +- **Costs:** £6,000 (8150.52 USD/DAI) +- **Deliverable:** A documented step by step process that would allow a trusted relayer to perform efficient migrations of NFTs. We will write up the ‘Checked Migration’ process which includes a security protocol to ensure that both the sender and the receiver are satisfied with the migration outcome. This is especially important if NFT's are migrating from/to a trustless universe (eg : a public decentralized blockchain) toward/from a centralized/private universe. -This process is NOT a fully decentralized trustless process itself in order to accomodate for a wide array of possible origin and destinations, but it does allow decentralized trustless outcomes while guaranteeing authenticity and ownership of the NFT at every step. +This process is NOT a fully decentralized trustless process itself in order to accomodate for a wide array of possible origin and destinations, but it does allow decentralized trustless outcomes while guaranteeing authenticity and ownership of the NFT at every step. -* A checked migration process mean there is an acknowledgment of the migration on the destination universe by the sender. -* A checked migration process mean there is an acknowledgment of the migration on the origin universe by the receiver -* The migration is complete only once both the sender and receiver have acknowledged the migration. Before that, the migrated token cannot be used. -* If after a time-limit, either of those acknowledgement are missing, the migration is reverted : the original token can be withdrawn freely by the sender, and the migrated token is burned. -* Checked migrations need to be possible for either EVM => EVM, * => EVM or EVM => * migrations. -* Checked migrations need to allow any third party to "check" the migration and publish a standardized signed message that the migration did indeed happen. -* NB : This only cover the migration of NFTs to a new universe, not the redemption of the the NFT back to it's origin universe. -* Licensed under the [Unlicense](https://unlicense.org) +- A checked migration process mean there is an acknowledgment of the migration on the destination universe by the sender. +- A checked migration process mean there is an acknowledgment of the migration on the origin universe by the receiver +- The migration is complete only once both the sender and receiver have acknowledged the migration. Before that, the migrated token cannot be used. +- If after a time-limit, either of those acknowledgement are missing, the migration is reverted : the original token can be withdrawn freely by the sender, and the migrated token is burned. +- Checked migrations need to be possible for either EVM => EVM, *=> EVM or EVM =>* migrations. +- Checked migrations need to allow any third party to "check" the migration and publish a standardized signed message that the migration did indeed happen. +- NB : This only cover the migration of NFTs to a new universe, not the redemption of the the NFT back to it's origin universe. +- Licensed under the [Unlicense](https://unlicense.org) *The main purpose of this migration process is for NFT publishers to allow their users to effortlessly migrate their tokens with the least amount of efforts required. NFT publishers could offer users to do the whole migration with a single gas spending approve() from an NFT owner and the rest trough meta-transactions by the publisher. The publisher would then sign the migration as properly done after having minted and transferred the token on the destination blockchain. By essence, most NFTs are not trustless assets as their publishers own real world IP rights to them, and it is hence acceptable to use said publishers as relayers. This is standardizing a process that would otherwise require the publisher to update their original NFT smart contracts or NFT owners to burn their original NFT token in order to get a new one minted on the destination universe.* ### Milestone 3 — Trustless Migration Process + * **Estimated Duration:** ~1 week -* **FTE:** 2 -* **Work Days:** 10 days -* **Cost per work day:** £300 -* **Costs:** £3,000 (4075.26 USD/DAI) -* **Deliverable:** A documented step by step process that would allow a trust-minimized relayer to perform migrations of NFTs. +- **FTE:** 2 +- **Work Days:** 10 days +- **Cost per work day:** £300 +- **Costs:** £3,000 (4075.26 USD/DAI) +- **Deliverable:** A documented step by step process that would allow a trust-minimized relayer to perform migrations of NFTs. We will write up the ‘Trustless Migration’ process which is designed to be used when the destination universe have trutsless state reading capabilities of the origin universe. -* Snowfork is already building a substrate module allowing specifically for Ethereum Smart contract reading. If a Substrate-built parachain implement those reading capacities, then implementation of this process should be straightforward. -* In the case of EVM => EVM ERC-721 migration without trustless reading, Chainbridge already exist. However, their contracts requires administrator input for new contract registration as well as lacking features that are NFT specific, such as preventing minting technically correct but legally counterfeit tokens. -* NB : This only cover the migration of NFTs to a new universe, not the redemption of the the NFT back to it's origin universe. -* Licensed under the [Unlicense](https://unlicense.org) +- Snowfork is already building a substrate module allowing specifically for Ethereum Smart contract reading. If a Substrate-built parachain implement those reading capacities, then implementation of this process should be straightforward. +- In the case of EVM => EVM ERC-721 migration without trustless reading, Chainbridge already exist. However, their contracts requires administrator input for new contract registration as well as lacking features that are NFT specific, such as preventing minting technically correct but legally counterfeit tokens. +- NB : This only cover the migration of NFTs to a new universe, not the redemption of the the NFT back to it's origin universe. +- Licensed under the [Unlicense](https://unlicense.org) ### Milestone 4 — Standard and Documentation for Cross-universe Migration + * **Estimated Duration:** ~1 week -* **FTE:** 2 -* **Work Days:** 15 days -* **Cost per work day:** £300 -* **Costs:** £4,500 (6112.89 USD/DAI) -* **Deliverables:** +- **FTE:** 2 +- **Work Days:** 15 days +- **Cost per work day:** £300 +- **Costs:** £4,500 (6112.89 USD/DAI) +- **Deliverables:** -* A generic Standard written in pseudocode including predicate and postulate for each function and events that would allow for either checked or trustless migrations to be performed for the same asset, from the same bridge : only one endpoint should be sufficient to know about all of the migrations. This standard is the most generic version and allows the most diverse universes, and henceforth is the least constrained. It will have it's own dedicated decentralized webpage explaining the standard as well as a documentation and links to both the EIP and the PSP. This decentralized webpage will also have a centralized, cached version that NFT.com will host. -* An EIP standard written in Solidity including predicate and postulate for each function and events that would allow for either checked or trustless migrations to be performed for the same asset, from the same bridge. -* A PSP standard written in ink! including predicate and postulate for each function and events that would allow a smart contract for either checked or trustless migrations to be performed for the same asset, from the same bridge. This would allow third parties to integrate an NFT bridge on any Smart contract supporting parachain, even if said parachain does not explicitely support a trustless communication channel with other parachains at the substrate level. As a separate module of this PSP we will also provide a standard for parachain NFT migrations using SPREE provided that both parachains implement this standard. -* Those standards must allow an EVM bridge following the EIP on ethereum mainnet/moonbeam to migrate an NFT to a WASM bridge following the PSP standard on a parachain and vice versa. +- A generic Standard written in pseudocode including predicate and postulate for each function and events that would allow for either checked or trustless migrations to be performed for the same asset, from the same bridge : only one endpoint should be sufficient to know about all of the migrations. This standard is the most generic version and allows the most diverse universes, and henceforth is the least constrained. It will have it's own dedicated decentralized webpage explaining the standard as well as a documentation and links to both the EIP and the PSP. This decentralized webpage will also have a centralized, cached version that NFT.com will host. +- An EIP standard written in Solidity including predicate and postulate for each function and events that would allow for either checked or trustless migrations to be performed for the same asset, from the same bridge. +- A PSP standard written in ink! including predicate and postulate for each function and events that would allow a smart contract for either checked or trustless migrations to be performed for the same asset, from the same bridge. This would allow third parties to integrate an NFT bridge on any Smart contract supporting parachain, even if said parachain does not explicitely support a trustless communication channel with other parachains at the substrate level. As a separate module of this PSP we will also provide a standard for parachain NFT migrations using SPREE provided that both parachains implement this standard. +- Those standards must allow an EVM bridge following the EIP on ethereum mainnet/moonbeam to migrate an NFT to a WASM bridge following the PSP standard on a parachain and vice versa. We will write up the standard and documentation for cross-universe migration, which includes “necessary” and “optional” data for optimization. This is a summarized write up of both the previous milestones but writen as specifications for implementations, including the predicate and postulate of each message and what they mean in term of state on the source and destination universe. -* Challenge: Establishing predicate and postulate on what are the allowed pair of source/destination worlds. Those allowed pairs could be designed in any fashion, from centralized trusted to decentralized and trust minimized. -* Licensed under the [Unlicense](https://unlicense.org) or when required under the license requirements of EIP and PSP. +- Challenge: Establishing predicate and postulate on what are the allowed pair of source/destination worlds. Those allowed pairs could be designed in any fashion, from centralized trusted to decentralized and trust minimized. +- Licensed under the [Unlicense](https://unlicense.org) or when required under the license requirements of EIP and PSP. ## Future Plans + We will implement this standard for EVM-compatible chains. Our main goal is the ability for any Ethereum mainnet NFT to be painlessly migrated to Moonbeam on the Polkadot network. -## Additional Information :heavy_plus_sign: +## Additional Information :heavy_plus_sign: + This proposal is a part of the wider NFT.com venture. -Learn more about our vision for the bridge here: [link](https://docs.google.com/document/d/1mhSKmC_4Hg7GqJuSLZk5Tu1hNjJlqo6O5TNwFx-e6vw/edit?usp=sharing) +Learn more about our vision for the bridge here: [link](https://docs.google.com/document/d/1mhSKmC_4Hg7GqJuSLZk5Tu1hNjJlqo6O5TNwFx-e6vw/edit?usp=sharing) diff --git a/applications/index.md b/applications/index.md index 571306bf940..0ae7267aa04 100644 --- a/applications/index.md +++ b/applications/index.md @@ -393,7 +393,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [OxyDev](https://oxydev.ir) | [SubsCrypt: Managing subscriptions](./SubsCrypt.md) | [GitHub](https://github.com/oxydev) | ☐ | ☒ | ☐ | | [DNFT-Team](https://github.com/DNFT-Team) | [Data framework between personal data and AI models](./DNFT.md) | [GitHub](https://github.com/DNFT-Team) | ☒ | ☐ | ☐ | | [UMC Labs](https://umc.network) | [Secured token subscription](./UMC-Tokenscribe.md) | [GitHub](https://github.com/umc-network) | ☐ | ☐ | ☐ | -| [Perpetual Altruism Ltd](https://cryptograph.co/) | [IP-Rights compliant NFT bridge protocol](./NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md) | [GitHub](https://github.com/Perpetual-Altruism-Ltd) | ☐ | ☐ | ☐ | +| [Perpetual Altruism Ltd](https://cryptograph.co/) | [IP-Rights compliant NFT bridge protocol](./NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md) | [GitHub](https://github.com/Perpetual-Altruism-Ltd) | ☒ | ☐ | ☐ | | [Clover](https://clover.finance/) | [Easy-to-use blockchain infrastructure](./clover_network.md) | [GitHub](https://github.com/clover-network/) | ☒ | ☒ | ☐ | | [DoraHacks](https://dorahacks.com/) | [Quadratic Funding Pallet](./dorahacks-quadratic-funding.md) | [GitHub](https://github.com/dorahacksglobal) | ☐ | ☒ | ☒ | | [SEOR](https://www.seor.io) | [Multi-chain smart contract development platform](./SEOR-code-less-smart-contract-platform.md) | [GitHub](https://github.com/SealSC) | ☐ | ☒ | ☐ | From 965ed92f5e02df39adf8db2c3fd07b46e9c9622c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 11 May 2023 17:15:08 +0200 Subject: [PATCH 396/578] fix --- ...col_for_NFT_Migration_and_Data_Exchange.md | 28 +++++++++++++------ applications/index.md | 2 +- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md b/applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md index f34d39aa1ad..8f1bac5d823 100644 --- a/applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md +++ b/applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md @@ -4,7 +4,6 @@ - **Payment Address:** BTC : 1B6AHziiBvE28Lg74n23V3dYXbxcVLGKYi ETH/DAI : 0xA7427d0D45e8dd969049872F9cDE383716A39B23 -- **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/809#issuecomment-1160448332) ## Project Overview :page_facing_up: @@ -47,18 +46,21 @@ To our knowledge, there is currently no work being done on a standardized, unive ### Team members -* Guillaume Gonnaud +- Guillaume Gonnaud + - Edouard Bessire ### Contact -* Guillaume Gonnaud +- Guillaume Gonnaud + - g.gonnaud@perpetual-altruism.org - [NFT.com](http://NFT.com) ### Legal Structure -* Perpetual Altruism Ltd +- Perpetual Altruism Ltd + - 2 Ordnance Mews, London NW86PF, United Kingdom ### Team's experience @@ -82,7 +84,8 @@ To our knowledge, there is currently no work being done on a standardized, unive ### Overview -* **Total Estimated Duration:** Less than 7 weeks +- **Total Estimated Duration:** Less than 7 weeks + - **Full-time equivalent (FTE):** 2 FTE - **Total Work Days:** 66 days - **Cost per work day:** £300 @@ -90,7 +93,8 @@ To our knowledge, there is currently no work being done on a standardized, unive ### Milestone 1 — Desirable Protocol Features -* **Estimated Duration:** ~2 weeks +- **Estimated Duration:** ~2 weeks + - **FTE:** 2 FTE - **Work Days:** 21 days - **Cost per work day:** £300 @@ -99,6 +103,7 @@ To our knowledge, there is currently no work being done on a standardized, unive We will write up and engage with the community to determine the desirable features of a NFT migration and data exchange messaging protocol. So far, we have determined that the protocol must allow for the following features: + - Migrate any ERC-721 token between EVM-compatible chains - Migrate an NFT back and forth to get the original token back. - Be ERC-1155 compatible @@ -112,7 +117,8 @@ So far, we have determined that the protocol must allow for the following featur ### Milestone 2 — Checked Migration Process -* **Estimated Duration:** ~2 weeks +- **Estimated Duration:** ~2 weeks + - **FTE:** 2 - **Work Days:** 20 days - **Cost per work day:** £300 @@ -136,7 +142,8 @@ This process is NOT a fully decentralized trustless process itself in order to a ### Milestone 3 — Trustless Migration Process -* **Estimated Duration:** ~1 week +- **Estimated Duration:** ~1 week + - **FTE:** 2 - **Work Days:** 10 days - **Cost per work day:** £300 @@ -144,6 +151,7 @@ This process is NOT a fully decentralized trustless process itself in order to a - **Deliverable:** A documented step by step process that would allow a trust-minimized relayer to perform migrations of NFTs. We will write up the ‘Trustless Migration’ process which is designed to be used when the destination universe have trutsless state reading capabilities of the origin universe. + - Snowfork is already building a substrate module allowing specifically for Ethereum Smart contract reading. If a Substrate-built parachain implement those reading capacities, then implementation of this process should be straightforward. - In the case of EVM => EVM ERC-721 migration without trustless reading, Chainbridge already exist. However, their contracts requires administrator input for new contract registration as well as lacking features that are NFT specific, such as preventing minting technically correct but legally counterfeit tokens. - NB : This only cover the migration of NFTs to a new universe, not the redemption of the the NFT back to it's origin universe. @@ -151,7 +159,8 @@ We will write up the ‘Trustless Migration’ process which is designed to be u ### Milestone 4 — Standard and Documentation for Cross-universe Migration -* **Estimated Duration:** ~1 week +- **Estimated Duration:** ~1 week + - **FTE:** 2 - **Work Days:** 15 days - **Cost per work day:** £300 @@ -164,6 +173,7 @@ We will write up the ‘Trustless Migration’ process which is designed to be u - Those standards must allow an EVM bridge following the EIP on ethereum mainnet/moonbeam to migrate an NFT to a WASM bridge following the PSP standard on a parachain and vice versa. We will write up the standard and documentation for cross-universe migration, which includes “necessary” and “optional” data for optimization. This is a summarized write up of both the previous milestones but writen as specifications for implementations, including the predicate and postulate of each message and what they mean in term of state on the source and destination universe. + - Challenge: Establishing predicate and postulate on what are the allowed pair of source/destination worlds. Those allowed pairs could be designed in any fashion, from centralized trusted to decentralized and trust minimized. - Licensed under the [Unlicense](https://unlicense.org) or when required under the license requirements of EIP and PSP. diff --git a/applications/index.md b/applications/index.md index 0ae7267aa04..571306bf940 100644 --- a/applications/index.md +++ b/applications/index.md @@ -393,7 +393,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [OxyDev](https://oxydev.ir) | [SubsCrypt: Managing subscriptions](./SubsCrypt.md) | [GitHub](https://github.com/oxydev) | ☐ | ☒ | ☐ | | [DNFT-Team](https://github.com/DNFT-Team) | [Data framework between personal data and AI models](./DNFT.md) | [GitHub](https://github.com/DNFT-Team) | ☒ | ☐ | ☐ | | [UMC Labs](https://umc.network) | [Secured token subscription](./UMC-Tokenscribe.md) | [GitHub](https://github.com/umc-network) | ☐ | ☐ | ☐ | -| [Perpetual Altruism Ltd](https://cryptograph.co/) | [IP-Rights compliant NFT bridge protocol](./NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md) | [GitHub](https://github.com/Perpetual-Altruism-Ltd) | ☒ | ☐ | ☐ | +| [Perpetual Altruism Ltd](https://cryptograph.co/) | [IP-Rights compliant NFT bridge protocol](./NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md) | [GitHub](https://github.com/Perpetual-Altruism-Ltd) | ☐ | ☐ | ☐ | | [Clover](https://clover.finance/) | [Easy-to-use blockchain infrastructure](./clover_network.md) | [GitHub](https://github.com/clover-network/) | ☒ | ☒ | ☐ | | [DoraHacks](https://dorahacks.com/) | [Quadratic Funding Pallet](./dorahacks-quadratic-funding.md) | [GitHub](https://github.com/dorahacksglobal) | ☐ | ☒ | ☒ | | [SEOR](https://www.seor.io) | [Multi-chain smart contract development platform](./SEOR-code-less-smart-contract-platform.md) | [GitHub](https://github.com/SealSC) | ☐ | ☒ | ☐ | From 07781fa360e7e3f3aeb9d73a351cfe3cf31603c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 11 May 2023 21:16:33 +0200 Subject: [PATCH 397/578] Cancel Perpetual Altruism (#1735) Co-authored-by: David Hawig --- .../NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md b/applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md index 8f1bac5d823..5108a34a24d 100644 --- a/applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md +++ b/applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md @@ -4,6 +4,7 @@ - **Payment Address:** BTC : 1B6AHziiBvE28Lg74n23V3dYXbxcVLGKYi ETH/DAI : 0xA7427d0D45e8dd969049872F9cDE383716A39B23 +- **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/809#issuecomment-1160448332) ## Project Overview :page_facing_up: From 4ee491c885edbe6f32548efe43739d1847dfc920 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Fri, 12 May 2023 03:24:38 -0400 Subject: [PATCH 398/578] Update chainjs.md (#1736) --- applications/chainjs.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/chainjs.md b/applications/chainjs.md index 68372bc37b6..93ea2e51e63 100644 --- a/applications/chainjs.md +++ b/applications/chainjs.md @@ -2,6 +2,7 @@ * **Team Name:** API Market, Inc. dba AIKON * **Payment Address:** Ethereum Address: 0x7a6fdc8a113966d1236aB0FaB6dC5D3e5c05db88 +* **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/228#issuecomment-1544458481) ## Project Overview :page_facing_up: From e5fb39bb9293ad7577ca7f494a4eb5b07e52f27f Mon Sep 17 00:00:00 2001 From: Noc2 Date: Fri, 12 May 2023 11:31:33 +0200 Subject: [PATCH 399/578] CSS updates according to https://web3.foundation/ --- src/css/custom.css | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/css/custom.css b/src/css/custom.css index 01e15bc5939..da57dabd162 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -14,6 +14,8 @@ --ifm-color-primary-light: rgb(70, 203, 174); --ifm-color-primary-lighter: rgb(102, 212, 189); --ifm-color-primary-lightest: rgb(146, 224, 208); + --ifm-navbar-link-color: #000; + --ifm-color-black: #fff; --ifm-code-font-size: 95%; font-family: SuisseIntl,sans-serif; } From 308c7c43ff052e644742eeba697b0cb798937f66 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Fri, 12 May 2023 11:52:43 +0200 Subject: [PATCH 400/578] update favicon --- docusaurus.config.js | 2 +- static/img/favicon-32x32.png | Bin 0 -> 604 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 static/img/favicon-32x32.png diff --git a/docusaurus.config.js b/docusaurus.config.js index 4fd923b27c4..f8b23e6820e 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -10,7 +10,7 @@ module.exports = { baseUrl: '/Grants-Program/', onBrokenLinks: 'warn', // Revert back to 'throw' once initial release is up onBrokenMarkdownLinks: 'warn', - favicon: 'img/Web3Foundation.png', + favicon: 'img/favicon-32x32.png', organizationName: 'w3f', // Usually your GitHub org/user name. trailingSlash: false, projectName: 'Grants-Program', // Usually your repo name. diff --git a/static/img/favicon-32x32.png b/static/img/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..d26a24056c70e04f2331d6fab485dfcb39257c73 GIT binary patch literal 604 zcmV-i0;BzjP)KRXwPJP!zsqW Date: Fri, 12 May 2023 14:10:59 +0200 Subject: [PATCH 401/578] Clean navbar --- docusaurus.config.js | 14 +++++--------- src/css/custom.css | 5 +++++ static/img/w3f_logo.svg | 12 ++++++++++++ 3 files changed, 22 insertions(+), 9 deletions(-) create mode 100644 static/img/w3f_logo.svg diff --git a/docusaurus.config.js b/docusaurus.config.js index f8b23e6820e..d967c998564 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -34,26 +34,28 @@ module.exports = { isCloseable: true, }, navbar: { - title: 'W3F Grants Program', + title: 'Grants Program', logo: { alt: 'W3F Grants Program', - src: 'img/Web3Foundation.png', + src: 'img/w3f_logo.svg', }, items: [ { type: 'doc', docId: 'docs/introduction', + position: 'right', label: 'Introduction', }, { type: 'doc', docId: 'applications/index', - position: 'left', + position: 'right', label: 'List of Grants', }, { type: 'doc', docId: 'docs/faq', + position: 'right', label: 'FAQ', }, { @@ -61,12 +63,6 @@ module.exports = { docId: 'docs/Process/how-to-apply', position: 'right', label: 'Apply', - }, - { - type: 'doc', - docId: 'docs/contribute', - position: 'right', - label: 'Contribute', } ], }, diff --git a/src/css/custom.css b/src/css/custom.css index da57dabd162..a5ba1eaa71c 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -24,6 +24,11 @@ font-size: 4rem; } +.navbar__logo { + flex: 0 0 auto; + height: 48px; + margin-right: 0rem; +} .footer__link-item { text-decoration: none; diff --git a/static/img/w3f_logo.svg b/static/img/w3f_logo.svg new file mode 100644 index 00000000000..cffc76ba628 --- /dev/null +++ b/static/img/w3f_logo.svg @@ -0,0 +1,12 @@ + + + + +Web3Foundation_4 + + From 6a7b2fbf0ff2480f5fab3457c337e0f039a57d7e Mon Sep 17 00:00:00 2001 From: Noc2 Date: Fri, 12 May 2023 14:36:22 +0200 Subject: [PATCH 402/578] footer image --- src/css/custom.css | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/css/custom.css b/src/css/custom.css index a5ba1eaa71c..92b37c4d307 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -30,6 +30,7 @@ margin-right: 0rem; } + .footer__link-item { text-decoration: none; } @@ -57,6 +58,8 @@ .footer--dark { --ifm-footer-background-color: #000; + background-image: url("https://web3.foundation/static/fa2e2556a97b02fb8186cceaa6999d78/24754/research-large.avif"); + background-size: cover; } .docusaurus-highlight-code-line { From 2a0b5a3e118dce00bfac1b0d51cd725cadd721b9 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Fri, 12 May 2023 14:40:46 +0200 Subject: [PATCH 403/578] Update copyright --- src/css/custom.css | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/css/custom.css b/src/css/custom.css index 92b37c4d307..227e6c3c91a 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -62,6 +62,12 @@ background-size: cover; } +.footer__copyright { + color: #7F7F7F; + font-size: 14px; + text-align: right; +} + .docusaurus-highlight-code-line { background-color: rgba(0, 0, 0, 0.1); display: block; From 050ffd29e310205daa5db383654d5ca60cfe5c92 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Fri, 12 May 2023 15:27:34 +0200 Subject: [PATCH 404/578] link animation --- src/css/custom.css | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/css/custom.css b/src/css/custom.css index 227e6c3c91a..dfd728d40c0 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -106,4 +106,33 @@ a { text-transform: uppercase; font-weight: 600; color: var(--ifm-color-gray-600); +} + +/* Link styling */ +.navbar__item { + padding: 0px; + margin: 4px 12px; +} + +a.navbar__item{ + background: + linear-gradient( + to right, + #fff, + #fff + ), + linear-gradient( + to right, + #000, + #000, + #000 + ); + background-size: 100% 3px, 0 3px; + background-position: 100% 100%, 0 100%; + background-repeat: no-repeat; + transition: background-size 400ms; +} + +a:hover.navbar__item{ + background-size: 0 3px, 100% 3px; } \ No newline at end of file From cd2833d39daca59e4d2865fc7be8b6a0f99df62f Mon Sep 17 00:00:00 2001 From: caso Date: Fri, 12 May 2023 16:44:26 +0200 Subject: [PATCH 405/578] Update check_application_document.yml (#1737) Fix for formatting issues --- .github/workflows/check_application_document.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/check_application_document.yml b/.github/workflows/check_application_document.yml index f687de9fe9b..cef9f8827f9 100644 --- a/.github/workflows/check_application_document.yml +++ b/.github/workflows/check_application_document.yml @@ -9,8 +9,8 @@ jobs: discussion_private: if: | github.event.action == 'opened' && - github.event.pull_request.body && ( - contains(github.event.pull_request.body, '- [x] I prefer the discussion') || + contains(github.event.pull_request.body, 'Project Abstract') && ( + !contains(github.event.pull_request.body, '- [ ] I prefer the discussion') || ( contains(github.event.pull_request.body, '- [ ] I prefer the discussion') && !contains(github.event.pull_request.body, '@_______:matrix.org') From f49d7ffdebae10f5e7684c07892a4fdc05cddbec Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Tue, 16 May 2023 01:35:29 -0400 Subject: [PATCH 406/578] Update index.md (#1743) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 571306bf940..942bc8864e4 100644 --- a/applications/index.md +++ b/applications/index.md @@ -87,7 +87,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☒ | ☐ | | [Zeeve](https://www.zeeve.io) | [Parachain deployment zoombienet testing automation](Zeeve_Parachain_deployment_zoombienet_testing_automation.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | | [Polytope Labs](https://research.polytope.technology/) | [Trie Verifier Implementation](solidity-trie-verifier.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☒ | ☒ | -| [Off-Narrative Labs](https://github.com/Off-Narrative-Labs) | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☒ | ☐ | +| [Off-Narrative Labs](https://github.com/Off-Narrative-Labs) | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☒ | ☒ | | [FuzzLand](https://fuzz.land/) | [FuzzLand](FuzzLand.md) | [GitHub](https://github.com/fuzzland) | ☐ | ☐ | ☐ | | [Fuu](https://github.com/ff13dfly/) | [Anchor, On-chain Linked List pallet and Name Service](Anchor.md) | [GitHub](https://github.com/ff13dfly/Anchor) | ☐ | ☒ | ☒ | | [hack-ink](https://hack.ink/) | [Slothunter](slothunter.md) | [GitHub](https://github.com/hack-ink) | ☐ | ☐ | ☐ | From ded0c94e4de253e27bcb96f000ffdfe84daa1edb Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Tue, 16 May 2023 08:59:07 -0300 Subject: [PATCH 407/578] Update index.md (#1746) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 942bc8864e4..3bba2005ff5 100644 --- a/applications/index.md +++ b/applications/index.md @@ -107,7 +107,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Bright Inventions](https://brightinventions.pl/) | [High-availability validator setup](High_availability_validator_setup.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☐ | | [DIA Data](https://www.diadata.org/) | [Bridges Attestation Oracle](DIA_Bridge_Attestation_Oracle.md) | [GitHub](https://github.com/diadata-org/) | ☐ | ☐ | ☐ | | [TogetherCrew](http://www.togethercrew.com/) | [Community Health Check](community-health-check.md) | [GitHub](https://github.com/RnDAO) | ☐ | ☐ | ☐ | -| [Decentration](https://www.decentration.org/) | [Supersig Phase 2](./supersig_fellowship.md) | [GitHub](https://github.com/decentration) | ☐ | ☐ | ☐ | +| [Decentration](https://www.decentration.org/) | [Supersig Phase 2](./supersig_fellowship.md) | [GitHub](https://github.com/decentration) | ☐ | ☒ | ☐ | | [Polkadrys Labs](https://github.com/rtomas) | [Open Payroll](./openPayroll.md) | [GitHub](https://github.com/rtomas) | ☐ | ☐ | ☐ | | [Itering](https://www.itering.io/) | [Solidity Verifier Implementation for Accountable Light Client](./solidity-verifier-for-accountable-light-client.md) | [GitHub](https://github.com/darwinia-network) | ☐ | ☐ | ☐ | [🔝](#menu) From 3601d95f7b61e4cdde70889a47ad216b1f1ecdb2 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Tue, 16 May 2023 08:59:29 -0300 Subject: [PATCH 408/578] Update index.md (#1745) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 3bba2005ff5..e74dc1007e6 100644 --- a/applications/index.md +++ b/applications/index.md @@ -210,7 +210,7 @@ Use this page for an overview of all public grants and their status. Use the sid | :--------------------------------------------------------- | :------------------------------------------------------------------------------------------------------ | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | | [TDSoftware](https://www.tdsoftware.de/) | [SubIdentity](./SubIdentity.md) | [GitHub](https://github.com/TDSoftware) | ☐ | ☒ | ☒ | | [ChainSafe Systems](https://chainsafe.io/) | [SubstrateSnap Maintenance Proposal](./maintenance/Substratesnap_Maintenance.md) | [GitHub](https://github.com/ChainSafe/metamask-snap-polkadot) | ☐ | ☒ | ☒ | -| [HugoByte](https://hugobyte.com/) | [Project Aurras - MVP - Phase 2](./project_aurras_mvp_phase_2.md) | [GitHub](https://github.com/HugoByte) | ☐ | ☐ | ☐ | +| [HugoByte](https://hugobyte.com/) | [Project Aurras - MVP - Phase 2](./project_aurras_mvp_phase_2.md) | [GitHub](https://github.com/HugoByte) | ☐ | ☒ | ☐ | | [Perun Network](https://perun.network/) | [Perun App Channels](./perun_app_channels.md) | [GitHub](https://github.com/perun-network/) | ☐ | ☒ | ☒ | | [ChainSafe Systems](https://chainsafe.io/) | [Privacy enhancement for Polkadot-js extension](./polkadot-js-extension-per-account-auth.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☒ | ☒ | | [BQP](https://qbitcoin.tech/) | [Quantum Lock for QBITCOIN](./quantumLock.md) | [GitHub](https://github.com/bqpquantum/) | ☐ | ☐ | ☐ | From 6a0015a62a2bedab57a2e407d483b8b30db3cea1 Mon Sep 17 00:00:00 2001 From: Ghan Vashishtha <74914749+gnv-zeeve@users.noreply.github.com> Date: Tue, 16 May 2023 21:00:17 +0530 Subject: [PATCH 409/578] update larch team, duration and deliverables (#1744) Signed-off-by: Jasti Sri Radhe Shyam Co-authored-by: Jasti Sri Radhe Shyam --- ...eployment_zoombienet_testing_automation.md | 36 ++++++++++--------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/applications/Zeeve_Parachain_deployment_zoombienet_testing_automation.md b/applications/Zeeve_Parachain_deployment_zoombienet_testing_automation.md index 482003617f4..aae0ff28f08 100644 --- a/applications/Zeeve_Parachain_deployment_zoombienet_testing_automation.md +++ b/applications/Zeeve_Parachain_deployment_zoombienet_testing_automation.md @@ -19,14 +19,14 @@ A GUI will be built to allow a quick setup of the relaychain, parachain with zom This not only will allow configurations on the parachain side but will also allow you to pick from a set of predefined DSL templates on Zombie-net as well as upload the new templates without needing to write the code. The graphical control panel will support all the other configurations or operations required to enable the developer or parachain team to test with as much flexibility as required. These operations include: -- Restart - after x seconds, will stop the `process` and start again after the `x`amount of seconds or immediately. -- Stop - will pause (SIGSTOP) the process) -- Resume - will pause (SIGCONT) the process) -- Sleep - will allow config to sleep the test-runner for `x` ammount of seconds) +- Start - Start the network with configured info (templates) + - Start the network for either evaluation or testing +- Delete - will stop the processes and delete it +- View Info - view execution logs and command **Test result and logs** -The interface will allow the developer to test and see live logs of the test run, post run results and logs on the aforementioned interface. Furthermore, a stack of Prometheus and Grafana will allow easy monitoring of the Zombie-net. +The interface will allow the developer to test and see live logs of the test run, post run results and logs on the aforementioned interface. Furthermore, a stack of Prometheus and Grafana will allow easy monitoring of the Zombienet. **Templating** @@ -42,11 +42,15 @@ The control panel will also allow the developer or the parachain team to one-cli - Sankalp Sharma -- Arjun Chamyal +- Jasti Sri Radhe Shyam -- Rahul Meena +- Antar Basu - +- Swati Sharma + +- Gowrish K + +- Abhishek Kumar ### Contact @@ -74,7 +78,7 @@ The control panel will also allow the developer or the parachain team to one-cli -Founded by a team of experienced professionals and enterprenuers from industry, Zeeve's cofounders collectively have over 45+ years of experience in technology, product development, and various business verticals. Zeeve has built an enterprise-grade no-code Blockchain Infrastructure Automation platform that enables Enterprises, Blockchain Startups, Blockchain Consulting Companies and Web3 Developers to deploy Blockchain nodes and Decentralised Apps within minutes, and manage them with advanced analytics and real-time alerts. In June 2022, the Startup raised $2.65 Million in a Seed Round from Leo Capital and Blu Ventures. It plans to deploy the funds towards product development, augmenting the technology team and enhancing its reach among DApp developers and global corporations, please consider visiting our prior [work](https://www.zeeve.io/platform). +Founded by a team of experienced professionals and entrepreneurs from industry, Zeeve's co-founders collectively have over 45+ years of experience in technology, product development, and various business verticals. Zeeve has built an enterprise-grade no-code Blockchain Infrastructure Automation platform that enables Enterprises, Blockchain Startups, Blockchain Consulting Companies and Web3 Developers to deploy Blockchain nodes and Decentralised Apps within minutes, and manage them with advanced analytics and real-time alerts. In June 2022, the Startup raised $2.65 Million in a Seed Round from Leo Capital and Blu Ventures. It plans to deploy the funds towards product development, augmenting the technology team and enhancing its reach among DApp developers and global corporations, please consider visiting our prior [work](https://www.zeeve.io/platform). @@ -122,9 +126,9 @@ Before applying for the Web3 Foundation Grant, the Zeeve team has built a DevOps - Automated Kusama deployments including validator nodes, archive nodes [here](https://www.zeeve.io/blockchain-protocols/deploy-kusama-node/) -- Created a relay chain on substrate with some customisations done at the core to accomodate the tokenomics and custom reward mechanism [here](https://axscan.axiacoin.network/#/explorer) +- Created a relay chain on substrate with some customisations done at the core to accommodate the tokenomics and custom reward mechanism [here](https://axscan.axiacoin.network/#/explorer) -- Published a [blog post](https://www.zeeve.io/blog/how-to-use-substrate-to-create-parachains-in-polkadot/) about the usage and omlememtation of praachains +- Published a [blog post](https://www.zeeve.io/blog/how-to-use-substrate-to-create-parachains-in-polkadot/) about the usage and implementation of parachains - The focus for Zeeve will be automating the parachain deployments, dedicated node setups and help with faster testing with zombie-net. @@ -140,7 +144,7 @@ Before applying for the Web3 Foundation Grant, the Zeeve team has built a DevOps -- **Total Estimated Duration:** 2 months +- **Total Estimated Duration:** 4 months - **Full-Time Equivalent (FTE):** 4 FTE @@ -152,7 +156,7 @@ Before applying for the Web3 Foundation Grant, the Zeeve team has built a DevOps -- **Estimated duration:** 40 days +- **Estimated duration:** 60 days - **FTE:** 4 @@ -165,9 +169,9 @@ Before applying for the Web3 Foundation Grant, the Zeeve team has built a DevOps | 0a. | License | GPLv3 | | 0b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) create a new Substrate based Zombie-net nodes and initiate testing, which will show how the new functionality works. | | 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | -| 0d. | Docker/Cluster | We will provide a Dockerfile(s)/Cluster Yaml(s) that can be used to test all the functionality delivered with this milestone. | +| 0d. | Standalone Executable | Will provide standalone executable that start the GUI service and other corresponding | | 1. | Initial Automation | We will build the core GUI driven automation to create and deploy the substrate based Zombie-net configurations including relaychain and parachain configurations. | -| 2. | Configuration | Parachain configuration is critical and complicated, we will provide the GUI based pick and choose for genesis parameters and chain configs to start wtih parachain setup for the desired Zombie-net | +| 2. | Configuration | Parachain configuration is critical and complicated, we will provide the GUI based pick and choose for genesis parameters and chain configs to start with parachain setup for the desired Zombie-net | | 3. | Node type support | Implement setup of all node types including Full node, Validator node and Collator node for the respective relay chain and parachain within the configured Zombie-net. | | 4. | Cloud agnostic setup | The larch setup will be cloud agnostic and it can be installed on the choice of cloud, instructions and documentation will be provided for the same. | | 5. | User management | The larch will allow to setup different users with desired permissions and access controls such as add, delete zombie-net, view, delete logs and save, delete templates. | @@ -193,7 +197,7 @@ Before applying for the Web3 Foundation Grant, the Zeeve team has built a DevOps | 0a. | License | GPLv3 | | 0b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) create a new Zombie-net, test and setup monitoring for it, which will show how the new functionality works. | | 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | -| 0d. | Docker/Cluster | We will provide a Dockerfile(s)/Cluster Yaml(s) that can be used to test all the functionality delivered with this milestone. | +| 0d. | Standalone Executable | Will provide standalone executable that start the GUI service and other corresponding | | 0e. | Article | Using our PR channels, we will publish an **article** that explains the high-level overview of automation as part of the grant, followed by a set of extensive examples. | | 1. | Design monitoring strategy | The Zombie-net doesn't provide any embedded monitoring tool, we will with the zombie-net setup automation, automatically setup prometheus and Grafana while configuring the zombie-net. | | 2. | Setup Dashboard | The deployment done for Prometheus and Grafana will show standard Dashboard having system resource and zombie-net specific details shown on the aforementioned Grafana GUI Dashboard. | From ab3177fce9e6df0bc3f45e04a1523e95d2a18e31 Mon Sep 17 00:00:00 2001 From: Nikhil Desai Date: Wed, 17 May 2023 11:13:10 +0530 Subject: [PATCH 410/578] RFP: implementation-benchmarking Milestone 3 (#1722) * RFP: implementation-benchmarking Milestone 3 * add events benchmarking and communicate intent to maintain this work --- .../ink-pallet-benchmarking-phase-2.md | 122 ++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 applications/ink-pallet-benchmarking-phase-2.md diff --git a/applications/ink-pallet-benchmarking-phase-2.md b/applications/ink-pallet-benchmarking-phase-2.md new file mode 100644 index 00000000000..5e9a02ec814 --- /dev/null +++ b/applications/ink-pallet-benchmarking-phase-2.md @@ -0,0 +1,122 @@ +# ink!/pallet/solidity performance benchmarking phase 2 + +- **Team Name:** Talentica Software +- **Payment Address:** 0x8bd54ec34A35f3A2f668A33d9578b5C3A6b730dE +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + +## Project Overview : +Proposal for Milestone 2 in the RFP titled [implementation-benchmarking](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Under%20Development/implementation-benchmarking.md). + +### Overview + +There are multiple ways to implement the logic in substrate i.e using pallets or ink smart contracts, or even writing solidity code and compiling it to WASM with the help of a solang compiler. We have to benchmark the performance metrics of the logic implemented using each of the above methods. We have already benchmarked the storage performance(basic data types) of each of the implementations as part of Milestone 1 and 2. Now, we will benchmark CPU-intensive logic, events emission and cross-contract calls across all the four implementations. We hope this will help new developers in deciding the best approach to implement the logic. + +### Project Details + +We will employ the approach already taken to deliver Milestones 1 and 2 to benchmark CPU intensive task on all the four implementation strategies and also cross-contract calls within an implementation, wherever possible. We will use following tools to do so: +- [Substrate Runtime Benchmarking Framework](https://github.com/paritytech/substrate/tree/master/frame/benchmarking) + +### Ecosystem Fit + +This will help new developers to decide the best tool to implement the logic. + +## Team :busts_in_silhouette: + +### Team members +- Debasish Ray Chawdhuri - Blockchain and Cryptography Researcher +- Pankaj Mendki -Blockchain expert +- Nikhil Desai - Blockchain Developer https://github.com/Nikhil-Desai-Talentica +- Amit Singh - Blockchain Developer https://github.com/iamit-singh + +### Contact + +- **Contact Name:** Nikhil Desai +- **Contact Email:** Nikhil.Desai@talentica.com +- **Website:** https://www.talentica.com/ + +### Legal Structure + +- **Registered Address:** B-7/8, Anmol Pride, Baner Road, Baner, Pune, Maharashtra 411045, India +- **Registered Legal Entity:** Talentica Software India Pvt. Ltd. + +### Team's experience + +We have already worked on [implementation-benchmarking](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Under%20Development/implementation-benchmarking.md) and delivered Milestones 1 and 2. + +### Team Code Repos + +- [implementation-benchmarking](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/deliveries/ink-pallet-benchmarking-milestone_2.md) +- [provenance-usecase](https://github.com/TalenticaSoftware/provenance-usecase) +- [simpleblockchain](https://github.com/Talentica/simpleblockchain) + +- [Nikhil-Desai-Talentica](https://github.com/Nikhil-Desai-Talentica) + +### Team LinkedIn Profiles (if available) + +- Debasish Ray Chawdhuri - https://www.linkedin.com/in/debasish-ray-chawdhuri-4b444316/ +- Pankaj Mendki - https://www.linkedin.com/in/pankaj-mendki-8576363/ +- Nikhil Desai - https://www.linkedin.com/in/nikhil-desai-1209a38b/ +- Amit Singh - https://www.linkedin.com/in/amit-singh-3637a898/ + +## Development Status : + +We have come up with a high-level implementation plan and will start implementing it soon. + +## Development Roadmap :nut_and_bolt: + +| Number | Objective | Deliverable | Time Estimate | +| -----: | ----------- | ------------- | ----------- | +| 1. | | Milestone 3, Deliverable 1 | 2 days | +| 2. | | Milestone 3, Deliverable 2 | 2 days | +| 3. | | Milestone 3, Deliverable 3 | 1 day | +| 4. | | Milestone 3, Deliverable 4 | 2 days | +| 5. | | Milestone 3, Deliverable 5 | 3 days | +| 6. | | Milestone 3, Deliverable 6 | 3 day | +| 7. | | Milestone 3, Deliverable 7 | 3 days | +| 8. | | Milestone 3, Deliverable 8 | 3 days | +| 9. | | Milestone 3, Deliverable 9 | 1 days | +| 10. | | Milestone 3, Deliverable 10 | 1 days | +| 11. | | Milestone 3, Deliverable 11 | 1 days | +| 12. | | Milestone 3, Deliverable 12 | 1 days | +| 13. | | Milestone 3, Deliverable 0b, 0e | 1 day | + +### Overview + +- **Total Estimated Duration:** 5 Weeks +- **Full-Time Equivalent (FTE):** 1 +- **Total Costs:** 6,000 DAI + +### Milestone 3 - Compute intensive function and cross-contract call benchmarking + +- **Estimated duration:** 5 Weeks +- **FTE:** 1 +- **Costs:** 6,000 DAI + +> :exclamation: **The default deliverables 0a-0d below are mandatory for all milestones**, and deliverable 0e at least for the last one. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 / GPLv3 / MIT / Unlicense | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and and an **article** explaining how to use the tool to benchmark custom compute intensive functions and cross-contract calls along with a **live demo** if possible. | +| **0c.** | Testing and Testing Guide | We are building atop of the benchmarking framework that's part of the substrate-core. Some tests may be included when it comes to the functions being tested. | +| **0d.** | Docker | Not Applicable. | +| 0e. | Article | We will publish an **article** that explains how each implementation technique performs, and when to choose which. | +| 1. | Pallet CPU-intensive extrinsic | Extend a sample pallet to include a CPU-intensive extrinsic. | +| 2. | Ink! CPU-intensive function | Extend a sample Ink! contract to include a CPU-intensive function. | +| 3. | Solidity-WASM and Solidity-Native CPU-intensive function | Extend a sample Solidity contract to include a CPU-intensive function | +| 4. | CPU-intensive benchmarks | Run the benchmarks on all these implementations and compare. | +| 5. | Pallet cross-contract call | Add another pallet and invoke it from the sample pallet. | +| 6. | Ink! cross-contract call | Add another Ink! contract and invoke it from the sample Ink! contract. | +| 7. | cross-contract benchmarks | run cross-contract calls across different implementations and collect benchmarks. | +| 8. | Solidity-WASM and Solidity-Native cross-contract call | Add another Solidity contract and invoke it from the sample Solidity contract. (Note: There are [unresolved issues](https://github.com/hyperledger/solang/issues/666) questioning the feasibility of cross-contract calls in Solidity-WASM and Solidity-Native. Nevertheless, an attempt will be made to see if it's possible. | +| 9. | Pallet events | benchmark events emitted from the sample pallet. | +| 10. | Ink! events | benchmark events emitted from the sample Ink! contract. | +| 11. | Solidity-WASM and Solidity-Native events | benchmark events emitted from the Solidity-WASM and Solidity-Native contracts. | +| 12. | Benchmark events across implementations | benchmark and record events emission across implementations. | + +We are planning to submit another grant application towards Milestone 4 where we discuss our approach to maintaining this work, using some software tools to automate the process wherever possible. + +## Additional Information :heavy_plus_sign: + +Gautam Dhameja told us about the Grants program and encouraged us to apply to the same. +We have already applied for and delivered Milestones 1 and 2 against [implementation-benchmarking](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Under%20Development/implementation-benchmarking.md) From a571aa0845f925e49da469f05c784014ff0c3d90 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 17 May 2023 07:47:11 +0200 Subject: [PATCH 411/578] Update index.md Implementation Benchmarking Milestone 3 --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index e74dc1007e6..23ed04f96cd 100644 --- a/applications/index.md +++ b/applications/index.md @@ -56,6 +56,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Ed Anderson](https://github.com/eca20) | [Blockchainia](./blockchainia.md) | [GitHub](https://github.com/eca20) | ☐ | ☐ | ☐ | | [CoinFabrik](https://www.coinfabrik.com/) | [ScoutCoinFabrik: Milestone 2](ScoutCoinFabrik_2.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | | [Polytope Labs](https://research.polytope.technology/) | [Interoperable State Machine Protocol](ismp.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | +| [Talentica Software](https://www.talentica.com/) | [Implementation Benchmarking Milestone 3](ink-pallet-benchmarking-phase-2.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | [🔝](#menu) From 818a7070d7efc9c3971b24cdebd4e62431d4a666 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 17 May 2023 10:49:47 +0200 Subject: [PATCH 412/578] Update index.md Galaxy M1 done --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 23ed04f96cd..92ed6993f06 100644 --- a/applications/index.md +++ b/applications/index.md @@ -45,7 +45,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Interstellar](https://www.interstellar.gg/) | [Interstellar - Wallet Phase 2](./Interstellar-network2.md) | [GitHub](https://github.com/Interstellar-Network) | ☐ | ☐ | ☐ | | [Valletech AB](https://valletech.eu/) | [DINFRA](./DINFRA.md) | [GitHub](https://gitlab.com/polkawatch) | ☐ | ☐ | ☐ | | [DAuth](https://github.com/DAuth-Network) | [DAuth](./dauth_network.md) | [GitHub](https://github.com/DAuth-Network) | ☐ | ☐ | ☐ | -| [Galaxy.Do](https://galaxy.do) | [Galaxy: Three-dimensional Web for Polkadot Users](./galaxy.md) | [GitHub](https://github.com/7flash) | ☐ | ☐ | ☐ | +| [Galaxy.Do](https://galaxy.do) | [Galaxy: Three-dimensional Web for Polkadot Users](./galaxy.md) | [GitHub](https://github.com/7flash) | ☐ | ☒ | ☐ | | [Web3 Labs Ltd](https://www.web3labs.com/) | [Sirato (Epirus) Substrate Explorer - Phase III](./sirato_substrate_phase3.md) | [GitHub](https://github.com/web3labs) | ☐ | ☐ | ☐ | | [Collective Intelligence Labs](https://collectiveintelligence.dev/) | [Omnichain Infrastructure](./CILA-omnichain-infrastructure.md) | [GitHub](https://github.com/Collective-Intelligence-Labs) | ☐ | ☐ | ☐ | | [TradeLink](https://tradelink.pro/) | [Sandox](./sandox.md) | [GitHub](https://github.com/BEARlogin) | ☐ | ☐ | ☐ | From b3a212437fda18c61377dc9dd1ab0a1d095784e7 Mon Sep 17 00:00:00 2001 From: Dennis Zoma <3930150+wottpal@users.noreply.github.com> Date: Wed, 17 May 2023 16:03:03 +0200 Subject: [PATCH 413/578] XCM Domain Service (#1733) --- applications/xcm-domain-service.md | 246 +++++++++++++++++++++++++++++ 1 file changed, 246 insertions(+) create mode 100644 applications/xcm-domain-service.md diff --git a/applications/xcm-domain-service.md b/applications/xcm-domain-service.md new file mode 100644 index 00000000000..a9117dde086 --- /dev/null +++ b/applications/xcm-domain-service.md @@ -0,0 +1,246 @@ +# XCM Domain Name Service + +- **Team Name:** Scio Labs (AZERO.ID) +- **Payment Address:** USDC (Ethereum Mainnet) to scio.eth - 0x8068a383797811734Cb4fAA1Cc8111897C461915 +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +### Overview + +- Tagline: + +Research ink! based domain service integrated with XCM + +- Brief Description: + +Our team secured first place in the ETHWarsaw hackathon in 2022 with AZERO.ID, an on-chain domain service using ink!, by winning the Aleph Zero Foundation's bounty. The team has since developed a sophisticated on-chain NFT domain platform in ink! v4, and is set to launch on the Aleph Zero mainnet. Our next objective is to expand the platform to the Dotsama ecosystem and leverage its full potential by enhancing it with the use of XCM. Moreover, we have already challenged the potential value creation for the Polkadot ecosystem with different people at Parity. + +- An indication of how your project relates to / integrates into Substrate / Polkadot / Kusama: + +AZERO.ID is the first sophisticated on-chain domain name service natively written in ink!. Because at Scio Labs, we envision a future where Substrate smart contracts are predominantly WASM-based. Our plans include launching the initial version of our protocol on the Aleph Zero mainnet as well as our new landing page and dApp soon. We plan to enhance our platform by utilizing XCM, to evolve into a unified Dotsama/Substrate domain name service. As the shift towards WASM-based smart contracts gains momentum, we believe the Dotsama ecosystem is ready for a native on-chain domain system that offers interoperability and usability across all Parachains. + +- An indication of why your team is interested in creating this project: + +We harbor a profound interest in the domain of on-chain identity with the belief in Substrate and ink! as the leading tech stack for the future of web3. Bringing our domain platform to Dotsama will not only demonstrate the capabilities of ink! and XCM, but add a lot of utility for users in the Dotsama ecosystem. Also, we love to craft great end-to-end user-facing applications well beyond just the infrastructure layer. + +A unified on-chain domain standard significantly improves the user experience of handling cross-parachain transactions. Further, on-chain NFT domains are the key primitive of a user's on-chain identity and can be integrated into any kind of application. Our domains provide additional utility via a flexible metadata storage field to store DIDs, verifiable credentials, and subdomains to enable organizational and enterprise use cases. Further, tradeable on-chain NFT domains are a tangible product that increases demand for Polkadot block space and improves ecosystem adoption, as previously seen on Ethereum and other chains. + +### Project Details + +- The problem(s) that you want to investigate, and why these are important: + +We aim to resolve the challenge of identifying the optimal technical architecture for a Dotsama-wide on-chain NFT domain service and how XCM can be leveraged to achieve this. Thus, before we can build an XCM-based domain service in ink!, we will need an in-depth understanding of the XCM technology, currently available standards, and their limitations. Once we have developed a deep understanding, we will identify all potential levels of integration, assess their feasibility, and finally propose the technical architecture of an XCM-based domain service. + +- Research questions/hypothesis: + +Find below a list of research questions we have identified. This list is not final; other questions might arise in the research process. + + * To what extent is it possible to make XCM calls via ink! smart contracts at the moment, and what will improve in the foreseeable future? + + * Does XCM support calls between different smart contract languages? Like ink! <> Solidity. + + * What does a cross-chain domain service via XCM actually mean? + + * How can XCM be used to achieve "cross-parachain" domain-to-domain asset transfers? + + * How is the gas & registration/renewal fee payment handled? + + * Is XCM needed for cross-chain domain ↔ address resolving? + + * Can domains be registered from every parachain via XCM? How can a unique namespace be maintained across parachains? + + * Can XCM be used to enable cross-chain NFT domain trading and transfers? + + * Are domain/NFT assets stored on a single chain only? Or, if they are stored on multiple chains how are they tracked on the other ones accordingly? + + * What ink! NFT standard can be used for the best compatibility across the XCM ecosystem? Should a new one be proposed? + + * Can XCM enable smart contracts to access the metadata storage field of our domains regardless of where the smart contract is deployed, and the NFT domain is stored? + + * What general security implications must be considered when building a cross-chain domain system with XCM? + + * What happens if a domain is updated on one chain while it is being used to transfer assets on another chain at the same time? What kind of other race conditions could occur? + +- Methodology that will be applied: + + * Acquire in-depth knowledge about XCM from all available resources. + * Identify the design principles to consider while building an XCM-based dApp. + * Evaluate different ways (like teleportation vs reservation) to accomplish a given task and identify its pros & cons. + * Propose a plausible high-level architecture of a cross-chain domain service implemented in ink! and integrated with XCM. + +- Expected results and how they would be double-checked by the grants team (reproducibility of the data analysis): + + * The first milestone will yield a report on our analysis of XCM and list potential domain integration options without assessing their feasibility. + * The second milestone that concludes the scope of this research project delivers a detailed assessment of the potential ways to integrate XCM and proposes a high-level architecture of a cross-chain DNS using XCM. + +- Intended venue for results publication and the timeline for publication: + + * The results will be published for public access in the form of a Litepaper, and a reference is submitted to the `w3f/Grant-Milestone-Delivery`. Additionally, we plan to communicate the results in a dedicated blog post & our social channels. + +- What your project is _not_ or will _not_ provide or implement + + * This project's scope does not include any form of the actual development of the proposed solutions in the final deliverable. The development of a PoC and, moreover, production-ready implementation could be subject to follow-on grants. Though, we'll provide a technical deliverable in the form of a public repository that showcases some sample cross-chain contract interactions with ink! & XCM (see Milestone 2). + +### Ecosystem Fit + +- Where and how does your project fit into the ecosystem? + + * Our project aims to become the standard for on-chain domains on Polkadot, Kusama, and any Substrate chain such as Aleph Zero. Our protocol and NFT domains are developed with ink! and therefore prepared for the future of WASM-based smart contracts on Substrate. + +- Who is your target audience (parachain/dapp/wallet/UI developers, designers, your own user base, some dapp's userbase, yourself)? + + * There are different target audiences for our NFT domains. First and foremost, our domains target any user on Substrate chains. On-chain domains are the first step in establishing an on-chain identity and improving the UX for on-chain interactions. Second, our project addresses all wallet providers as well as dApp/UI & parachain developers who are interested in implementing the user's on-chain domains. + +- What need(s) does your project meet? + + * Having a unified NFT domain standard on the smart contract level that works across all Substrate chains and is natively developed with ink!. + * Improving the user experience for all Polkadot/Kusama and Substrate chain users + * Attracting more users to Polkadot/Kusama and Substrate chains + * Improving the security for Polkadot/Kusama/Substrate users by preventing address poisoning and other wallet address-related phishing attacks + * Reducing the likelihood of losing funds by error-prone handling of wallet addresses while transferring assets + * Demonstrating the capabilities of Substrate's user-facing application layer with great UX & Frontend. + +- Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem? + + * Polkadot Name Service + * ASTR Domains (Astar Domains Service) + +- If so, how is your project different? + + * We are developing the very first sophisticated NFT domain name service fully written in ink!. Moreover, we are focusing on creating a standard that works across the whole Polkadot/Kusama ecosystem by integrating XCM. Our NFT domains include some unique functionalities, such as a flexible metadata storage field that enables the attachment of any kind of metadata to the domain. Further, we deliberately focus on crafting great user-facing applications with unmatched UX in the space of decentralized domain name services. + + +## Team :busts_in_silhouette: + +### Team members + +- Name of team leader + + * Dennis Zollmann + +- Names of team members + + * Mike Schneider + * Nimish Agrawal + + +### Contact + +- **Contact Name:** Mike Schneider +- **Contact Email:** hello@scio.xyz +- **Website:** https://scio.xyz + +### Legal Structure + +- **Registered Address:** Am Neuen Markt 9 E-F, 14467 Potsdam, Germany +- **Registered Legal Entity:** Scio Labs UG (haftungsbeschränkt) + +### Team's experience + +**Dennis Zollmann** +- B.Sc. Computer Science, Friedrich Schiller University Jena +- 10+ years of experience in writing professional software +- Serial hackathon winner (EthAmsterdam, EthCC Paris, EthBerlin, EthWarsaw) +- Successfully worked on grants by AAVE, The Graph, Toucan Protocol, and Aleph Zero +- Co-Founder of [Scio Labs](https://scio.xyz) & [AZERO.ID](https://azero.id) + +**Nimish Agrawal** +- B.Sc. Computer Science, Indian Insitute of Information Technology +- Prev. Rust/Substrate Developer @Laguna Labs & Core Developer @Nethermind +- Serial hackathon winner (DotGlobal, ETHIndia, Polkadot APAC, Polkadot LATAM, Avalanche Developer Contest, etc. ) +- International Algorithmic computational research challenge - PACE winner +- Experience building WASM contracts, e.g., AMM, P2E gaming platform, fractional/dynamic NFTs & more. + +**Mike Schneider** +- B.Sc. Management & Economics and M.Sc. Finance, EBS University +- Hackathon winner @EthWarsaw & grant received from Aleph Zero +- Prev. worked in Venture Capital & Venture Building +- Experience in researching web3 business models, token economics, and technologies +- Co-Founder of [Scio Labs](https://scio.xyz) & [AZERO.ID](https://azero.id) + +### Team Code Repos + +- https://github.com/scio-labs +- https://github.com/azero-id +- https://github.com/wottpal +- https://github.com/realnimish + +### Team Twitter Profiles + +- https://twitter.com/dennis_zoma +- https://twitter.com/mike1third +- https://twitter.com/realnimish + +### Team LinkedIn Profiles + +- https://www.linkedin.com/in/dennis-zoma/ +- https://www.linkedin.com/in/realnimish/ +- https://www.linkedin.com/in/mike1third/ + +## Development Status :open_book: + +- https://medium.com/@azero-domains +- https://github.com/wottpal/azero.domains (hackathon project) +- https://azero.id (soon to be relaunched) +- https://github.com/azero-id/ (most repositories are still in stealth, but soon to be open-sourced) + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 2 months +- **Full-Time Equivalent (FTE):** 1,5 FTE +- **Total Costs:** 30,000 USD + +### Milestone 1 — XCM & Integration Research + +- **Estimated duration:** 1 month +- **FTE:** 1 +- **Costs:** 10,000 USD + + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | Copyright and Licenses | GPLv3 | +| **0b.** | Documentation/Tutorial | We will document the entire research process | +| **0c.** | Methodology | Research XCM and derive potential integration paths | +| **0d.** | Article | We will provide a report summarizing our research on XCM and giving an overview of potential integration, paths including applicable answers to our initial research questions | +| 1. | List of resources regarding XCM, cross-chain domains/NFTs | We will provide a publicly accessible list of all sources we used for the research. | +| 2. | Information to be extracted from the resources | We will provide a breakdown of the most relevant information gathered. | +| 3. | Analysis procedures | With the information gathered above regarding XCM and our understanding of domain name services, we are going to describe potential integration verticals between both. The technical assessment and architectural explorations will be conducted in the next milestone. | + + +### Milestone 2 — Technical Assessments & Architecture Proposal + +- **Estimated Duration:** 1 month +- **FTE:** 2 +- **Costs:** 20,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | Copyright and Licenses | GPLV3 | +| **0b.** | Documentation/Tutorial | We will document the entire research process | +| **0c.** | Methodology | Perform technical assessment of the integration paths derived in Milestone 1 and propose a technical architecture of an XCM-based domain name service | +| **0d.** | Article | We will provide a report summarizing our assessments and will propose a high-level technical architecture of the favored solution(s) | +| 1. | Technical Assessments | We will reiterate the proposed integration options from Milestone 1 and assess their technical feasibility. | +| 2. | Architecture | Based on the assessments, we'll propose a feasible architecture for an XCM-based domain name service standard incl. sequence diagrams of the more complex cross-chain interactions, function interface definitions, and also some pseudocode-like implementations of interesting parts. This might include suggestions regarding further XCM/ink! developments or the necessity for certain new standards. Also, a separate PSP/PPP standard could be derived and then implemented in future efforts. | +| 3. | Technical Deliverable (pallet-contracts-xcm) | We'll supply a Dockerfile starting up two Substrate nodes being able to exchange XCM-messages via ink! & [pallet-contracts-xcm](https://github.com/paritytech/pallet-contracts-xcm). In the latter we're going to resolve issues [#6](https://github.com/paritytech/pallet-contracts-xcm/issues/6) & [#7](https://github.com/paritytech/pallet-contracts-xcm/issues/7) in a fork. | +| 4. | Technical Deliverable (ink!) | With 1-2 ink! smart contracts (depending on the assessed techniques from the preceding research items), we'll develop a simplified address-to-domain mapping that can be registered across these two nodes and maintains a unique namespace. | + + +## Future Plans + +- We plan to leverage the outcome of this research grant to develop this very XCM-based domain name service for the Dotsama & Substrate ecosystem and set the new standard for on-chain domains on Polkadot and Kusama. As mentioned above, this could also mean deriving a new Polkadot Standards Proposal (PSP) from this. +- We will be working together with Parachain-, wallet-, and dApp-teams to foster the adoption of our domains and create value and utility via integrations for the users. +- We envision the project to translate into a fully community-owned DAO with on-chain governance. With social consensus, we will develop AZERO.ID and its upcoming XCM-enhanced counterpart to become core pillars for on-chain identity. + + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Web3 Foundation Website / Medium / Twitter / Element / Announcement by another team / personal recommendation / etc. +Recommended from several sources and contacts in the Dotsama ecosystem. + +Here you can also add any additional information that you think is relevant to this application but isn't part of it already, such as: + +The initial development and audit of the first version of the AZERO.ID platform has been financed via a grant from the Aleph Zero Foundation. AZERO.ID (via Scio Labs) is a member of the [Aleph Zero Ecosystem Funding Program](https://alephzero.org/ecosystem-funding-program). The project has not yet received any additional grant funding beyond that. \ No newline at end of file From 4f0c729094b8a28b05a82e5ba52dabb6679d46a2 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Wed, 17 May 2023 15:33:33 -0300 Subject: [PATCH 414/578] Update index.md to check diffy messenger first delivery (#1747) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 92ed6993f06..20a6fb09720 100644 --- a/applications/index.md +++ b/applications/index.md @@ -99,7 +99,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Jonathan Brown](https://acuity.social/) | [Hybrid Explorer](hybrid.md) | [GitHub](https://github.com/acuity-social) | ☐ | ☒ | ☐ | | [ParaSpell](https://github.com/paraspell) | [ParaSpell_Follow Up 2](ParaSpell_follow-up2.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | | [justmert](https://github.com/justmert) | [PolkaFlow](polkaflow.md) | [GitHub](https://github.com/justmert) | ☐ | ☐ | ☐ | -| [BelSoft](https://www.belsoft.rs) | [Diffy messenger](Diffy_chat.md) | [GitHub](https://github.com/1db1) | ☐ | ☐ | ☐ | +| [BelSoft](https://www.belsoft.rs) | [Diffy messenger](Diffy_chat.md) | [GitHub](https://github.com/1db1) | ☐ | ☒ | ☐ | | [Zkverse](https://github.com/Zkvers) | [Zkverse](zkverse.md) | [GitHub](https://github.com/Zkvers/substrate-zk) | ☐ | ☐ | ☐ | | [Taiwan Research-based Biopharmaceutical Manufacturers Association](https://trpma.org.tw/cmn) | [Claps Health](Claps.md) | [GitHub](https://github.com/Claps-Health/) | ☐ | ☐ | ☐ | | [Tolga Yaycı](https://github.com/tolgayayci) | [Awesome Polka](Awesome-Polka.md) | [GitHub](https://github.com/tolgayayci/awesome-polka/tree/dev) | ☐ | ☐ | ☐ | From 964e6dc144ad0db654e2cfabe1d64b1318d2d17e Mon Sep 17 00:00:00 2001 From: Deep Ink Ventures <120174523+deep-ink-ventures@users.noreply.github.com> Date: Thu, 18 May 2023 19:35:13 +0200 Subject: [PATCH 415/578] Stylograph [GenesisDAO] (#1725) * Create Stylograph.md * Update Stylograph.md * Update Stylograph.md * Update Stylograph.md * Update Stylograph.md * added tech stack * Time update --------- Co-authored-by: x-xo <99559869+x-xo@users.noreply.github.com> --- applications/Stylograph.md | 206 +++++++++++++++++++++++++++++++++++++ 1 file changed, 206 insertions(+) create mode 100644 applications/Stylograph.md diff --git a/applications/Stylograph.md b/applications/Stylograph.md new file mode 100644 index 00000000000..1d9f7c52261 --- /dev/null +++ b/applications/Stylograph.md @@ -0,0 +1,206 @@ + +# Pallet Stylograph + +- **Team Name:** GenesisDAO by Deep Ink Ventures GmbH +- **Payment Address:** Ethereum Mainnet, 0x918a4363C35156c8F85F86795a79189e5A1ef557, USDC +- **Level:** 3 + +## Overview + +> **Stylograph** [ stahy-luh-graf, -grahf ] +> +> *A writing instrument for applying ink to paper.* + + +Stylograph is a framework aimed at enhancing the functionality of substrate-based chains in the Polkadot ecosystem with plugin-like functionality. + +By using the ink! programming language, third party developers can extend the core functionality, while focussing on the domain logic. + +The total ask for this proposal is $100,000 and it is planned to have a subsequent development to use this functionality within Genesis DAO (see the last grant, [future plans section](https://github.com/w3f/Grants-Program/blob/master/applications/GenesisDAO.md#future-plans)). + + +## Project Details + +### Introduction +A group of people surrounding Ken Thompson and Dennis Ritchie were quite busy at Bell Laboratories shaping the world as we know it today. They invented a milestone in programming languages — C, the breakthrough operational system Unix, the first shell, UTF-8 and a long list of others that alone would have been enough to receive a Turing award. + +How were they so productive? Of course, the density of talent at Bell Labs was as high as within the Beatles (before John married) — but one tiny detail helped drive them. And that can be summed up in one word: focus. Finding out what holds the application together in its innermost folds and excelling at that. It takes writing programs that do one thing and do it well. Today, this set of guiding principles is popularly known as the Unix philosophy. + +This fundamental building block of system design is what guides Substrate development today. The Polkadot ecosystem is a set of domain-specific chains that focus on building the infrastructure for the web3 universe. + +The ink! programming language can be run on Substrate chains, either as a [core value proposition](https://use.ink/how-it-works#use-case-1-smart-contracts-as-first-class-citizens) - with the chain being an ecosystem for protocols developed in ink! on top of it - or as [second class citizens](https://use.ink/how-it-works#use-case-2-smart-contracts-as-second-class-citizens) - with protocols being able to build on top of the domain logic. + +*Stylograph* introduces a third use-case by utilizing ink! as a configuration language to alter the domain specific language itself by introducing a simple and straightforward framework to inject loosely-coupled hook points into your pallets that will call smart contract functionality in registered contracts on the contracts pallet. + + +### Motivation +Deep Ink Ventures is building a system parachain for the Polkadot ecosystem that is building infrastructure for Decentralized Autonomous Organizations - Genesis DAO. + +At *Genesis DAO* we are committed to the Unix philosophy. + +We focus on the DAO management with the core components of creating and running DAOs, overseeing token issuance and DAO treasury and having a rock-solid proposal and voting infrastructure. + +However, DAOs can have small and granular requirements that do require small tweaks and adjustments. Sometimes on-top protocols like Yield Aggregators require additional functionality. Some of those changes may be deal breaking for technical use cases or legal reasons and therefore a hard requirement for newly founded DAOs. + +The core team ultimately has to decide what features are reasonably part of an unbloated core and there is no one-size-fits-all solution to a lot of problems. This is where Stylograph comes to the rescue. + +### Framework Components Overview + +The following is an overview of the architecture we build and is merely to sketch the scope and general concept. Implementation details may vary. + +#### pallet_stylograph +This pallet acts as an abstraction layer on top of pallet_contracts in order to conveniently create callback based implementations. + +The pallet will have initial support for *ink!*. The concept is easily extendable for other languages such as *Solidity* or *ask!* that can be added. + +![image](https://user-images.githubusercontent.com/120174523/236872194-471198c3-48d8-4acc-842b-0ac450929908.png) + + +Since Substrate does not know about the structure of smart contracts deployed in ink! beforehand, Substrate developers utilizing Stylograph need to register the function signature they want to support for callbacks. + +This is a one-liner in the chain specs: + +Stylograph is now aware of a function given by signature, function name or trait definition and knows its associated gas limit. + +![image](https://user-images.githubusercontent.com/120174523/236872381-418dacb9-e776-4f5f-af0a-1c133196c2dc.png) + +With the callback defined, the core developers now can add callback functions into their pallets that extension developers can utilize. + +For example, the function above may alter the original vote in order to come up with a more complex algorithm (and it is therefore valuable to carefully select the arguments for the callback function for extension developers to be flexible). + +An example might be something like this: + +![image](https://user-images.githubusercontent.com/120174523/236872439-2b1cc9aa-0a5f-4982-9fc2-723828e7cfb5.png) + + +The next part is the registration of extensions by accounts - the second argument given in the callback above. + +The Substrate node implementation can decide how they want to interpret this - e.g. if the extensions are per account or if the account represents an entity on the chain. The latter is true for _Genesis DAO_ where the account needs to be the owner of the DAO. Each DAO can register its own hookpoints to tweak the core to its needs. + +![image](https://user-images.githubusercontent.com/120174523/236872530-d4cd6aec-03f5-4221-8cd8-a67a2b04da5f.png) + + +The framework now has all the information at hand to execute a fully abstracted _pallet_contracts::bare_call _and to handle errors associated with it: + +1. The user calls the extrinsic of the implementing pallet. In the case of GenesisDAO that might be the _dao_votes_ pallet to intercept the voting process in order to alter the majority voting to a different decision system. +2. This pallet executes the callback that takes the information given from the _dao_votes_ panel and looks up the callback definitions registers. +3. It constructs a call to the ink! contract defined. + +![image](https://user-images.githubusercontent.com/120174523/236873188-5fc04a21-6d59-41c3-921a-37a8e2ece739.png) + +The gas fees are therefore called by the person utilizing the functionality - the user calling the initial extrinsic. + + +#### ink! Stylograph Facade Builder + +The aforementioned information is enough to automagically generate a full boilerplate contract as template that Substrate chain developers can use to deploy a sample contract and to write a macro that defines the interface that the runtime expects. + +This contract can be released to the extension developer community to use as a boilerplate template. They can as well import the trait for the contract to be sure that they are compatible with the specs defined by the runtime. + +![image](https://user-images.githubusercontent.com/120174523/236872845-248bc23e-a96b-4008-8e9e-6d6cf1756d35.png) + +We therefore are building a CLI tool to package a versioned ink! crate with installation steps and base documentation that can be published with a new runtime release of the chain to give protocol and extension developers a headstart to extension development. Both the chain and the contract will depend on those traits as dependency to identify the interface. + +![image](https://user-images.githubusercontent.com/120174523/236881416-f7d622dc-2993-4b84-99c3-4b1835970372.png) + +## Additional Development +As this is planned to be part of our to-be-planned-system-parachain, we are as well pushing the development of the main chain within this proposal. + +### Token Transfer +Currently we rely on wallet extensions and polkadot.js.org to transfer DAO tokens around that reside on Genesis DAO. We have a primitive frontend UI in our MVP but would like to expand this to a more user friendly interface. + +We have already created some designs to show the direction, but this would include full wireframes, designs + additions to our backend services and, of course, the dApp: + +![image](https://github.com/deep-ink-ventures/Grants-Program/assets/120174523/f5c0bdf2-1600-4264-bda5-75a7708c1459) + +## Council Management +We’ve already created the multisignature part of council and treasury management within our product / wireframe and design department and want to roll out a Gnosis Safe - Style interface for this as part of the treasury management. + +We are using pallet_multisig for this and currently council members need to go via polkadot.js.org, not the most user friendly interface in the world. + +This would again include the full wireframes, desings and code changes in the backend and frontend. We have already implemented the multisig part. + +![image](https://github.com/deep-ink-ventures/Grants-Program/assets/120174523/68608920-3a08-4658-bb84-2f1852b42053) + +## DAO Dashboard Add-On + +We are createing a few designs to make the DAO Dashboard more friendly and intuitive for users and want to do the frontend implementation as well as the respective adjustments to the APIs of our backend service. + +![image](https://github.com/deep-ink-ventures/Grants-Program/assets/120174523/3d1a5587-3bef-4d84-ad96-1a5c99c0d4c8) + + +## Ecosystem Fit + +While we have drafted this pallet with the next iteration of the Genesis DAO chain in mind ([here are some planned plugins and extensions for inspiration](https://docs.google.com/document/d/1yyEBa43plj-PzlrEnK6JT5CKqyvBDUrYiR1N6984fhk/edit#heading=h.nfot0twi37l)), the presented functionality is carefully abstracted into a reusable component system. + +Stylograph is to Substrate what plugins and and extensions were for CMS, Shops in web2 - a smooth way for third parties to extend the core functionality for a chain. It enables Substrate developers to concentrate on doing their domain logic well whilst their users and protocols building on top maximize flexibility and time-to-market. + +You can think of this as the inverse to chain extension. While chain extension gives plugins a way to interact with the underlying core logic, stylograph gives chain developers an easy framework to make their core extendable with plugins and extensions via smart contracts. They can be used by any chain that wants to have a growing extension ecosystem. + + + +## Team + +### Contact + +- **Contact Name:** Jakob Drzazga +- **Contact Email:** admin@deep-ink.ventures + +### Legal Structure + +- Deep Ink Ventures GmbH, registered with the commercial register at the local court of Berlin, HRB 247342 + + +## Development Roadmap + +### Overview + +- **Total Estimated Duration:** 4-5 month +- **Full-Time Equivalent (FTE):** 3-4 FTE +- **Total Costs:** $ 100,000 + + +## Development Status :open_book: + +The development will happen on https://github.com/deep-ink-ventures/genesis-dao-node as we test the functionality in a full chain, but the pallet will be released as it's own crate. + +## Development Roadmap :nut_and_bolt: +### Milestone 1 + +- **Estimated duration:** 3 month +- **FTE:** 3-4 +- **Costs:** 70,000 + +| Number | Deliverable | Specification | +| -----: |-----------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a can integrate the pallet and start working with | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Benchmarking | We will provide benchmarking & weights for the pallet | +| **0e.** | State of the art Tech Stack | We will use next.js/react for all frontend components, python / django for the backend services and rust for developing the substrate components| +| 1. | Pallet Development | Develop the pallet as specified within the `pallet_stylograph` section above. | +| 2. | Frontend Integration: Dashboard Add-On | Develop full wireframes and designs + Frontend, Backend integration, deployed on https://genesis-dao.org. | +| 3. | Frontend Integration: Token Transfer | Develop full wireframes and designs + Frontend, Backend integration, deployed on https://genesis-dao.org. | + + + +### Milestone 2 + +- **Estimated Duration:** 2 month +- **FTE:** 3-4 +- **Costs:** 30,000 USD + + +| Number | Deliverable | Specification | +| -----: |------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a can integrate the pallet and start working with | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | State of the art Tech Stack | We will use next.js/react for all frontend components, python / django for the backend services and rust for developing the substrate components| +| 1. | Facade Builder | Develop the code generator for smart contracts as specified above in the `ink! Stylograph Facade Builder` section. | +| 2. | Refrence Implementation | We will provide a sample implementation alongside with `pallet_contracts` on the Genesis DAO test chain to demonstrate the functionality. | +| 3. | Frontend Integration: Councils Management | Develop full wireframes and designs + Frontend, Backend integration, deployed on https://genesis-dao.org. | + + +## Future Plans +Our future plan is to include (and therefore maintain and extend) this pallet within our Genesis DAO Chain. The exact game plan is laid out [here](https://docs.google.com/document/d/1yyEBa43plj-PzlrEnK6JT5CKqyvBDUrYiR1N6984fhk/edit). From 8d4abeb55cdc2b9477456df0dd640a29b4e01e6a Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Fri, 19 May 2023 02:40:33 -0400 Subject: [PATCH 416/578] Update index.md (#1751) updated index to reflect Kuma Wallet name change. --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 20a6fb09720..a3bd4cff836 100644 --- a/applications/index.md +++ b/applications/index.md @@ -72,7 +72,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☒ | ☐ | | [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | | [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☒ | ☐ | -| [Blockcoders](http://blockcoders.io/) | [Cross-chain Wallet - XCW](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☐ | +| [Blockcoders](http://blockcoders.io/) | [Kuma Cross-chain Wallet](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☐ | | [OmniBTC](https://omnibtc.finance/) | [Polkadot Smart Chain](psc.md) | [GitHub](https://github.com/OmniBTC/PSC) | ☐ | ☒ | ☒ | | [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☒ | ☒ | | [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | From f37a43566bf96c765701197a43be64bcca4aba4f Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 19 May 2023 08:48:55 +0200 Subject: [PATCH 417/578] Update index.md Stylograph --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index a3bd4cff836..a962afea0b3 100644 --- a/applications/index.md +++ b/applications/index.md @@ -57,6 +57,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [CoinFabrik](https://www.coinfabrik.com/) | [ScoutCoinFabrik: Milestone 2](ScoutCoinFabrik_2.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | | [Polytope Labs](https://research.polytope.technology/) | [Interoperable State Machine Protocol](ismp.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | | [Talentica Software](https://www.talentica.com/) | [Implementation Benchmarking Milestone 3](ink-pallet-benchmarking-phase-2.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | +| [Deep Ink Ventures GmbH](https://github.com/deep-ink-ventures) | [Stylograph](Stylograph.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☐ | ☐ | [🔝](#menu) From 32640895837d6262e54bcccf2ca7aa2e72337635 Mon Sep 17 00:00:00 2001 From: Radhe Shyam Zeeve <98081359+radhe-zeeve@users.noreply.github.com> Date: Fri, 19 May 2023 12:50:05 +0530 Subject: [PATCH 418/578] Ink Playground IDE Improvements (#1731) * Create Zeeve_Parachain_deployment_zoombienet_testing_automation.md * Added mockups, technology stack and refine the deliverables as requested * url update for images * updated the milestones and grant scope * updated the milestones and grant scope * updated the milestones and grant scope * removing artical from 1st milestone * add ink playground ide improvements Signed-off-by: Jasti Sri Radhe Shyam --------- Signed-off-by: Jasti Sri Radhe Shyam Co-authored-by: gnv-zeeve <74914749+gnv-zeeve@users.noreply.github.com> Co-authored-by: arjun.chamyal --- .../ink-playground-ide-improvements.md | 154 ++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 applications/ink-playground-ide-improvements.md diff --git a/applications/ink-playground-ide-improvements.md b/applications/ink-playground-ide-improvements.md new file mode 100644 index 00000000000..0ef50586b16 --- /dev/null +++ b/applications/ink-playground-ide-improvements.md @@ -0,0 +1,154 @@ +# Ink Playground IDE Improvements Grant + +- **Team Name:** [Zeeve](https://www.zeeve.io) +- **Payment Address:** Ethereum (USDT/USDC) 0x5E1257E928aa42E3D0cd9E2A7537E37D108D811B +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Overview +The adoption of any technology depends on the accessibility and ease of use to both the maintainer and user, blockchain +or distributed ledger technologies are inherently a lot difficult to understand and maintain, so we have to build tools +to make the process much easier and painless. In the case of Polkadot's substrate based smart contract development we have +Ink! playground which helps smart contract developers to prototype and test it before deploying on the parachain in a +Sandboxed environment with having to do time-consuming setup of dependencies and also with ability to set up a local +environment to do development. + +## Project Details + +The community posed few challenges and issues to improve the Ink! Playground to keep up with the Ink's advancements and +have Ink's own docs with ability to execute the examples with multi version support, the following issues were proposed +by the Grant team to resolve: + +- [Support supplying ink! version in URL · Issue #427 · paritytech/ink-playground](https://github.com/paritytech/ink-playground/issues/427) +- [Update playground automatically upon new ink! release · Issue #197 · paritytech/ink-playground · GitHub](https://github.com/paritytech/ink-playground/issues/197) +- [Implement versioning for ink! playground · Issue #460 · paritytech/ink-playground · GitHub](https://github.com/paritytech/ink-playground/issues/460) +- [Support running code from crate docs · Issue #428 · paritytech/ink-playground · GitHub](https://github.com/paritytech/ink-playground/issues/428) + +The brief overview of the issue resolution: + +- **Dependency Versioning**: Provide an API and UI components to set dependency versions for the contract, which will + help developers to build for targeted systems and environments. +- Automated **Ink! Version upgrade** in Ink! Playground system when new Ink! Version releases. +- Ability to select **Ink! version** to compile the code in the IDE. +- In Ink! **Crate docs** code examples can be executed using the Ink! Playground backend with Ink! version support. + +Additionally, we would like to propose further enhancements to the Ink! Playground which will benefit the Polkadot community +by easing the development process with better Developer Experience. We are excited to work on the following enhancements +once we complete the aforementioned improvements and build upon to provide maintenance of the Ink! Playground. + +- **Local file system storage:** Use the local file system for contract storage which will help developers + to open and save the file without leaving the IDE. +- **Template contracts:** Provide contract templates similar to the Ethereum contract standards based on + the popular use cases. +- **Ability to run contract functions** based on the metadata generated for a contract, this + will help developers to prototype, test and debug the contracts faster. +- **Deploy contracts from the IDE:** Deploy the contracts to the remote contract execution environment by + providing the remote endpoint. +- **Recent contracts:** List all the recent contracts that were saved for faster access to previously edited + contracts. + +## Team :busts_in_silhouette: + +### Team members +- Ghan Vashishtha +- Sankalp Sharma +- Jasti Sri Radhe Shyam + +### Contact +- **Contact Name:** Ghan Vashishtha +- **Contact Email:** ghan@zeeve.io +- **Website:** www.zeeve.io + +### Legal Structure +- **Registered Address:** 1603 Capitol Ave Ste 310, Cheyenne 82001, WY +- **Registered Legal Entity:** Zeeve Inc. + +### Team's experience + +Founded by a team of experienced professionals and entrepreneurs from industry, Zeeve's co-founders +collectively have over 45+ years of experience in technology, product development, and various +business verticals. Zeeve has built an enterprise-grade no-code Blockchain Infrastructure Automation +platform that enables Enterprises, Blockchain Startups, Blockchain Consulting Companies and Web3 +Developers to deploy Blockchain nodes and Decentralized Apps within minutes, and manage them with +advanced analytics and real-time alerts. In June 2022, the Startup raised $2.65 Million in a Seed +Round from Leo Capital and Blu Ventures. It plans to deploy the funds towards product development, +augmenting the technology team and enhancing its reach among DApp developers and global corporations, +please consider visiting our prior [work](https://www.zeeve.io/platform). + +### Team Code Repos + +- https://github.com/Zeeve-App +- https://github.com/Zeeve-App/sawtooth-artifacts +- https://github.com/Zeeve-App/Zeeve-read-the-docs +- https://github.com/Zeeve-App/larch + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/ghan-vashishtha/ +- https://www.linkedin.com/in/sankalp-sharma-502008139/ +- https://www.linkedin.com/in/jastisriradheshyam/ + +## Development Status :open_book: + +Before applying for the Web3 Foundation Grant, the Zeeve team has built a DevOps automation for Polkadot and other substrate chains, also created substrates based relay chains: + +- Automated Polkadot deployments including validator nodes, archive nodes [here](https://www.zeeve.io/blockchain-protocols/deploy-polkadot-node/) +- Automated Kusama deployments including validator nodes, archive nodes [here](https://www.zeeve.io/blockchain-protocols/deploy-kusama-node/) +- Created a relay chain on substrate with some customizations done at the core to accommodate the tokenomics and custom reward mechanism [here](https://axscan.axiacoin.network/#/explorer) +- Published a [blog post](https://www.zeeve.io/blog/how-to-use-substrate-to-create-parachains-in-polkadot/) about the usage and implementation of parachain's +- The focus for Zeeve will be automating the parachain deployments, dedicated node setups and help with faster testing with zombie-net. +- Spoke with David Hawig, Richard Casey and Gautam Dhameja from the Parity team regarding the development of Zeeve and the Web3 Grant application +- Developed Larch, a UI for the Parity's Zombienet - [GitHub - Zeeve-App/larch](https://github.com/Zeeve-App/larch) + +## Development Road-map :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 100 working days +- **Full-Time Equivalent (FTE):** 3 FTE +- **Total Costs:** 24,000 USD. + +### Milestone 1 — Implement Ink's Dependency versioning + +- **Estimated duration:** 90 working days +- **FTE:** 3 +- **Costs:** 21,000 USD + +| Number | Deliverable | Specification | +| -----: | -------------- | ------------- | +| 0.a. | License | Apache-2.0 | +| 0.b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can open and save a file | +| 1. | On demand version specific compilation | We will add the ability to build the compiler environment if a compiler environment is not present with a specific version of Ink! | +| 2. | Dependency Version support | We will upgrade and maintain Ink! and `cargo-contract` dependencies versions up to date and have provision to have older version support | +| 3. | Ink! Upgrades | We will add the ability to add Playground's Ink! version support to latest version as soon as new version of Ink! is released without manual intervention | +| 4. | Select Ink! version from UI | We will add ability to select Ink!'s version from the IDE to compile | + +### Milestone 2 - Ink! crate docs code execution + +- **Estimated duration:** 10 working days +- **FTE:** 3 +- **Costs:** 3000 USD + +| Number | Deliverable | Specification | +| -----: | -------------- | ------------- | +| 0.a. | License | Apache-2.0 | +| 0.b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can open and save a file | +| 1. | Ink! Create docs | We will provide the API and update create docs to run the code examples | + +## Technology Stack + +- Javascript +- CSS +- HTML +- Typescript +- Rust +- Docker + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Web3 Foundation Website / Parity team / a conversation with Richard Casey. + +### References: + +[1]: [What is Parity's ink!? | Parity Technologies](https://www.parity.io/blog/what-is-paritys-ink) + +[2]: [ink/ARCHITECTURE.md at master · paritytech/ink · GitHub](https://github.com/paritytech/ink/blob/master/ARCHITECTURE.md) From 00d2e62ffdc8cd2d2b8398b14f28aaec4f9ae48d Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 19 May 2023 09:21:48 +0200 Subject: [PATCH 419/578] Update index.md Ink Playground IDE Improvements --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index a962afea0b3..cb755c6ca39 100644 --- a/applications/index.md +++ b/applications/index.md @@ -58,7 +58,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Polytope Labs](https://research.polytope.technology/) | [Interoperable State Machine Protocol](ismp.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | | [Talentica Software](https://www.talentica.com/) | [Implementation Benchmarking Milestone 3](ink-pallet-benchmarking-phase-2.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | | [Deep Ink Ventures GmbH](https://github.com/deep-ink-ventures) | [Stylograph](Stylograph.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☐ | ☐ | - +| [Zeeve](https://www.zeeve.io) | [Ink Playground IDE Improvements](ink-playground-ide-improvements.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | [🔝](#menu) From d2c76aaff62de0f8134a5f67b286948813f74158 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 19 May 2023 09:41:15 +0200 Subject: [PATCH 420/578] Update index.md XCM Domain Name Service --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index cb755c6ca39..e61eb2932ad 100644 --- a/applications/index.md +++ b/applications/index.md @@ -59,6 +59,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Talentica Software](https://www.talentica.com/) | [Implementation Benchmarking Milestone 3](ink-pallet-benchmarking-phase-2.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | | [Deep Ink Ventures GmbH](https://github.com/deep-ink-ventures) | [Stylograph](Stylograph.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☐ | ☐ | | [Zeeve](https://www.zeeve.io) | [Ink Playground IDE Improvements](ink-playground-ide-improvements.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | +| [Scio Labs](https://scio.xyz/) | [XCM Domain Name Service](xcm-domain-service.md) | [GitHub](https://github.com/scio-labs) | ☐ | ☐ | ☐ | [🔝](#menu) From 263e51a6d61e4c51151d95f7e14709237dd4fcee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Fri, 19 May 2023 13:55:34 +0200 Subject: [PATCH 421/578] Update and rename alternative-polkadot-js-api-console.md to alternative-polkadot-js-api-console.md --- .../alternative-polkadot-js-api-console.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename docs/RFPs/{Open => Under Development}/alternative-polkadot-js-api-console.md (96%) diff --git a/docs/RFPs/Open/alternative-polkadot-js-api-console.md b/docs/RFPs/Under Development/alternative-polkadot-js-api-console.md similarity index 96% rename from docs/RFPs/Open/alternative-polkadot-js-api-console.md rename to docs/RFPs/Under Development/alternative-polkadot-js-api-console.md index b6be07084b4..fb2017b4f2c 100644 --- a/docs/RFPs/Open/alternative-polkadot-js-api-console.md +++ b/docs/RFPs/Under Development/alternative-polkadot-js-api-console.md @@ -1,6 +1,6 @@ # Alternative javascript console for Polkadot JS API -* **Status:** Open (anyone is allowed to apply) +* **Status:** [Under Development](https://w3f.github.io/Grants-Program/applications/sandox) * **Proposer:** [muddlebee](https://github.com/muddlebee) * **Projects you think this work could be useful for** [optional]: Javascript console at https://polkadot.js.org/apps/#/js From 393230382d9bb9c1fb37ce090e5daa7931ea91ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Fri, 19 May 2023 13:56:17 +0200 Subject: [PATCH 422/578] Update rfps.md --- docs/rfps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/rfps.md b/docs/rfps.md index e1d63e1c666..464c776ce82 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -69,7 +69,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [validator-selection-algorithm.md](RFPs/Under%20Development/validator-selection-algorithm.md) | 🟡 | 07.12.2022 | | [wallet-aggregator-library.md](RFPs/Closed/wallet-aggregator-library.md) | 🔴 | 09.03.2023 | | [xcm-tool.md](RFPs/Open/xcm-tool.md) | 🟢 | 20.07.2021 | -| [alternative-polkadot-js-api-console.md](RFPs/Open/alternative-polkadot-js-api-console.md) | 🟢 | 16.02.2023 | +| [alternative-polkadot-js-api-console.md](RFPs/Under%20Development/alternative-polkadot-js-api-console.md) | 🟡 | 19.05.2023 | ## 📬 Suggest an RFP From a6a0aa5d4c909b625a0dc001752e97ffe63f43d7 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Fri, 19 May 2023 09:07:27 -0300 Subject: [PATCH 423/578] Update index.md (#1752) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index e61eb2932ad..be5927fb5b2 100644 --- a/applications/index.md +++ b/applications/index.md @@ -360,7 +360,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Ruby Protocol](http://rubyprotocol.com/) | [Cryptographic Infrastructure for Data Monetization](./RubyProtocol.md) | [GitHub](https://github.com/Ruby-Protocol) | ☐ | ☒ | ☒ | | [Find Signal Studio PTE. LTD.](https://yieldscan.app/) | [YieldScan Phase 2](./yieldscan_phase_2.md) | [GitHub](https://github.com/yieldscan) | ☐ | ☒ | ☒ | | [PolkaMusic](https://polkamusic.io/) | [Operating decentralized music businesses on blockchain](./polkamusic.md) | [GitHub](https://github.com/polkamusic/PolkaMusic) | ☐ | ☒ | ☐ | -| [element36](https://element36.io) | [FIAT on-off-ramp](./FIAT-on-off-ramp.md) | [GitHub](https://github.com/element36-io) | ☐ | ☒ | ☐ | +| [element36](https://element36.io) | [FIAT on-off-ramp](./FIAT-on-off-ramp.md) | [GitHub](https://github.com/element36-io) | ☐ | ☒ | ☒ | | [Zondax](https://zondax.ch/) | Ledger Asset App | [GitHub](https://github.com/Zondax) | ☐ | ☒ | ☒ | | [Moonbeam Network](https://moonbeam.network/) | [Pallet-dPoS for Parachain Staking](./parachain-staking.md) | [GitHub](https://github.com/PureStake/moonbeam) | ☐ | ☒ | ☒ | | [Dora Factory](https://dorafactory.org/) | [MolochDAO substrate pallets v1 and v2](./dora-factory-molochdao-v1-v2.md) | [GitHub](https://github.com/DoraFactory) | ☐ | ☒ | ☐ | From 1a9e9efc1db74dc4458f15f854c89c6624b29488 Mon Sep 17 00:00:00 2001 From: Mia Barbir <49414517+miabarbir@users.noreply.github.com> Date: Fri, 19 May 2023 15:24:34 +0200 Subject: [PATCH 424/578] Update url and baseUrl config (#1754) --- docusaurus.config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docusaurus.config.js b/docusaurus.config.js index d967c998564..01a82ffdaad 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -6,8 +6,8 @@ const mdxMermaid = require('mdx-mermaid'); module.exports = { title: 'Web3 Foundation Grants', tagline: 'Funding Software Development and Research Efforts related to Polkadot and Kusama.', - url: 'https://w3f.github.io', - baseUrl: '/Grants-Program/', + url: 'https://grants.web3.foundation', + baseUrl: '/', onBrokenLinks: 'warn', // Revert back to 'throw' once initial release is up onBrokenMarkdownLinks: 'warn', favicon: 'img/favicon-32x32.png', From c190cc632bf9c8ba652fd4c2b69cf50a870609de Mon Sep 17 00:00:00 2001 From: Mia Barbir <49414517+miabarbir@users.noreply.github.com> Date: Fri, 19 May 2023 15:39:30 +0200 Subject: [PATCH 425/578] Add CNAME (#1755) --- CNAME | 1 + 1 file changed, 1 insertion(+) create mode 100644 CNAME diff --git a/CNAME b/CNAME new file mode 100644 index 00000000000..02abf4f1322 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +grants.web3.foundation From c9583795f60262efc117853747ab9f11f4610c73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Fri, 19 May 2023 15:57:07 +0200 Subject: [PATCH 426/578] Move CNAME to static/CNAME --- CNAME => static/CNAME | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename CNAME => static/CNAME (100%) diff --git a/CNAME b/static/CNAME similarity index 100% rename from CNAME rename to static/CNAME From 75d6375e9fc059cb850fc7f43da6a181ea179039 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Sat, 20 May 2023 02:22:57 -0400 Subject: [PATCH 427/578] Update index.md (#1757) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index be5927fb5b2..53506bdfd95 100644 --- a/applications/index.md +++ b/applications/index.md @@ -104,7 +104,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [BelSoft](https://www.belsoft.rs) | [Diffy messenger](Diffy_chat.md) | [GitHub](https://github.com/1db1) | ☐ | ☒ | ☐ | | [Zkverse](https://github.com/Zkvers) | [Zkverse](zkverse.md) | [GitHub](https://github.com/Zkvers/substrate-zk) | ☐ | ☐ | ☐ | | [Taiwan Research-based Biopharmaceutical Manufacturers Association](https://trpma.org.tw/cmn) | [Claps Health](Claps.md) | [GitHub](https://github.com/Claps-Health/) | ☐ | ☐ | ☐ | -| [Tolga Yaycı](https://github.com/tolgayayci) | [Awesome Polka](Awesome-Polka.md) | [GitHub](https://github.com/tolgayayci/awesome-polka/tree/dev) | ☐ | ☐ | ☐ | +| [Tolga Yaycı](https://github.com/tolgayayci) | [Awesome Polka](Awesome-Polka.md) | [GitHub](https://github.com/tolgayayci/awesome-polka/tree/dev) | ☐ | ☒ | ☒ | | [gmajor](https://github.com/gmajor-encrypt) | [XCM Tools](xcm-tools.md) | [GitHub](https://github.com/gmajor-encrypt/) | ☐ | ☒ | ☐ | | [David Semakula](https://github.com/davidsemakula) | [Ink Analyzer](ink-analyzer.md) | [GitHub](https://github.com/ink-analyzer/ink-analyzer) | ☐ | ☒ | ☐ | | [Bright Inventions](https://brightinventions.pl/) | [High-availability validator setup](High_availability_validator_setup.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☐ | From a8719b1aadba4c3bdec37d16d55b6d6ff3b503a7 Mon Sep 17 00:00:00 2001 From: Sebastian Miasojed Date: Sun, 21 May 2023 14:44:15 +0200 Subject: [PATCH 428/578] Contracts performance measurement tool proposal (#1750) * Contracts performance measurement tool project proposal * Fixed missing field: team name added * Updated items numbering and added estimations in weeks * Updated item numbers --- applications/contracts-tool.md | 187 +++++++++++++++++++++++++++++++++ 1 file changed, 187 insertions(+) create mode 100644 applications/contracts-tool.md diff --git a/applications/contracts-tool.md b/applications/contracts-tool.md new file mode 100644 index 00000000000..77d17339ada --- /dev/null +++ b/applications/contracts-tool.md @@ -0,0 +1,187 @@ +# Contracts performance messurement tool + +- **Team Name:** Gloslab +- **Payment Address:** Fiat 18.05.2023, 20:22 +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +### Overview + +The key objective of this grant is to build a tool which allows to compare contracts performance and to track its regressions. +Subject of comparison are solidity, and ink! contracts running on parachains (pallet-contract and pallet-evm). +Tool will be integrated with CI and running each night, generating measurements data and providing its visualizations. + +Our team has strong interest in contracts development on Polkadot and building Polkadot ecosystem. + +### Project Details + +#### Generating benchmarking results + +Project is based on smart-bench Parity repo https://github.com/paritytech/smart-bench and developed in rust language. +Apart of existing ink! and solidity contracts support, will be introduces support for solang compiled contract running on pallet-contract. +Finally the tool will measure performance of: +- Ink! contract run on pallet-contract (currently supported) +- Solidity contracts compiled with solc run on pallet-evm (supported but outdated) +- Solidity contracts compiled with solang and run on pallet-contract (new functionality) + +The tool is run with following command: +``` +smart-bench [OPTIONS] --instance-count --call-count [CONTRACTS] --url +``` +where as a type can be used ink-wasm, sol-wasm or evm + +example: +``` +smart-bench ink-wasm erc20 erc1155 --instance-count 10 --call-count 20 --url ws://localhost:9988 +smart-bench sol-wasm erc20 erc1155 --instance-count 10 --call-count 20 --url ws://localhost:9988 +smart-bench evm erc20 erc1155 --instance-count 10 --call-count 20 --url ws://localhost:9988 +``` + +The performance measurements are run against test network, which will be setup using Zombienet. +Required scripts, which spins network and run smart-bench, will be delivered with the tool. +Smart bench collects following stats: +``` +Block number +PoV size +Block Weight - reference time and proof size +Witness +Block size +Number of extrinsics processed in block +``` + +#### Integrating Smart-bench with CI/CD + +Architecture for performance tracking tooling is built upon the concept of [Flat Data](https://githubnext.com/projects/flat-data), whereas sets of data is stored within repository itself. Data is being created and processed for storage on a timely schedule. + +Github repository used in this architecture is self sufficient in terms of spinning up benchmarking environment, storing and processing benchmark results created within run of Github Action workflow. Repository contains all configuration files required for provisioning of benchmarking environment. Other provided utilities also allow to effortlessly start local Grafana and InfluxDB instances (available as Dockerfiles and Docker Compose configuration) for out of the box experience of running visualizations against data where all of this is part of the same repository. For syncing of most recent data standard git operations apply (sync local git repository with remote origin to get latest data). + +Github Action is responsible for running smart-bench software against Zombienet to create benchmarking results. Results are then post-processed to also include various metadata about environment used for its creation. Results are then committed and pushed to the repository. Metadata of benchmark results consists of various properties such as (consider following as draft, to be defined exactly as implementation proceeds): + +- Commit hashes of Zombienet, parachain implementation (Moonbeam or contract-pallet based) and smart-bench +- Human readable versions of above if can be determined +- Type of contract +- Contract compiler +- Parachain to run the contract + +Measurements themselves are raw data as returned by smart-bench software. + +Performance tracking is concerned with Moonbeam and pallet-contracts. Coverage of the benchmarks strives to create results for binary release of parachains. So for every binary release of parachain, results will be created and stored in the repository. + +Summary of items provided by repository: +- Dockerfiles to run grafana, influxdb, smart-bench +- Docker Compose to ease local setup of all components +- Scripts to transform smart-bench output to data format ingestible by InfluxDB +- Scripts uploading data to InfluxDB will try to parse benchmarking data from smart-bench provided format and accompany them with metadata to create contexts for visualizations. Repository will also provide configuration files for dashboards of Grafana + +The Grafana dashboard provided offers a comprehensive regression detection feature, enabling the visualization of performance comparisons between Ink! and pallet-contracts against Solidity and Moonbeam. The dashboard prominently displays the contracts' throughput as a key metric, calculated individually for each contract type. The graph within the dashboard showcases the temporal dimension on the X-axis, representing dates, while the Y-axis represents the throughput. This graph comprises three distinct data series, each corresponding to one of the contract types. The graph's are preserved as PNG dumps and stored in the repository. + +Limitations: +the project does not compile the contracts by itself, contracts are delivered in binary form. + + +### Ecosystem Fit + +The project is useful for ecosystem at contracts development stage to track its performance and regressions on Polkadot. +It is going to be used also to measure ink! language performance by Parity core team. + +## Team :busts_in_silhouette: + +### Team members + +- Sebastian Miasojed +- Karol Kokoszka + +### Contact + +- **Contact Name:** Sebastian Miasojed +- **Contact Email:** s.miasojed@gmail.com +- **Website:** + +### Legal Structure + +- **Registered Address:** Racula-Janusza Korczaka 15B, 66-004 Zielona Góra, Poland, NIP:5961572852 +- **Registered Legal Entity:** Gloslab Sebastian Miasojed + +### Team's experience + +We combine development and architecting skills from embedded world, cloud systems and apply them to crypto world. +Until now the team has shown his proficiency aligning smart-bench with newest libraries required by ink! contracts. +- https://github.com/paritytech/smart-bench/pull/32 +- https://github.com/paritytech/smart-bench/pull/31 +- https://github.com/paritytech/smart-bench/pull/28 +- https://github.com/paritytech/blockstats/pull/22 + +### Team Code Repos + +- https://github.com/smiasojed +- https://github.com/karolk91 + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/sebastian-miasojed-83b6123 +- https://www.linkedin.com/in/karol-kokoszka-a66959103 + + +## Development Status :open_book: + +Work has been started, smart bench has been updated with new libraries and is able to build and run on test net with ink! contracts. +- https://github.com/paritytech/smart-bench/pull/32 +- https://github.com/paritytech/smart-bench/pull/31 +- https://github.com/paritytech/smart-bench/pull/28 +- https://github.com/paritytech/blockstats/pull/22 + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 3 months +- **Full-Time Equivalent (FTE):** 0.5 +- **Total Costs:** 15000 EUR + +### Milestone 1 Smart-bench updated — Basic functionality + +- **Estimated duration:** 5 weeks +- **FTE:** 0.5 +- **Costs:** 6500 EUR + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | GPLv3 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can spin up test net and run contracts with transactions. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | Create Docker and docker-compose related configurations to build and start smart-bench, Zombienet and parachains to generate benchmarking results. | +| 1. | Updated evm contracts | We will update tool with support for newest Moonbeam parachain. | +| 2. | Support for solidity-wasm contracts | We will deliver support for solidity contract compiled with solang to wasm. | +| 3. | Launch scripts | Scripts which will allow to launch the tool on Zombienet. | + + +### Milestone Smart-bench in CI/CD flow — Additional features + +- **Estimated Duration:** 7 weeks +- **FTE:** 0,5 +- **Costs:** 8500 EUR + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | GPLv3 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can use the performance tracking tooling to generate the graphs. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | Create Docker and docker-compose related configurations to run Grafana and InfluxDB pre-configured with dashboards and measurements. | +| 0e. | Article | We will publish article on Medium that explains what was done/achieved as part of the grant. | +| 1. | Github Actions benchmark jobs | Create workflow and implement a job to utilize Dockerized benchmarking for generating results and uploading them to repository. | +| 2. | Results processing tools | Implementation of tooling to translate smart-bench output format to format of InfluxDB. | +| 3. | Github Actions workflow | Create complete workflow running parallel jobs based on matrix strategy for all missing measurements. | + + +... + + +## Future Plans + +We are going to promote the project writing article and involve other developers to maintain it in the future + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Parity team + From c7aa0d51e25543ac611be93cf79f0944d13de953 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Sun, 21 May 2023 14:47:14 +0200 Subject: [PATCH 429/578] Update index.md Contracts performance measurement tool proposal --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 53506bdfd95..70efbc3ed28 100644 --- a/applications/index.md +++ b/applications/index.md @@ -60,6 +60,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Deep Ink Ventures GmbH](https://github.com/deep-ink-ventures) | [Stylograph](Stylograph.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☐ | ☐ | | [Zeeve](https://www.zeeve.io) | [Ink Playground IDE Improvements](ink-playground-ide-improvements.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | | [Scio Labs](https://scio.xyz/) | [XCM Domain Name Service](xcm-domain-service.md) | [GitHub](https://github.com/scio-labs) | ☐ | ☐ | ☐ | +| [Gloslab](https://github.com/smiasojed) | [Contracts performance measurement tool proposal](contracts-tool.md) | [GitHub](https://github.com/smiasojed) | ☐ | ☐ | ☐ | [🔝](#menu) From 6c310036715d30c0e59ef47dee79a15447c3cebd Mon Sep 17 00:00:00 2001 From: Nikita Orlov Date: Mon, 22 May 2023 13:27:11 +0200 Subject: [PATCH 430/578] Create faucet chat based bot (#1758) * Create faucet bot chat based bot * Update faucet-bot * update faucet-bot * Update faucet-bot.md * Update faucet-bot.md * Update applications/faucet-bot.md --------- Co-authored-by: S E R A Y A --- applications/faucet-bot.md | 115 +++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 applications/faucet-bot.md diff --git a/applications/faucet-bot.md b/applications/faucet-bot.md new file mode 100644 index 00000000000..7eae5dd80c5 --- /dev/null +++ b/applications/faucet-bot.md @@ -0,0 +1,115 @@ +# W3F Grant Proposal + +- **Project Name:** Generic sybil-resistant chat based faucet bot +- **Team Name:** Nikita Orlov PR +- **Payment Address:** 0x49F19FA78C4E766b8C5592e53CC35b1411a5E11f (USDC/DAI) +- **Level:** 1 + +## Project Overview + +### Overview + +Sybil-resistant faucet is a generic chat bot based faucet solution that can be used on any existing parachain (substrate-based chain, either pallets or ink! smart contracts). + +### Project Details + +#### Mockup + + bot that handle all messages like /request {wallet_public_address}, and trying to send tokens if it eligible + +#### Technology stack + +- Golang +- Redis +- Discord sdk (go) +- Matrix sdk (go) + +#### Architecture + +![architecture](https://raw.githubusercontent.com/StringNick/sybil-resistant-chat-bot-substrate-faucet/main/arch.png) + +#### Configuration + +To make the faucet generic, it will store its configuration settings in `.env` file which will include the following settings: + +- `DRIP_CAP` - how many tokens to send per request +- `DRIP_DELAY` - how often user's can request to drip tokens (in ms) +- `REDIS_ENDPOINT` - Redis instance endpoint +- `RPC_ENDPOINT` - Substrate node endpoint +- `FAUCET_ACCOUNT_MNEMONIC` - mnemonic of faucet's wallet + +Based on addons, it can be credentials for any platform, what will be used, in based version discord/matrix. + +### Ecosystem Fit + +Many dApps are facing an issue where it’s difficult to onboard new users. Thus, the goal is to simplify the process by making it easier for parachain and dApp developers to spin up their own faucets, and give users free tokens without people exploiting the system. In order to make the system sybil-resistant, centralised solutions like Discord, Matrix and any other chat based platforms, that will uniquely identify users, and enable requesting tokens to the account only once per given time period. + +Some similar projects include: +- https://github.com/paritytech/substrate-matrix-faucet +- https://github.com/OAXFoundation/substrate-faucet + +The advantages of this project are that similar projects are implemented specifically for one platform, this project will be implemented on the interface, and the platforms (Discord, matrix and etc) will be like addons (classes) that correspond to the interface, which will allow you to easily connect new platforms, do not depend on the implementation of platforms, will allow you to run unlimited number of platforms at the same time. + +That is, to integrate a new platform, you will need to implement an interface, and cybil resist, message processing and other functionality will already work out of the box. Also, the implementation of new functionality requires only a change in one point of code, if this does not affect the interface. + +## Team + +### Team members + +- Nikita Orlov + +### Contact + +- **Contact Name:** Nikita Orlov +- **Contact Email:** stringnickq@gmail.com +- **Matrix:** rozeme@matrix.org + +### Legal Structure + +- **Registered Address:** Jurija Gagarina 231, Beograd +- **Registered Legal Entity:** Nikita Orlov PR + +### Team's experience + +ETH Waterloo 2019 hackathon prize-winner, is a engineer with over 8 years of experience in development and integration of fault-tolerant high-loaded SaaS IT solutions including relevant experience in blockchain solutions. + +### Team Code Repos + +- * https://github.com/stringnick + +### Team LinkedIn Profiles + +- * https://www.linkedin.com/in/nikita-orlov-aa6910186/ + +## Development Roadmap + +### Overview + +- **Total Estimated Duration:** 1.5 month +- **Full-Time Equivalent (FTE):** 1.5 FTE +- **Total Costs:** 7,500 USD + +### Milestone 1 — Implement the Faucet + +- **Estimated duration:** 1.5 month +- **FTE:** 1.5 +- **Costs:** 7,500 USD + +| Number | Deliverable | Specification | +| -----: | --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | I will provide both **inline documentation** of the code and a **tutorial** that explains how a developer can spin up his/her own faucet. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, I will describe how to run these tests. | +| 0d. | Article | I will publish an **article** that explains how the faucet works, why it was created, and how it can be used by developers. | +| 1. | Universal message interface (UMI) | Implement golang interface (contract) to unify all chat providers to one standart, so we can easily use abstraction | +| 2. | Discord | Golang implementation of discord integration using open-source SDK, that support interface of UMI module | +| 3. | Matrix.org | So same as discord, golang module | +| 4. | Wallet status | Golang module that control user/wallet faucet drip, so user will be able to receive only once in a certain period of time | +| 5. | Faucet drip | Golang module that can send token to user wallet address on substrate based chain, RPC library to substrate chain through open-source library https://github.com/centrifuge/go-substrate-rpc-client | +| 6. | Substrate demo | Implement demo example on substrate template node | + +## Future Plans + +- Keep adding another chat providers. +- Keep maintaining the project in case of potential issues. +- Analytics for owner with dashboard UI. From 4a7c188753dfd7670f2e3da4e830b024fc0ed1de Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 22 May 2023 13:29:26 +0200 Subject: [PATCH 431/578] Update index.md Faucet chat based bot --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 70efbc3ed28..df621736930 100644 --- a/applications/index.md +++ b/applications/index.md @@ -61,6 +61,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Zeeve](https://www.zeeve.io) | [Ink Playground IDE Improvements](ink-playground-ide-improvements.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | | [Scio Labs](https://scio.xyz/) | [XCM Domain Name Service](xcm-domain-service.md) | [GitHub](https://github.com/scio-labs) | ☐ | ☐ | ☐ | | [Gloslab](https://github.com/smiasojed) | [Contracts performance measurement tool proposal](contracts-tool.md) | [GitHub](https://github.com/smiasojed) | ☐ | ☐ | ☐ | +| [Nikita Orlov PR](https://github.com/stringnick) | [Faucet chat based bot](faucet-bot.md) | [GitHub](https://github.com/stringnick) | ☐ | ☐ | ☐ | [🔝](#menu) From 973305e34684ab0999f91592b4589858569b4508 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Mon, 22 May 2023 13:50:11 +0200 Subject: [PATCH 432/578] Update faucet-bot.md Fix H1 --- applications/faucet-bot.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/applications/faucet-bot.md b/applications/faucet-bot.md index 7eae5dd80c5..d2f1aa7c26f 100644 --- a/applications/faucet-bot.md +++ b/applications/faucet-bot.md @@ -1,6 +1,5 @@ -# W3F Grant Proposal +# Generic sybil-resistant chat based faucet bot -- **Project Name:** Generic sybil-resistant chat based faucet bot - **Team Name:** Nikita Orlov PR - **Payment Address:** 0x49F19FA78C4E766b8C5592e53CC35b1411a5E11f (USDC/DAI) - **Level:** 1 From a3e4544e90ccbc5565fe83690f82a4e8c8c56d7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Tue, 23 May 2023 11:16:04 +0200 Subject: [PATCH 433/578] Change website announcement bar --- docusaurus.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docusaurus.config.js b/docusaurus.config.js index 01a82ffdaad..4eaf0628243 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -28,7 +28,7 @@ module.exports = { announcementBar: { id: 'announcement', content: - 'Check out our current job openings!', + 'Check out our 500 GRANTS blogpost!', backgroundColor: '#000', textColor: '#ffffff', isCloseable: true, From cb9a7a82f2b3fde3db193be28520eac5b03cfa36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 24 May 2023 12:02:24 +0200 Subject: [PATCH 434/578] Update delivery guidelines phrasing (#1761) --- .../milestone-deliverables-guidelines.md | 55 +++++++++++-------- 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/docs/Support Docs/milestone-deliverables-guidelines.md b/docs/Support Docs/milestone-deliverables-guidelines.md index 3b82106f770..b573c40cedd 100644 --- a/docs/Support Docs/milestone-deliverables-guidelines.md +++ b/docs/Support Docs/milestone-deliverables-guidelines.md @@ -4,11 +4,11 @@ These are the guidelines to be followed for milestones submitted for evaluation. ## Submission -Please submit all your milestones via PR to the [Grant Milestone Delivery repository](https://github.com/w3f/Grant-Milestone-Delivery). +Unless instructed otherwise, please submit all your milestones via PR to the [Grant Milestone Delivery repository](https://github.com/w3f/Grant-Milestone-Delivery). ## Invoice -Although a milestone needs to be reviewed and accepted, you can already submit your invoice through [this form](https://docs.google.com/forms/d/e/1FAIpQLSfmNYaoCgrxyhzgoKQ0ynQvnNRoTmgApz9NrMp-hd8mhIiO0A/viewform). +Although a milestone needs to be reviewed and accepted, you can submit your invoice alongside your delivery pull request through [this form](https://docs.google.com/forms/d/e/1FAIpQLSfmNYaoCgrxyhzgoKQ0ynQvnNRoTmgApz9NrMp-hd8mhIiO0A/viewform). ## Content @@ -23,12 +23,18 @@ The submission should contain the following information: - **A list of the [milestone deliverables](#milestone-deliverables)** - **Any [additional information](#additional-information)** -## License +### License -In order to successfully receive grant funding for your application it is necessary for the project to have open source code. -We prefer Apache 2.0, but MIT or Unlicense are also acceptable. If your delivery comprises multiple repositories, make sure to include the license for each of them. +Since all code developed under a grant must be open source, it is necessary to publish your code under an appropriate license. This license should already be defined in your grant application, but if you're unsure, check the [Open Source Initiative database](https://opensource.org/licenses) for available licenses. We prefer Apache 2.0, but MIT or Unlicense are also acceptable. +If your delivery comprises multiple repositories, make sure to include the license in each of them. -## Documentation +:::danger + +You should also verify that the code you submit doesn't violate any other licenses, as a failure to comply with the license of reused code will result in an immediate rejection of the milestone and termination of the grant. + +::: + +### Documentation We value high-quality open source code, but even the most performant code is of little use if it lacks proper documentation. @@ -39,14 +45,13 @@ We require that you document (where applicable): - Algorithms and protocols that are core to your project - Any other fundamental building blocks to your technology -Unless absolutely necessary, make the documentation public as well, ideally as part of the appropriate code repository. This will make it easier for the community to use or adapt your project. +Unless absolutely necessary, make the documentation public as well, ideally as part of the appropriate code repository. This will make it easier for the community to contribute to and use your project. -**Note**: Only focus on your **own** contributions. Do not write detailed explanations of already existing components, e.g. IPFS. +**Note**: Only focus on your **own** contributions. Do not write detailed explanations of already existing components, including Substrate, ink!, or IPFS. -## Formatted code +### Formatted code -A codebase that is easy to read is also easy to use. We suggest adopting one style from Day 1 and adhering to it across the entire team. -This helps to keep the commit history clean and facilitates any reviews of the introduced changes. +A codebase that is easy to read is also easy to use. We suggest adopting one style from Day 1 and adhering to it across the entire team. This helps to keep the commit history clean and facilitates any reviews of the introduced changes. For **Substrate**, we strongly recommend formatting your code according to the [official guidelines](https://github.com/paritytech/substrate/blob/master/docs/STYLE_GUIDE.md). @@ -54,13 +59,13 @@ For **Rust**, we encourage formatting any additional support libraries or helper For **any other** deliveries, please commit to a particular style & let us know which official guidelines you adopt. -## Testing Guide +### Testing Guide We require that each milestone delivery includes a comprehensive test suite, consisting of: -### A step-by-step guide demonstrating how your code achieves the milestones +#### A step-by-step guide demonstrating how your code achieves the milestones -Please provide documentation on how to install, compile, run and test the deliverable(s). Make sure to include all necessary prerequisites. Common issues while replicating test results involve, among others, undocumented dependencies, version numbers, local database setups, breaking changes in the main branch since delivery, OS- and browser-specific incompatibilities. +Please provide documentation on how to install, compile, run and test the deliverable(s). Make sure to include all necessary prerequisites. Common issues while replicating test results involve, among others, undocumented dependencies and version numbers, local database setups, breaking changes in the main branch since delivery or OS- and browser-specific incompatibilities. Depending on the deliverable, this could include (but is not limited to) @@ -69,29 +74,31 @@ Depending on the deliverable, this could include (but is not limited to) - running your web app, and - steps to complete some desired action in your mobile app. -### Unit tests +#### Unit tests As with any quality software project, each logical code component should be testable. -### Integration tests - -We prefer dockerfiles to avoid problems with versions and dependencies. +#### Integration tests +We prefer `Dockerfile`s to avoid problems with versions and dependencies. **Note**: If you are not delivering code as part of your project, such a test suite is not applicable. This mainly applies to projects centering on design, research or hardware. If that is the case, please provide detailed instructions on how else we can test/run/replicate your deliverable. -## Milestone Deliverables +### Milestone Deliverables -Please provide a list of milestone deliverables. This list should closely reflect the list of deliverables agreed on in the Pull Request for the public **Grants Program** application or in Annex 1 of the grant contract for the private applications. +Please provide a list of milestone deliverables. This list should closely reflect the list of deliverables agreed on in the pull request for grant application (or in Annex 1 of the grant contract for the private applications). Each item in the list should include a link to the deliverable itself, e.g.: -- Google Doc link - make sure anyone with the link has View access -- GitHub repository - include the appropriate file/folder in the link +- a Google Doc/Medium/blog link (make sure anyone with the link has View access), +- a link to a file in a public repository (include the appropriate file/folder in the link), +- a link to a specific commit, pull request or issue in a public repository. + +:::tip **Please highlight anything that deviates from the contract** and include further information that you think is relevant to the deliverable, either alongside the appropriate deliverable or under [Additional Information](#additional-information). -Please ensure the repo has the correct open-source license. +::: | Number | Deliverable | Link | Notes | | ------------- | ------------- | ------------- | ------------- | @@ -101,6 +108,6 @@ Please ensure the repo has the correct open-source license. | 1. | ... | ... | ... | | 2. | ... | ... | ... | -## Additional Information +### Additional Information Please add any additional comments that you consider relevant for the evaluation. From 603ab0714be05835a72cc6e68b28dcc0f9709ec8 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Thu, 25 May 2023 03:31:59 -0300 Subject: [PATCH 435/578] Update index.md (#1763) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index df621736930..b9987a6924e 100644 --- a/applications/index.md +++ b/applications/index.md @@ -102,7 +102,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Tellor Inc](https://tellor.io/) | [Tellor Oracle Protocol](Tellor.md) | [GitHub](https://github.com/tellor-io/) | ☐ | ☒ | ☐ | | [Jonathan Brown](https://acuity.social/) | [Hybrid Explorer](hybrid.md) | [GitHub](https://github.com/acuity-social) | ☐ | ☒ | ☐ | | [ParaSpell](https://github.com/paraspell) | [ParaSpell_Follow Up 2](ParaSpell_follow-up2.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | -| [justmert](https://github.com/justmert) | [PolkaFlow](polkaflow.md) | [GitHub](https://github.com/justmert) | ☐ | ☐ | ☐ | +| [justmert](https://github.com/justmert) | [PolkaFlow](polkaflow.md) | [GitHub](https://github.com/justmert) | ☐ | ☒ | ☒ | | [BelSoft](https://www.belsoft.rs) | [Diffy messenger](Diffy_chat.md) | [GitHub](https://github.com/1db1) | ☐ | ☒ | ☐ | | [Zkverse](https://github.com/Zkvers) | [Zkverse](zkverse.md) | [GitHub](https://github.com/Zkvers/substrate-zk) | ☐ | ☐ | ☐ | | [Taiwan Research-based Biopharmaceutical Manufacturers Association](https://trpma.org.tw/cmn) | [Claps Health](Claps.md) | [GitHub](https://github.com/Claps-Health/) | ☐ | ☐ | ☐ | From 6db3e56d273ceb04e7d867973aaa3bcaec3354e8 Mon Sep 17 00:00:00 2001 From: Graeme Fox <82609877+gfox1@users.noreply.github.com> Date: Thu, 25 May 2023 09:40:00 -0700 Subject: [PATCH 436/578] societal saas pricing grant (#1671) * societal grant * update to grant * Update applications/societal_saas_pricing.md Co-authored-by: S E R A Y A * Update applications/societal_saas_pricing.md Co-authored-by: S E R A Y A * uppdated cost --------- Co-authored-by: S E R A Y A --- applications/societal_saas_pricing.md | 179 ++++++++++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100644 applications/societal_saas_pricing.md diff --git a/applications/societal_saas_pricing.md b/applications/societal_saas_pricing.md new file mode 100644 index 00000000000..98f86824386 --- /dev/null +++ b/applications/societal_saas_pricing.md @@ -0,0 +1,179 @@ +# Societal + + +- **Team Name:** Societal Labs Ltd. +- **Payment Address:** Ethereum - USDC: 0xcDcCF94f10d8A7165C1A336DD3795430a6CDE530 +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 3 + + +## Project Overview :page_facing_up: +This is the third grant for the Societal Labs team, after the sucessful completion of two previous grants. + +- Previous Grant 1: [Societal.md](https://github.com/w3f/Grants-Program/pull/1249) +- Milestone 1 [Submission](https://github.com/w3f/Grant-Milestone-Delivery/pull/628) +- Milestone 2 [Submission](https://github.com/w3f/Grant-Milestone-Delivery/pull/665) + +- Previous Grant 2: [societal_grant2.md](https://github.com/w3f/Grants-Program/pull/1450) +- Milestone 1 [Submission](https://github.com/w3f/Grant-Milestone-Delivery/pull/733) +- Milestone 2 [Submission](https://github.com/w3f/Grant-Milestone-Delivery/pull/806) + +Societal is also a member of the Substrate Builders Program. + +### Overview + +Societal is a specialized blockchain for the creation and management of internative-native organizations. Societal allows all types of groups or communities to build their own online, transparent, and decentralized organization. Societal bundles all of the tools required to create and manage a DAO in one place. Creators will be empowered to construct a DAO with fungible, non-fungible, or a combination of governance tokens. Societal also offers DAO management tooling features like treasury management, specialized governance, task boards, legal structuring, and accounting. This removes the need to use siloed platforms to manage the operations of a DAO. Whether a creator is looking to build a DAO for their organization, raise and deploy investment capital, or decentralize governance of an NFT project, Societal has the necessary tooling for a seamless end-to-end experience. + +Utilizing Polkdaot’s layer-0 infrastructure and ecosystem, Societal will provide DAOs with both maximum functionality and a cohesive user experience. With features including cross-chain governance and subscription pricing, Societal combines best-in-class features into one vertically integrated product. With integrations into DeFi, privacy, and identity protocols, Societal will enable web3 organizations to seamlessly transition and manage their DAOs into the future. + +The Societal team has been building in the Polkadot ecosystem for the past two years. While at a previous Polkadot project, the Societal team noticed a lack of integrated DAO tooling - not only in the Polkadot ecosystem, but in the broader web3 industry as a whole. After analyzing how we might transition and manage our previous project into a DAO, there was no clear path. This, along with the team being both members and council members of various DAOs and noticing the lack of infrastructure, we decided to build a solution - Societal. + +### Project Details + +Societal Labs has been designing the product vision of the Socital platform for quite some time. We will go over the project details and blockchain architecture in this application and provide references below for more in-depth context. + +In Societal's final state, it will offer four main services; Create, Transition, Transfer and Manage. Create will allow any web3 user to create their own DAO. Transition will allow protocols to progressively move towards community ownership. Transfer will allow DAOs to transfer their DAO from an expensive siloed chain to the Sociteal platform. Manage will provide DAOs all the required product features to manage their organization, whether it is a small investment club or a large community-governed protocol. + +Societal will offer a wide range of features to create and manage a DAO. The features are split into three categories; Operations, Treasury, and Governance. The Operations features are: job & task boards, payroll, customizable feeds, legal tooling, on-chain reputation, and a web & mobile application. The Treasury features are as follows: treasury wallets (multi-sig), DeFi integrations, on-chain cap table, and accounting. The governance features are: subscription based governance, proposal calendar, built-in governance systems, and private voting. + +Societal will vertically integrate with projects to advance its tech stack and product offering, something not seen in most web3 projects today. For example, Societal can integrate DeFi services by working with projects like Acala and Moonbeam, which will allow for active treasury management for DAOs managed with Societal. For private assets and voting, projects like Manta and Phala can provide privacy-enabling functions like zero-knowledge proofs and trusted execution environments to make this possible. For on-chain credentials, projects like KILT and Litentry can provide KYC and member credentialing services that can be used by DAOs for governance and recruiting. + +Finally, Societal plans to progressively transition into a DAO itself. Once the token is launched, a community-run treasury will grow over time until the entire network is owned and operated by the community. + +For more information, please refer to the following resources: + +- Societal Whitepaper [here](https://docsend.com/view/2gte2fd8wc4jp4rg) +- Societal Docs [here](https://docs.sctl.xyz/) +- Societal Protoype Demo [here](https://www.youtube.com/watch?v=Fy-0FrfUIYw) + + +### Ecosystem Fit + +As it stands today, the DAO landscape within the Polkadot ecosystem is not as mature as other ecosystems such as Ethereum. This is due to insufficient DAO creation and tooling infrastructure in the ecosystem. Currently, the Polkadot ecosystem does not have the creation, governance, and treasury management tooling products that other major blockchains do. By building these tooling products on Polkadot, both the Polkadot DAO landscape and the broader DAO management tooling space are primed for innovation by utilizing the unique technical abilities that Substrate provides. + +The target audience of the Societal application are web3 users who require a platform to easily create and manage their DAOs. Our project will meet the needs of the Polkadot community to create and managane their own DAOs and will be a governace scaling solution for ETH based DAOs. + +The projects like Societal in the Polkadot space are Polkassembly, SubDAO, and InvArch. Societal differs from these projects in multiple ways. First, Polkassembly is not building their own parachain and is only a governance platform for large Polkadot projects. Societal wants to allow any web3 user to create their own DAO - not just catering to large established protocols. SubDAO has recently been focusing on smart contract deployments on multiple chains and does not appear to be building a parachain. Societal will build its own parachain and use the technical capabilities of Substrate to be truly token agnostic, connecting with widely used wallets such as MetaMask, to avoid doing multiple chain deployments via smart contracts. InvArch Factory is similar to Societal in the sense that they are building their own parachian, however we plan to offer a SaaS based pricing model so we can change the DAOs a monthly subscription fee and eliminate the fees for the organizations members. Societal will also seek to integrate with other chains, having cross-chain governace execution. + + +## Team :busts_in_silhouette: + +### Team members + +- Graeme Fox +- Tyler Gellatly +- Oleh Kalenyk +- Alibek Sansyzbayev + + +### Contact + +- **Contact Name:** Graeme Fox +- **Contact Email:** graeme@sctl.xyz +- **Website:** https://www.sctl.xyz/ + +### Legal Structure + +- **Registered Address:** Brookfield Place, Suite 2700, 225 6 Ave SW, Calgary, AB T2P 1N2 +- **Registered Legal Entity:** Societal Labs Ltd. + +### Team's experience + +Graeme Fox is the Co-Founder & CEO of Societal, a specialized blockchain designed for the creation and management of DAOs. He was accepted to inaugural the Polkadot Blockchain Academy, held at Cambridge University. Graeme is also a volunteer at the Canadian Blockchain Consortium, where he holds a role on the web3 committee. Prior to this, Graeme has held many roles in and out of web3. In web3, he was previously Head of Product at Ruby Protocol, a privacy project implementing Functional Encryption to combat Trusted Execution Environments (TEEs) and Zero-Knowledge Proofs (ZKPs). Prior to web3 he was the Lead Product Manager at Connectus. During this time, he was in charge of both internal and external development teams that created a web-based application using a MERN stack development, along with a supporting phone application on iOS and Android. It was during this role when Graeme was first introduced to blockchain development, as the main product line integrated with the Corda Blockchain to allow for automatic and secure payments following the completion of specific KPIs. Graeme has held other engineering roles in the past and holds a Bachelor of Engineering from Dalhousie University. He lives and breathes the entrepreneurial mindset, being involved in early-stage startups for the last five years. + +Tyler Gellatly is the Co-Founder & COO of Societal and has been building and scaling early stage start-ups for the last 4+ years. He was employee #1 and Director of Operations & Partnerships at Cuboh (a YC-backed SAAS middleware operating within the ghost kitchen industry) More recently, Tyler helped found Ruby Protocol, a novel privacy protocol building on the Substrate framework, and is still involved in a strategic advisory capacity. Currently, he sits on the DAO council for the Illuminati Collective, which currently has a 1000 ETH treasury under management. Tyler holds a Bachelor of Commerce from the University of Victoria, specializing in corporate strategy and finance. A well-rounded business operations leader with a background in finance, operations, capital fundraising, and strategic partnerships, Tyler is mission driven to bring web3 communities together at scale by utilizing blockchain technology. + + +### Team Code Repos + +Org: + +- https://github.com/sctllabs +- https://github.com/sctllabs/societal-node +- https://github.com/sctllabs/societal-client + +Team: + +- https://github.com/gfox1 +- https://github.com/okalenyk +- https://github.com/asansyzb + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/graemefox/ +- https://www.linkedin.com/in/tngell/ + +## Development Status :open_book: + +Societal has already been working on our project and has completed our MVP. The two main repositories of the Societal project are the [societal-node](https://github.com/sctllabs/societal-node) and the [societal-client](https://github.com/sctllabs/societal-client). These repositories represent the societal blockchain (built with substrate) and the UI. To date or MVP includes the following features: Create a DAO with its own governance token, slecect a governance type (Gov1, ownership weighted voting, NFT voting), create and vote on proposals, and bounties. The Societal chain is also EVM compatible. + + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 4 months +- **Full-Time Equivalent (FTE):** 2 FTE +- **Total Costs:** 40,000 USDC + +The main purpose of this grant will be creating a subcription based pricing system, that can be implemented into any subsrate chain. + +Societal will use this subcription based pricing system to charge the DAOs on its network a monthly fee, which will allow the DAOs members to interact on-chain without paying gas fees. This will bring current web2 pricing models to web3, increasing user experience and ease of adoption for DAOs, as their members will not have to pay gas fees or hold the chain token to interact with it. + + +### Milestone 1 — Subscription Pricing Pallet +- **Estimated Duration:** 1.5 month +- **FTE:** 2 +- **Costs:** 15,000 USD + + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Substrate module: Subscription Pricing Pallet | We will create a Substrate pallet that will require organizations on substrate chain's network to pay a monthly subscription, which will allow the organizations members to interact on-chain without paying gas fees. The pallet will do four main things. It will accept a subscription payment from a DAO to the substrate chain's treasury. It will open or lock functions for the DAOs members based on if and when the payment has been made. It will have a time limit for these functions to be open, before another payment is required. Finally, it would specify a maximum amount of function calls that can be executed before the functions are locked and another payment is required, preventing DDos attacks. | + + + +### Milestone 2 — Add Subscription Tiers to Pallet + +- **Estimated Duration:** 1.5 months +- **FTE:** 2 +- **Costs:** 15,000 USDC + + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works.| +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Substrate Module: Add Subscription Tiers to Pallet | The main delivery of this milestone will be adding differnt subscription tiers to the pallet that was created in milestone 1. This milestone will allow the developer to define different subscription tiers, the price of each tier, what functions and/or pallets are allowed in each tier, and the maximum amount of function calls for each tier. Based on what subcription tier the DAO is paying for, only those functions will be allowed to be called by the DAO and its members. Finally, this milestone will also allow each tier to have a maximum amount of members allowed in the DAO. | + + +### Milestone 3 — Add Recurring Subcription Payment to Pallet + +- **Estimated duration:** 1 month +- **FTE:** 2 +- **Costs:** 10,000 USDC + + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish a tutorial that explains how to use and the functionality of the grant. | +| 1. | Substrate Module: Add Recurring Subcription Payment to Pallet | The main delivery of this milestone will be allowing the DAO to approve recurring subscription payments from the DAOs treasury. The approval for the automic recurring subcription approval will come in the form of a governance proposal. The subcription payment will allow for monthly recurring payments until the subscription in canceled. If funds are not avaible at the time of paymnet, all of the DAO functions except for paying the subscription will be locked. This milestone will make it easier for the DAOs to pay the subscription and not need to approve a proposal every month. | + + +## Future Plans + +Societal plans to launch its own parachain and be the go-to DAO Creation and Management platform for Polkadot and all of web3. We believe that this subscription pricing system will be a great on-ramp of DAOs from other ecosystems into Polkadot, as the organization members do not have to purchase the Societal token to participate in on-chain transactions. This will reduce the barrier for these DAOs to use a governance scaling solution for their organization, such as Societal. This subscription payment system can also be used by many substrate chains to reduce this barrier adoption as well. + + +## Additional Information :heavy_plus_sign: + +All information already included in above. \ No newline at end of file From 60e6c7b9023fddcf808e529eef92f7cb849b5b58 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 25 May 2023 19:48:43 +0200 Subject: [PATCH 437/578] Update index.md Societal Saas Pricing --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index b9987a6924e..baf3dff2a57 100644 --- a/applications/index.md +++ b/applications/index.md @@ -62,6 +62,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Scio Labs](https://scio.xyz/) | [XCM Domain Name Service](xcm-domain-service.md) | [GitHub](https://github.com/scio-labs) | ☐ | ☐ | ☐ | | [Gloslab](https://github.com/smiasojed) | [Contracts performance measurement tool proposal](contracts-tool.md) | [GitHub](https://github.com/smiasojed) | ☐ | ☐ | ☐ | | [Nikita Orlov PR](https://github.com/stringnick) | [Faucet chat based bot](faucet-bot.md) | [GitHub](https://github.com/stringnick) | ☐ | ☐ | ☐ | +| [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal Saas Pricing](societal_saas_pricing.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☐ | ☐ | [🔝](#menu) From f425930996b9df5038edb9325a3727062e67b11a Mon Sep 17 00:00:00 2001 From: David Hawig Date: Sun, 28 May 2023 13:59:30 +0200 Subject: [PATCH 438/578] Cancel iris_followup.md (#1767) https://github.com/w3f/Grants-Program/pull/1365#issuecomment-1564514109 --- applications/iris_followup.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/iris_followup.md b/applications/iris_followup.md index 4ce62d754d3..c7ea591818a 100644 --- a/applications/iris_followup.md +++ b/applications/iris_followup.md @@ -3,6 +3,7 @@ - **Team Name:** Ideal Labs - **Payment Address:** 0xB7E92CCDE85B8Cee89a8bEA2Fd5e5EE417d985Ad (DAI) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 3 +- **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/1365#issuecomment-1564514109) ## Project Overview :page_facing_up: From f837b7d7e135a0f3d018834f3b16cb8f7e87e5a4 Mon Sep 17 00:00:00 2001 From: Jonathan Brown Date: Tue, 30 May 2023 14:42:03 +0700 Subject: [PATCH 439/578] Amend milestone 2 of accepted grant application Hybrid Block Explorer. (#1774) --- applications/hybrid.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/hybrid.md b/applications/hybrid.md index e2b5732d82e..f11f38c7077 100644 --- a/applications/hybrid.md +++ b/applications/hybrid.md @@ -205,7 +205,7 @@ Development has not started on the project, however the codebase will largely fo | **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | | 1. | Event subscription API | The indexer will be updated to service subscription requests via WSS. | | 2. | Live dapp | The dapp will be updated so that pages displaying results from event queries will be updated as soon as a new event appears on the chain. | -| 3. | Full Substrate & Polkadot support | All substrate & polkadot pallets & events supported | +| 3. | Full Polkadot event indexing | The indexer will be updated to index all Polkadot pallets and the following keys will be indexed in addition to those in Milestone 1: preimage_hash, era_index, session_index. | | 4. | Variant index | Additional event index by pallet, variant | | 5. | Increased decentralization | Don't store event in db - load events in front end from chain | | 6. | Asynchrous block downloading | Blocks will be downloaded as fast as possible for improved indexing speed. | From 260ce825441bb49b91fb21de4cbc0e402acb08f0 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 30 May 2023 11:41:10 +0200 Subject: [PATCH 440/578] Update PolkadotSnap.md (#1776) --- applications/PolkadotSnap.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/PolkadotSnap.md b/applications/PolkadotSnap.md index e58ec8faa4c..b13d98397ea 100644 --- a/applications/PolkadotSnap.md +++ b/applications/PolkadotSnap.md @@ -4,6 +4,7 @@ * **Proposer:** @aaronisme * **Payment Address:** 3KL2HNETiLbLVbnGfpGZ6ZkyyaWUL6bfpt(BTC) * **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 +* **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/1166#issuecomment-1567918173) ## Project Overview :page_facing_up: From 75dd458b92bb8e784607fdac7701a52804331b44 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 30 May 2023 15:51:27 +0200 Subject: [PATCH 441/578] Update funding.md Add KodaDot Ecosystem Grants --- docs/funding.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/funding.md b/docs/funding.md index b4fb5013746..25ff1ed6d18 100644 --- a/docs/funding.md +++ b/docs/funding.md @@ -33,6 +33,7 @@ Below is a list of other grant and bounty programs in the Polkadot/Substrate eco - [HydraDX Grants and Bounties](https://docs.hydradx.io/new_deal/) - [ink!ubator](https://use.ink/ubator/) - [Interlay Labs Grants Program](https://github.com/interlay/Grants-Program) +- [KodaDot Ecosystem Grants](https://github.com/kodadot/grants) - [Moonbeam Grants Program](https://moonbeam.foundation/grants/) - [OAK’s Developer Grants](https://oak.tech/community/grants/) - [peaq Ecosystem Grant Program](https://www.peaq.network/grant-program) From 3acc15968c4de759087b1461d72a3d85fb0499fc Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 30 May 2023 17:46:30 +0200 Subject: [PATCH 442/578] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 909cb59da8a..e96de8f3139 100644 --- a/README.md +++ b/README.md @@ -327,6 +327,7 @@ Below is a list of other grant and bounty programs in the Polkadot/Substrate eco - [HydraDX Grants and Bounties](https://docs.hydradx.io/new_deal/) - [ink!ubator](https://use.ink/ubator/) - [Interlay Labs Grants Program](https://github.com/interlay/Grants-Program) +- [KodaDot Ecosystem Grants](https://github.com/kodadot/grants) - [Moonbeam Grants Program](https://moonbeam.foundation/grants/) - [OAK’s Developer Grants](https://oak.tech/community/grants/) - [peaq Ecosystem Grant Program](https://www.peaq.network/grant-program) From 6955283b0360082ea3b31d477441a3d8b47eec47 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Tue, 30 May 2023 17:25:38 -0400 Subject: [PATCH 443/578] Update index.md (#1778) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index baf3dff2a57..bba2d20d468 100644 --- a/applications/index.md +++ b/applications/index.md @@ -153,7 +153,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Common Orbit LLC](https://brson.github.io) | [wasm-opt-for-rust maintenance](maintenance/wasm-opt-for-rust.md) | [GitHub](https://github.com/brson/wasm-opt-rs) | ☐ | ☒ | ☐ | | [Salaheldin Soliman](https://github.com/salaheldinsoliman) | [Solang developer experience improvements](Solang_developer_experience_improvements.md) | [GitHub](https://github.com/hyperledger/solang) | ☐ | ☒ | ☐ | | [Optymalizacja AI Grzegorz Miebs](https://github.com/miepsik) | [Validator selection](validators_selection.md) | [GitHub](https://github.com/miepsik) | ☐ | ☒ | ☒ | -| [Applied Blockchain Ltd](https://appliedblockchain.com/) | [Silent Data](project_silentdata.md) | [GitHub](https://github.com/appliedblockchain) | ☐ | ☐ | ☐ | +| [Applied Blockchain Ltd](https://appliedblockchain.com/) | [Silent Data](project_silentdata.md) | [GitHub](https://github.com/appliedblockchain) | ☐ | ☒ | ☒ | | [Web3Box Labs](https://github.com/web3box-labs) | [Web3Box](Web3Box.md) | [GitHub](https://github.com/web3box-labs) | ☐ | ☒ | ☒ | | [LimeChain](https://limechain.tech/) | [Research feasibility of Polkadot Host in Java](research-feasibiliy-java-host.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☒ | ☒ | | [Blaize.tech](https://blaize.tech/) | [Unified deployment for the collator node](unified_collator_node_deployment.md) | [GitHub](https://github.com/babebort-blaize) | ☐ | ☒ | ☒ | From a1b6544027942a25adf97bc0dbd52d20c891a937 Mon Sep 17 00:00:00 2001 From: Sergej Sakac <73715684+Szegoo@users.noreply.github.com> Date: Wed, 31 May 2023 20:15:26 +0200 Subject: [PATCH 444/578] Dotflow (#1657) * Dotflow * Update Dotflow.md * Describe milestones better * Update Dotflow.md * Remove accidental empty lines * Update Dotflow.md * Update Dotflow.md --- applications/Dotflow.md | 201 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 201 insertions(+) create mode 100644 applications/Dotflow.md diff --git a/applications/Dotflow.md b/applications/Dotflow.md new file mode 100644 index 00000000000..8875dbc10d1 --- /dev/null +++ b/applications/Dotflow.md @@ -0,0 +1,201 @@ +# Dotflow + +- **Team Name:** Sergej Sakac & Oliver Lim +- **Payment Address:** 0x1e86CD18E4443B5f57b0133077954Cd84896964d (USDC) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +### Overview + +#### Problem +We can most certainly agree that the future is multi-chain. As such, it is not uncommon for users to hold multiple accounts across various chains for reasons such as distinct address formats and security benefits. However, this practice presents a challenge in managing multiple addresses. Adding to the complexity is the need to verify the address of the intended recipient, as it may have changed over time. + +In summary, there are two key challenges to address: the management of multiple addresses and making sure the addresses of the recepients did not change in the meantime. + +To mitigate these challenges, we aim to simplify the user experience by abstracting away the complexity of address management. + +### Project Details + +Our project will comprise two smart contracts coded in ink!, and a React.js-based user interface. + +One of the ink! contracts will store the user's address-related data in an entity called `Identity`. Each user will have their own `Identity`, containing their addresses across different chains. The Identity creators will be responsible for updating their addresses if any changes occur. Every Identity will be assigned a unique `IdentityNo`, which will serve a crucial purpose in the address book contract and UI. + +Additionally, this contract will feature a function that, based on input arguments, will return the appropriate destination address for token transfers. This function will mainly be used by the user interface. + +The second contract will be an address book that enables users to store the `IdentityNos` of the people they are most frequently engaged with. Each user will have the option to create their own address book, where they can add a nickname to each identity to differentiate them easily. Each address book will be attached to a wallet so that when a user logs in with his wallet the UI and provides the `IdentityKey` the frontend will automatically be able to display the address book to the user. + +The UI will serve the purpose of interacting with both smart contracts. Users will be able to create an identity and customize the addresses of their identity. Using the UI users will also be able to create their address book and customize it. The most important functionality the UI will provide will be the routing. +When a user wants to transfer some tokens to an identity the user will only have to worry about the token, origin and destination chain, and the identity they want to send the tokens to. Based on all of this the UI will query the identity contract and based on that create a transaction that will route the tokens to the proper address. + +In case the origin and destination chain are not the same, the UI will create an XCM message that will route the tokens to the proper blockchain. For the XCM transaction to work there has to be an existing XCM channel between the two blockchains. + +### Privacy +Most of us don't want to share all of our addresses with the rest of the world. For that reason, we are including some privacy features that will keep all our addresses private. +All of the addresses in the identity smart contract will be encrypted with a secret key. + +Users will have multiple addresses each attached to a certain blockchain. AES 128-bit ciphers will be generated by the UI per each blockchain. These ciphers will only change if the user changes them when updating an address, otherwise, they will always be the same for the associated blockchain. +Ciphers will be created when creating an identity or when adding a new blockchain address to the identity. These ciphers will be stored in a structured format so that the frontend code can associate each cipher with a blockchain. Ciphers will be stored locally in the following format: +``` +-- We will call this data the 'Identity Key' -- +blockchain_name_1:cipher_1;blockchain_name_2:cipher_2;...and so on +``` +Each address will be encrypted with the associated cipher before it gets stored in the identity contract. This will ensure that no one has access to an identity's addresses simply by reading the contract's state. + +To share an identity with someone the `Identity Key` will also be needed to be sent together with the `IdentityNo`. In case an identity doesn't want to expose all of their addresses to someone else, but only some of them, it is possible to send part of the `Identity Key` that contains the ciphers for the blockchain addresses he wants to share. +Of course, the user won't need to do this task manually, the UI will make this task very simple. The following section will show how this will work from the user's perspective. + +In case we update some of our addresses but we want to restrict access to the users that previously were granted access to that address there will be an option to regenerate the cipher. This way everyone that had access to the old address won't have access to the new one. + +### UI Design +The UI will consist of three main parts: + +- My Identity page +- Transfer page +- Address book page + +#### My Identity page +[![1-1-dashboard-2.png](https://i.postimg.cc/nLt38NpZ/1-1-dashboard-2.png)](https://postimg.cc/dh42rHhS) + +The user will be able to create his own identity and provide the addresses he owns on to his identity. + +![Add Address](https://i.postimg.cc/jdKdPQS5/1-1-create-identity.png) + +In case some of the addresses the user owns change over time he will be able to edit them. +Also, we can select the option to regenerate the cipher so that people that had access to the old address won't be able to access the new one. + +[![1-1-create-identity-4.png](https://i.postimg.cc/509Z5LX0/1-1-create-identity-4.png)](https://postimg.cc/jW9gtWQ0) + +When sharing their identity users will also be able to select which addresses will be available for the person they are sending their identity to. The user will have to copy his `identityNo` but also the `identityKey` which specifies which addresses are accessible for the user that receives this key. + +[![1-1-create-identity-2.png](https://i.postimg.cc/BnhvGMML/1-1-create-identity-2.png)](https://postimg.cc/fV9scj4D) + +#### Transfer page +[![2-1-transfer-1.png](https://i.postimg.cc/Cx9ZCHpB/2-1-transfer-1.png)](https://postimg.cc/75MYwz6w) + +Ther user will be able to transfer tokens to an identity by specifying the origin chain, destionation chain, and the receiver's `identityNo`. + +#### Address Book page +![Address book page](https://i.postimg.cc/QtXyT9kK/3-1-Address-book.png) + +The user will be able to add identities to his own address book. The identities will be added by providing the `identityNo` and some nickname for the identity. + Also by clicking on the transfer icon on one of the identities the user will be redirected to the transfer page where the `identityNo` will be automatically filled out. + +[![3-1-Address-book-3.png](https://i.postimg.cc/xT5snzHN/3-1-Address-book-3.png)](https://postimg.cc/PPLbMNSd) + +When adding an Identity to an address book the user will also be required to provide the Identity Key which will be used for decrypting the identity's addresses when sending tokens. + +### Ecosystem Fit + +This project fits perfectly with the Polkadot ecosystem because it has everything we need to make it work. Polkadot is a multi-chain network, so a lot of users have different addresses on different chains for the same reasons we mentioned earlier. That's why the problems we talked about are important in this ecosystem. + +XCM is going to be a core component of our project since it'll help us transfer tokens between the parachains and the relay chain. + +#### Target Audience +Our target audience is people who deal with sending assets frequently over the Polkadot network. + +## Team :busts_in_silhouette: + +### Team members + +- Sergej Sakac [Szegoo](https://github.com/Szegoo) +- Oliver Lim [cuteolaf](https://github.com/cuteolaf) + +### Contact + +- **Contact Name:** Sergej Sakac +- **Contact Email:** sakacszergej@gmail.com +- **Website:** https://github.com/Szegoo + +### Legal Structure +- **Registered Address:** Kanalska 7 Novi Sad Serbia +- **Registered Legal Entity:** MASTER UNION LLC. + +### Team's experience + +#### [Sergej Sakac](https://github.com/Szegoo) +- More than three years of programming experience +- Active contributor to [Substrate](https://github.com/paritytech/substrate/pulls?q=is%3Apr+author%3ASzegoo) +- Member of the [fellowship](https://github.com/polkadot-fellows/seeding/pull/36) +- Contributor to [rmrk-pallets](https://github.com/rmrk-team/rmrk-substrate/pulls?q=is%3Apr+is%3Aclosed+author%3ASzegoo) + +#### [Oliver Lim](https://github.com/cuteolaf) +- Full stack blockchain developer with 5+ years of experience +- Quick learner and active contributor to open source projects + - [Fair Squares](https://github.com/fair-squares/fair-squares) + - [Imbue Network](https://github.com/imbuenetwork) + - [Anagolay Network](https://gitlab.com/anagolay/anagolay) + - ... + +### Team Code Repos + +We will be working on two separate repos, one for the UI and the other for the ink! contracts. + +- https://github.com/TheDotflow/dotflow-ui +- https://github.com/TheDotflow/dotflow-ink + +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. + +- https://github.com/Szegoo +- https://github.com/cuteolaf + +### Team LinkedIn Profiles (if available) + +- http://linkedin.com/in/sergej-sakac-334a47252 +- https://www.linkedin.com/in/oliver-lim-2215a8235/ + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 2,5 months +- **Full-Time Equivalent (FTE):** 1.5 FTE +- **Total Costs:** 19,000 USD + +### Milestone 1 Example — Basic functionality + +- **Estimated duration:** 1 month +- **FTE:** 1,5 +- **Costs:** 8,000 + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | MIT | +| **0b.** | Documentation | Ink! contracts and the UI code will be well documented and open for everybody to take a look. The UI will be simple and intuitive to use. | +| **0c.** | Testing and Testing Guide | The Identity ink! contract will be well tested with unit and integration tests. | +| **0d.** | Docker | We will provide a Dockerfile that can be used to test all the functionality delivered with this milesone. | +| 1. | Identity Contract | We will write the code for the Identity contract using ink! so that our contracts can be compiled to wasm and deployed to any blockchain that implements the contracts pallet. The Identity contract will provide a range of functions, including creating an identity, adding addresses that are mapped to specific blockchains, and updating these addresses as needed. The contract will automatically generate a unique identifier, referred to as `identityNo`, for each identity. To ensure maximum security, we will allow the identity creator to specify the accounts that are authorized to modify the identity's addresses. This will enable the creator to retain control of the identity even if they lose access to the account used to create it.| +| 2. | My Identity page | The My Identity page will be developed using React.js, providing users with a user-friendly interface to interact with the Identity contract. This will include the ability to create a new identity, add or remove addresses associated with an identity, and access and copy the unique `identityNo` to share with others. This UI will also generate the `Identity Key` for the user's identity and will update it every time he adds a new blockchain address. This `Identity Key` will be accessible for the identity creator when sharing his identity. The interface will be based on the mock design presented in the [UI design](https://github.com/Szegoo/Grants-Program/edit/application/applications/Dotflow.md?pr=%2Fw3f%2FGrants-Program%2Fpull%2F1657#ui-design) section. | + + +### Milestone 2 Example — Additional features + +- **Estimated Duration:** 1,5 month +- **FTE:** 1,5 +- **Costs:** 11,000 + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | MIT | +| **0b.** | Documentation | The contract and the website code will be well documented and open for everybody to check. The UI will have a simple UI that will be intuitive to use. | +| **0c.** | Testing and Testing Guide | The Address Book ink! contract will be well tested with unit and integration tests. The functionality for generating XCM messages will very well tested to make sure the tokens are always transfered to the proper destination. | +| **0d.** | Docker | We will provide a Dockerfile that can be used to test all the functionality delivered with this milesone. | +| 0e. | Article | We will publish a Medium article that explains the details of our project. | +| 1. | Address Book | We will develop the code for the Address Book contract using ink! so that our contracts can be compiled to wasm and deployed to any blockchain that implements the contracts pallet. The Address Book will enable users to create an address book and populate it with the identities they interact with most frequently. The identities will be added via their identityNo since our main goal is abstracting away addresses from the users. When adding an identity to an address book the Identity Key will also be needed. The address book will be stored on chain but the `IdentityKey` will be stored in local storage. The application will expect the user to provide the `IdentityKey` when using the app from a different device for the first time. | +| 2. | Routing functionality. | The code responsible for routing tokens to the correct destination will be incorporated into the frontend code written in TypeScript. This code will incorporate the necessary logic for constructing XCM messages to route tokens to the appropriate address. In cases where the destination chain is the same as the origin, a simple transaction will be executed. Because of possible race conditions where the identity owner is trying to update an address on a parachain while another user is trying to send funds to that identity on that parachain we introduce additional checks on the frontend. Before sending a transaction that will transfer the funds, the frontend will check whether there are any pending transactions happening that would change the address on the chain the user is transferring funds to. In case there is a pending transaction the user will get a warning and will be advised to wait for a moment and try sending the transaction again. | +| 3. | Address Book page | We will write the code for the Address Book UI using React.js. The UI will be based on the provided mock design that we displayed above in the [UI design section](https://github.com/Szegoo/Grants-Program/edit/application/applications/Dotflow.md?pr=%2Fw3f%2FGrants-Program%2Fpull%2F1657#ui-design). The UI will make it possible for users to create an address book and add identities to it. | +| 4. | Transfer page | We will create a user interface using React.js that will enable users to send tokens to a designated `IdentityId`. This UI will abstract away the complexity of addresses and leverage the Routing functionality described in this table(Section 2) to handle token routing. The UI design will be based on the mock design presented in the [UI design](https://github.com/Szegoo/Grants-Program/edit/application/applications/Dotflow.md?pr=%2Fw3f%2FGrants-Program%2Fpull%2F1657#ui-design) section for optimal user experience. | + + +## Future Plans + +Our future plan is to expand our core functionality and add more features so that the tokens can be routed based on some different criteria. Some example of these ideas are: + +- Route tokens based on the amount, sender and/or the token itself +- Split the transferred amount to multiple addresses + +An exciting feature we would like to build in the future is enable token transfers between blockchains that are not part of the Polkadot network(e.g. Polkadot<->Ethereum). + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** GitHub From 15265ca97fa10b987ff4e379e6685e6b80eb0b04 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 31 May 2023 20:18:03 +0200 Subject: [PATCH 445/578] Update index.md Add Dotflow --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index bba2d20d468..d0e73a95cb8 100644 --- a/applications/index.md +++ b/applications/index.md @@ -63,6 +63,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Gloslab](https://github.com/smiasojed) | [Contracts performance measurement tool proposal](contracts-tool.md) | [GitHub](https://github.com/smiasojed) | ☐ | ☐ | ☐ | | [Nikita Orlov PR](https://github.com/stringnick) | [Faucet chat based bot](faucet-bot.md) | [GitHub](https://github.com/stringnick) | ☐ | ☐ | ☐ | | [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal Saas Pricing](societal_saas_pricing.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☐ | ☐ | +| [MASTER UNION LLC.](https://github.com/TheDotflow) | [Dotflow](Dotflow.md) | [GitHub](https://github.com/TheDotflow) | ☐ | ☐ | ☐ | [🔝](#menu) From 9bae277fabe15e427d0904146293224f669c497b Mon Sep 17 00:00:00 2001 From: Song Zhou Date: Thu, 1 Jun 2023 02:21:07 +0800 Subject: [PATCH 446/578] remove milestone2 of choko wallet (#1772) --- applications/choko_wallet.md | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/applications/choko_wallet.md b/applications/choko_wallet.md index 6d122d5965d..0101453e54b 100644 --- a/applications/choko_wallet.md +++ b/applications/choko_wallet.md @@ -114,7 +114,7 @@ Mostly described above in the Overview section. - **Total Estimated Duration:** 3 months - **Full-Time Equivalent (FTE):** 5 FTE -- **Total Costs:** $64,000 +- **Total Costs:** $36,000 ### Milestone 1 @@ -133,22 +133,6 @@ Mostly described above in the Overview section. | 2. | A Sample DApp | A sample DApp created with `@choko-wallet/sdk` to test with common functionalities. | | 3. | SDK | For `@choko-wallet/known-networks` will include a few popular Polkadot chains, `@choko-wallet/request-handler` will implements handler for "request for user public identity", "request to sign transaction", "request to sign message", "request to decrypt/encrypt message" (Note: encryption/decryption won't be a solution yet, see discussion above for details). | -### Milestone 2 - -- **Estimated Duration:** 1.5 month -- **FTE:** 4 FTE -- **Costs:** 28,000 USD - -| Number | Deliverable | Specification | -| -----: | ----------- | ------------- | -| 0a. | License | Apache 2.0 | -| 0b. | Documentation | We will provide both **inline documentation** of the code and a **live demo**. Documentation to SDK.| -| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | -| 0d. | Docker | A Dockerfile won't be much useful for a static web app. Therefore, we are not going to provide one for this milestone. | -| 0e. | Article | We will publish two **article** that explains 1. Dapp developers, how to get started and why to get started with Choko Wallet 2. How to create LinkDrop and rational behind it. | -| 1. | Reactjs WebApp | dashboard (display balance, send tokens), stake tokens on selected networks. An alternative dashboard to list assets across multiple parachains and relay chains. A built-in Dapp to teleport assets between parachains (i.e. Support for only DOT and KSM) | -| 2. | Linkdrop Pallet | A substrate pallet that enable anyone to create a linkdrop vault with X number of Y maximum recepients. The developer will create a batch of Y authorization code by `encode( signMessage(vaultId, receipientIndex) )` and distribute the authorization code to seed users. The pallet will then accept a rate limited 0 weight transaction that validate the authorization code and make transfers. | -| 3. | Linkdrop in Web App | Web App interface to create and claim LinkDrops | ## Future Plans From efcb5ac9eced413c3ccd9bbc8f83a3f225523c9f Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Thu, 1 Jun 2023 02:22:14 -0400 Subject: [PATCH 447/578] Update index.md (#1779) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index d0e73a95cb8..fc0a5069693 100644 --- a/applications/index.md +++ b/applications/index.md @@ -112,7 +112,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [gmajor](https://github.com/gmajor-encrypt) | [XCM Tools](xcm-tools.md) | [GitHub](https://github.com/gmajor-encrypt/) | ☐ | ☒ | ☐ | | [David Semakula](https://github.com/davidsemakula) | [Ink Analyzer](ink-analyzer.md) | [GitHub](https://github.com/ink-analyzer/ink-analyzer) | ☐ | ☒ | ☐ | | [Bright Inventions](https://brightinventions.pl/) | [High-availability validator setup](High_availability_validator_setup.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☐ | -| [DIA Data](https://www.diadata.org/) | [Bridges Attestation Oracle](DIA_Bridge_Attestation_Oracle.md) | [GitHub](https://github.com/diadata-org/) | ☐ | ☐ | ☐ | +| [DIA Data](https://www.diadata.org/) | [Bridgestate Attestation Oracle](DIA_Bridge_Attestation_Oracle.md) | [GitHub](https://github.com/diadata-org/) | ☐ | ☒ | ☐ | | [TogetherCrew](http://www.togethercrew.com/) | [Community Health Check](community-health-check.md) | [GitHub](https://github.com/RnDAO) | ☐ | ☐ | ☐ | | [Decentration](https://www.decentration.org/) | [Supersig Phase 2](./supersig_fellowship.md) | [GitHub](https://github.com/decentration) | ☐ | ☒ | ☐ | | [Polkadrys Labs](https://github.com/rtomas) | [Open Payroll](./openPayroll.md) | [GitHub](https://github.com/rtomas) | ☐ | ☐ | ☐ | From ff20f02a5ce5e450da41260d93d7b02c5530e54d Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 1 Jun 2023 10:08:49 +0200 Subject: [PATCH 448/578] choko wallet update index.md See https://github.com/w3f/Grants-Program/pull/1772 and https://github.com/w3f/Grants-Program/pull/1022 --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index fc0a5069693..39abfcd2142 100644 --- a/applications/index.md +++ b/applications/index.md @@ -194,7 +194,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Uke](https://github.com/Uke-Messaging) | [Uke Messaging - PoC - Phase 1](./uke.md) | [GitHub](https://github.com/Uke-Messaging) | ☒ | ☐ | ☐ | | [Redstone Network](https://github.com/difttt) | [Redstone Network](./RedStone%20Network.md) | [GitHub](https://github.com/difttt) | ☐ | ☒ | ☐ | | [JURIMETRIC TECNOLOGIA LTDA](https://www.jurimetric.com.br/) | [Polkadart](./Polkadart.md) | [GitHub](https://github.com/rankanizer/polkadart) | ☐ | ☒ | ☒ | -| [Skye Kiwi](https://skye.kiwi/) | [Choko Wallet](./choko_wallet.md) | [GitHub](https://github.com/skyekiwi) | ☐ | ☒ | ☐ | +| [Skye Kiwi](https://skye.kiwi/) | [Choko Wallet](./choko_wallet.md) | [GitHub](https://github.com/skyekiwi) | ☐ | ☒ | ☒ | | [Popular Coding](https://www.popularcoding.com/) | [Ventur](./ventur.md) | [GitHub](https://github.com/popular_coding) | ☐ | ☒ | ☒ | | [Asylum](https://asylum.space/) | [Asylum follow-up 1](./asylum_follow_up_1.md) | [GitHub](https://gitlab.com/asylum-space/) | ☒ | ☒ | ☐ | | [Cyril Carlier](https://github.com/CrommVardek) | [Maki](./Maki.md) | [GitHub](https://github.com/CrommVardek) | ☐ | ☐ | ☐ | From ada620568dff7c7457e9e98079ca86cbcc8e5e5a Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 1 Jun 2023 12:17:55 +0200 Subject: [PATCH 449/578] Close BPF-based ink! smart contracts (#1780) --- docs/RFPs/{Open => Closed}/bpf-contracts.md | 2 +- docs/rfps.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename docs/RFPs/{Open => Closed}/bpf-contracts.md (97%) diff --git a/docs/RFPs/Open/bpf-contracts.md b/docs/RFPs/Closed/bpf-contracts.md similarity index 97% rename from docs/RFPs/Open/bpf-contracts.md rename to docs/RFPs/Closed/bpf-contracts.md index 31a4b2e5ce3..d85483256ba 100644 --- a/docs/RFPs/Open/bpf-contracts.md +++ b/docs/RFPs/Closed/bpf-contracts.md @@ -1,6 +1,6 @@ # BPF-based ink! smart contracts -* **Status:** Open +* **Status:** [Closed](https://forum.polkadot.network/t/ebpf-contracts-hackathon/1084/13?u=david) * **Proposer:** [takahser](https://github.com/takahser) ## Project Description :page_facing_up: diff --git a/docs/rfps.md b/docs/rfps.md index 464c776ce82..7e55d6c5717 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -32,7 +32,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [analysis-website-and-data-platform.md](RFPs/Open/analysis-website-and-data-platform.md) | 🟢 | 17.02.2023 | | [anti-collusion_infrastructure.md](RFPs/Open/anti-collusion_infrastructure.md) | 🟢 | 29.11.2021 | | [appi.md](RFPs/Closed/appi.md) | 🔴 | 20.07.2021 | -| [bpf-contracts.md](RFPs/Open/bpf-contracts.md) | 🟢 | 06.01.2023 | +| [bpf-contracts.md](RFPs/Closed/bpf-contracts.md) | 🔴 | 01.07.2023 | | [candle-auction.md](RFPs/Closed/candle-auction.md) | 🔴 | 02.02.2022 | | [crowdloan_front_end_template.md](RFPs/Closed/crowdloan_front_end_template.md) | 🔴 | 25.04.2023 | | [data_analysis_tools.md](RFPs/Open/data_analysis_tools.md) | 🟢 | 25.01.2023 | From 19c27f63ad26df4e02ca04cb0f8a4fe009d09a2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 1 Jun 2023 16:58:23 +0200 Subject: [PATCH 450/578] Cancel Gluon_decentralized_hardware_crypto_wallet_services.md (#1781) --- .../Gluon_decentralized_hardware_crypto_wallet_services.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/applications/Gluon_decentralized_hardware_crypto_wallet_services.md b/applications/Gluon_decentralized_hardware_crypto_wallet_services.md index 8e066128187..25c4a732ed6 100644 --- a/applications/Gluon_decentralized_hardware_crypto_wallet_services.md +++ b/applications/Gluon_decentralized_hardware_crypto_wallet_services.md @@ -6,6 +6,9 @@ * **Payment Address:** ERC20(DAI etc.):0x0cE6254832D553590349Ef7a427519d1eb8af70F +* **Status:** [Cancelled]( +https://github.com/w3f/Grants-Program/pull/182#issuecomment-1571885497) + > *The above combination of your GitHub account submitting the application and payment address will be your unique identifier during the program. Please keep them safe.* ## Project Overview :page_facing_up: From 1deb696f0bbc28cc5ace8a69811ca0aeee80abe9 Mon Sep 17 00:00:00 2001 From: Parth <97211975+ParthChaudhary31@users.noreply.github.com> Date: Fri, 2 Jun 2023 03:36:37 +0530 Subject: [PATCH 451/578] RFP/securityMarketPlace (#1726) * RFP/security * changes * Tables Updated * Links Updated * changes * WireFrames * MIlestones * Milestone * Techstack Added * Revised Price * Update applications/Security_Marketplace.md Co-authored-by: S E R A Y A --------- Co-authored-by: S E R A Y A --- applications/Security_Marketplace.md | 293 +++++++++++++++++++++++++++ 1 file changed, 293 insertions(+) create mode 100644 applications/Security_Marketplace.md diff --git a/applications/Security_Marketplace.md b/applications/Security_Marketplace.md new file mode 100644 index 00000000000..78415bc730b --- /dev/null +++ b/applications/Security_Marketplace.md @@ -0,0 +1,293 @@ +# Security Marketplace + +- **Team Name:** Antier Solutions +- **Payment Address:** 1XhNxALoCmXF86aiwZtdDJspjWZBiRX9UfbJ4jQsWN15eSu (aUSD) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: +The proposal is in response to the RFP : [Decentralised Security marketplace](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/decentralized-security-marketplace.md). + +### Overview + +The envisioned project aims to develop a decentralized security marketplace platform much to the liking of similar existing platforms like [hackenproof](https://hackenproof.com/) and [Immunefi](https://immunefi.com/), with its unique value propositions being the aim to reward users for submitting full-blown security/Functional audits instead of individual vulnerabilities. + +Our envisioned platform will be a hybrid model that combines smart contract functionality with a centralized server to optimize gas fees. We understand that paying gas fees for small transactions can cause hesitation among users and thus have come up with a solution that optimizes the platform's operation by shifting its peripheral features off-chain while retaining its decentralized nature through the use of smart contracts for implementation of its core functionality such as escrow and governance. + +The proposed platform will be designed to provide an incentivized system that rewards auditors for submitting comprehensive audit reports on schedule while also punishing those who fail to do so. + +Our platform is also envisioned to feature a reputation system that allows auditors to build and maintain their reputations based on their past auditing records. The reputation system will act as a measure of trustworthiness for auditors while facilitating the project creators in the selection process of the right auditors for their projects. Moreover, users who have earned enough reputation will be entitled to the Arbiter role, which allows them to vote in support of or against a submitted audit based on whether it meets all of the scope requirements as outlined in the project description for a share of validation fees. + +### Project Details + +**Technical Diagram** + +![Technical Architecture](https://github-production-user-asset-6210df.s3.amazonaws.com/106224868/241970938-b0e0fda7-83bb-4001-97e2-66546db2eeb5.png) + + +**Pre Script:** + +1) The below lifecycle is not a blueprint or final version of the + project, but instead, a basic outline to depict the thinking + process involved in the proposal. + +2) The mathematical figures are by no means final + and will be concluded once the production is underway after + carefully considering the market situation. + +Here is an envisioned lifecycle of a project on our platform. + +1. Users will begin their journey on our platform by registering on our sign-up page. +2. Users can then proceed to our login page and then the dashboard after completing the validation process there. +3. Users can be broadly classified as : + Patrons: Users, generally the owners of big platforms that wish to avail of the auditing services. + Auditors: Users that are willing to offer their auditing services on the platform. + Arbiters: Trusted community members that will review the auditor’s work and verify the auditor’s claim for rewards. +4. The dashboard can be used to access all the available Projects offered by patrons on the platform, the user from there can create a post (Audit Request) + for their project, bid for already existing projects, or switch to the arbiter's dashboard if authorized. +5. The patron can create a post which will entail: + A) Project Status: Whether the project is active, pending, retrieved, completed, awaiting validation, or expired. Will be active by default on creation. + B) Type of Audit: Whether it includes Smart Contract Audit or penetration testing or Performance testing. Patrons can choose multiple tags. This will help + auditors in sorting through the projects to find the project they wish to assess for auditing. + C) Project description: A description of the working of a project by owners/developers to aid auditors, can consist of document links. + D) Github link to the Project. + E) Offered Amount: The maximum amount offered for a successful audit, value in terms of stablecoins/USD pegged tokens. + F) Audit Expectations: Any expectations the project developers/owners might have from the auditors such as including suggestions, checking test coverage/quality, + expected deadline, and scope of the audit. Arbiters will evaluate the auditor’s work on its basis. +6. The Patron will have to add the promised amount to the escrow contract at the very time of posting. +7. To elaborate on project status, The initial status of any project that will be posted will be active by default and hence, will be open to offers from auditors on the platform. + Retrieved would mean that the project was retrieved by the project’s patrons, the status of a project can only be turned to retrieved if it's in active status, and the option of retrieving will be made unavailable in any other status. + Pending would mean that an auditor has been commissioned and that the audit is underway. + Awaiting Validation would mean, the submitted auditing report is currently being scrutinized by Arbiters to ascertain it meets the pre-defined scope. + If for some reason an offer is not met even after two weeks of the expected deadline, the project will be marked expired. + + ![Project Lifecycle](https://github-production-user-asset-6210df.s3.amazonaws.com/106224868/241969866-5024f3da-94a2-4efc-a436-963c70249fc6.png) + +8. An auditor can bid on projects they want to audit. A bid includes a proposed deadline they can complete the project in and an amount they wish to get in exchange for the project. + Auditors, just like any user can view all the posts and decide which one they wish to make a bid on. They can filter through the list of projects for a particular range of amounts, or for a specific Audit type. +9. At a time, a new Auditor can only work on 1 active project. This means that a new user can make multiple bids (Limited to 5 at a time) but once one of them is accepted, his other bids will be retrieved and he cannot bid on other projects until he finishes the active audit. +10. As the auditor matures on the platform, Their active audit limit will be increased by 1 for every 3rd successful audit they deliver although this will be capped at 7. So an auditor can + never have more than 7 simultaneously active audits ongoing at a time. +11. The Bids made by auditors will be publicly visible and patrons can decide on whom they wish to delegate the job to based on their offers and their profiles. +12. The user profiles will be stored off-chain in a central database allowing users to edit them as they please and keep their feats and experiences updated. This will include a unique username, a bio where they can mention their previous experiences with auditing, links to their socials, and sample audit reports. An optional KYC can be done to verify identity. + This feature will be particularly important for auditors to eliminate identity theft and impersonation threats to reputable security companies and/or well-known individual auditors. Hence helping project creators while deciding on which offer to accept. +13. Once the project’s patron accepts one of the listed bids, the project is marked pending, and the selected auditor is notified on their profile and their email address about the start of the auditing process. + Patron can not withdraw the amount at this stage. The auditor will be given a buffer of 12 hours to accept the job assuming that he has taken that much time to check the mail or website notification. +14. The auditor commissioned with the project will then have till the proposed deadline to submit a successful audit. They can upload the audit in pdf format to the platform. There will be a penalty + for late submission of the audit which will be a certain amount of the decided amount for submission later than the deadline to 1 week and an increased penalty for the second week. After two weeks + the project’s status will automatically be turned to expired, The commissioned auditor will be given a negative point, and the project’s patron will be refunded the whole amount. +15. The submitted Audit report will then be sent to the patron which he can accept, in which case after subtraction of the platform fee, the promised amount will be sent to the auditor. +16. In case, the patron isn’t satisfied with the audit report, the dispute will then be handled by randomly selected active arbiters who will vote for or against the audit report by judging it against + the expectations of the patron specified at the start of the audit. +17. In case, the submitted project is downvoted by 5 arbiters for the first time, a deadline extension of 1 day will be granted to the auditor at no penalty (for any altercations that can be quickly + made to the report), a 6-day extension will be granted the second time around at certain percentage of penalty (for major scope misses). If the audit report is downvoted for the third time, the + project status will be marked as expired, and the project creators can retrieve the whole staked amount. The auditor commissioned will be given a negative review on-chain. +18. If 5 of the arbiters are satisfied with the audit report, then the patron will have no option but to accept the report and the promised amount will be transacted to the auditor after subtracting + the platform fee and +19. The auditors will get platform Points along their profile based on their actions, for every: + 1 successful audit completion: 1XP point (Increases with more and more audits) + 1 unsuccessful audit: -3XP points (Adds up) +20. The point system is designed to help patrons identify reputable members of the community as well as alert them of newcomers and bad elements. Once a user hits a -6XP rating, he cannot bid anymore + on the platform. +21. The proposed platform will charge a certain amount as a platform fee and the arbiter’s commission, the remaining funds will be transferred to the auditor’s wallet address connected to their profile. + + + +The peripheral components in the above-suggested platform such as user +profiles, projects posted(not yet completed), and KYC procedure will be +carried out with the help of Back-end Services, and the data will be +stored in a centralised database to facilitate users to change and +update their profiles at will whereas, The core functionalities such as +escrow, auditing achievements, and records will be stored in a +decentralised manner using smart contracts developed with !ink. + +The Data in the model will be stored either in the centralised database +or on the blockchain and hence no data will be lost even if the server is +shut for some unforseen reason. + +**Proposed TechStack** +- BackEnd : NodeJs +- FrontEnd : ReactJS using Astar.js +- Smart Contracts : !ink + +**WireFrames** + +![Login Page]( https://github.com/viswatejay/RFP/assets/106224868/38a52e06-cdf9-4090-8c67-afe8796638ba ) + +--- + +![SignUp Page]( https://github.com/viswatejay/RFP/assets/106224868/820530e5-0976-49b2-8351-efb86314a21c ) + +--- + +![OTP Verification Page]( https://github.com/viswatejay/RFP/assets/106224868/ee1ddb45-cc59-4979-b4a1-e3785174b3e2 ) + +--- + +![ Dashboard Page ]( https://github.com/viswatejay/RFP/assets/106224868/40cf5cb4-5d6e-4573-9223-851f82ab40a5 ) + +--- + +![ Detail Page ]( https://github.com/viswatejay/RFP/assets/106224868/8845baea-fc9c-480a-93d7-7692c9c59020 ) + +--- + +![ Profile Page ]( https://github.com/viswatejay/RFP/assets/106224868/92b8b522-41b4-4ac9-9485-39f493056eea ) + +--- + +![ Profile-MyAudits Page]( https://github.com/viswatejay/RFP/assets/106224868/48c2b803-a68b-4613-9344-850d668f0ca4 ) + +--- + +![ Profile-PendingAudits Page]( https://github.com/viswatejay/RFP/assets/106224868/853c43b2-f3e9-4c30-91b8-6da00650c6ba ) + +--- + +![ Create Post Page ]( https://github.com/viswatejay/RFP/assets/106224868/44caf541-f311-41e3-b415-e009bcdbe37c ) + +### Ecosystem Fit + + - The escrow smart contract will be developed in a platform-agnostic manner which will make it beneficial for future use cases. + - The negative badge mapping can be used by other platforms in the ecosystem to create a bot blacklist. + - The platform helps project owners in the ecosystem to find auditors/whitehats and vice versa. + +## Team :busts_in_silhouette: + +### Team members + +- Ankit Bhatia +- Parth Chaudhary +- Niketan Saini +- Nitin Sharma +- Vishant Mittal +- Shubham Aswal +- Abhishek Dhiman + +### Contact + +- **Contact Name:** Ankit Bhatia +- **Contact Email:** ankit.bhatia@antiersolutions.com +- **Website:** https://www.antiersolutions.com/ + +### Legal Structure + +- **Registered Address:** E-221, Phase 8B, Industrial Area, Sector 74, Sahibzada Ajit Singh Nagar, Punjab 160059 +- **Registered Legal Entity:** Antier Solutions Pvt. Ltd. + +### Team's experience + +Antier solutions entered the blockchain domain in 2016, Back when one bitcoin was not even a 1000$. The path from back there +to where we stand currently has blessed our organization not only with rewards but also with an abundance of experience. +Our Smart contract Auditing team is led by some of the most experienced and competitive developers of the organization as well as the ecosystem. +The team is well-experienced in both the development side as well as the debugging side of an SDLC and has an eye for the bugs as well as respect +for standards which, we believe, makes us a perfect fit to be the practitioner of this RFP. + +Here are some of the feats, achievements our organisation boasts of: + +1) Developed validator and nominator apps for substrate-based blockchains. +2) Customised default reward mechanism in the staking pal of the substrate chain by integrating the sustainability and + reliability score of the validators in the current reward system. +4) Integrated EVM and WASM-based virtual machines natively in the substrate chain so the chain could support both EVM(Metamask, + Remix, Web3.js, etc) and WASM(WebAssembly target, INK framework, etc) tooling. +5) Replicated whole polkadot ecosystem(Relay chain, Parachains, XCM), Where parachains are use case specific chains and communicate + through XCM protocol with each other. +6) Developed several NFT Marketplace contracts both decentralized and hybrid across various blockchains such as [Hungama](https://heftyverse.xyz/), + [SkodaVerse](https://www.skoda-auto.com/world/skodaverse), [Fanverse](https://www.fan-verse.io/) just to name a few. +7) Developed many DeFi projects across multiple blockchains such as [Shido, Staking](https://dex.shido.io/staking-page), [Shido, Perpetuals](https://perp.shido.io/), [YSL](https://ysl.io/), [Lithium](https://lithium.ventures/) and many more. +8) We have also developed an Asset Tokenization solution based on ERC3643 on EVM, Aptos & Provenance chain for some of the renowned Financial Institutions. The + asset classes tokenized are Real Estate, Securities, Private Equity, and commodities such as Gold. Can't share the platform details, as we are under strict NDA. +9) We are also developing some in-house Web3 solutions such as Relayer Hub for meta-transactions, Decentralized Token Bridge, a multi-sig solution like Gnosis-safe + and we are actively researching and developing in areas such as multi-party Computation (MPC), Account Abstraction (AA, ERC4337), zk proofs and many more. + + +- Our team has also been proactively participating in the Substrate Stack exchange and we ask/answer question related to ink!, Substrate, parachain. We rank in the top 6% people in the Substrate Stack Exchange. + +- Profiles of our team: +1. https://substrate.stackexchange.com/users/2372/arunjot-singh +2. https://substrate.stackexchange.com/users/2281/amit-kumar-yadav +3. https://substrate.stackexchange.com/users/354/shubham-gupta + + +### Some Live Sites: + +- https://ysl.io/nft +- https://heftyverse.xyz/ +- https://www.fan-verse.io/ +- https://dex.shido.io/staking-page +- https://perp.shido.io/ +- https://www.skoda-auto.com/world/skodaverse +- https://collective-vault.planetinverse.com/ + + +### Team LinkedIn Profiles + +- https://www.linkedin.com/in/ankit-bhatia-b6833370/ +- https://www.linkedin.com/in/niketan-saini-5a26a0177/ +- https://www.linkedin.com/in/shubham-aswal-528462130/ +- https://www.linkedin.com/in/nitin-sharma-9b00b6188/ +- https://www.linkedin.com/in/parth-chaudhary-b5220a257/ +- https://www.linkedin.com/in/abhishek-dhiman-6368a2187/ +- https://www.linkedin.com/in/mittalv/ + + +## Development Status :open_book: + +Awaiting Response. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 12-14 weeks +- **Full-Time Equivalent (FTE):** 4,5 +- **Total Costs:** 29,920 USD + +### Milestone 1 — UI/UX designs, Smart Contracts & Backend Services + +- **Estimated duration:** 7-8 weeks +- **FTE:** 5 +- **Costs:** 19,320 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 / GPLv3 / MIT / Unlicense | +| **0b.** | Documentation | We will provide both inline documentation of the code and a basic tutorial that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works.| +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1 | UI/UX | We will deliver complete UI/UX designs. | +| 2 | Reputation Token Contract| This will be a non-transferrable token smart contract(Soul Bound Token) that will serve as auditors' reward and as proof of reputation points after the successful completion of an Audit. | +| 3 | Escrow Contract| This will be a master contract where all tokens will be managed by patrons and distributed to the Auditors after the successful closure of the Audit. | +| 4 | Audit Directory Contract| This will be a contract that stores all hashes of the audit reports. Which can be retrieved even when the platform goes down. | +| 5 | Arbiters Contract| This contract will have specific arbiters for every audit thread where they can participate in the voting. | +| 6 | Node Services | We will deliver the backend services for login , sign up, 2FA and Profile creation | + + +### Milestone 2 — Application & Deliveries + +- **Estimated Duration:** 5-6 weeks +- **FTE:** 4 +- **Costs:** 10,600 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 / GPLv3 / MIT / Unlicense | +| **0b.** | Documentation | We will provide both inline documentation of the code and a basic tutorial that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works.| +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| **0e** | Article | We will publish an **article**/workshop that explains [...] (what was done/achieved as part of the grant). (Content, language and medium should reflect your target audience described above.) | +| 1 | Node Services | We will deliver the remaining back end services including Post creation and Bidding system. | +| 2 | Front End | We will deliver the completely functional DApp integrated with the Smart contracts and backend services. The working application will have all the 9 pages as per the wireframes and above mentioned. The application will be deployed on the provided servers. | + + + +## Future Plans + +- As mentioned earlier, Our organization plans to serve as the Arbiters in the early stages of + the platform's deployment untill reliable auditors emerge on the platform who have been actively + contributing to the community to make this process decentralised in true sense. + +## Referral Program (optional) :moneybag: + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Through RFP Portal. From bb836b299ca97566bd2c3cb91a144235675b9034 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 2 Jun 2023 09:00:35 +0200 Subject: [PATCH 452/578] Update index.md Antier Solutions --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 39abfcd2142..33c128df881 100644 --- a/applications/index.md +++ b/applications/index.md @@ -64,6 +64,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Nikita Orlov PR](https://github.com/stringnick) | [Faucet chat based bot](faucet-bot.md) | [GitHub](https://github.com/stringnick) | ☐ | ☐ | ☐ | | [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal Saas Pricing](societal_saas_pricing.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☐ | ☐ | | [MASTER UNION LLC.](https://github.com/TheDotflow) | [Dotflow](Dotflow.md) | [GitHub](https://github.com/TheDotflow) | ☐ | ☐ | ☐ | +| [Antier Solutions](https://www.antiersolutions.com/) | [RFP/securityMarketPlace](Security_Marketplace.md) | [GitHub](https://github.com/ParthChaudhary31) | ☐ | ☐ | ☐ | [🔝](#menu) From 557752de6268c432effd790ac0b6d589646aa498 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Fri, 2 Jun 2023 09:19:10 +0200 Subject: [PATCH 453/578] Update Status of Security Marketplace --- .../decentralized-security-marketplace.md | 2 +- docs/rfps.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename docs/RFPs/{Open => Under Development}/decentralized-security-marketplace.md (97%) diff --git a/docs/RFPs/Open/decentralized-security-marketplace.md b/docs/RFPs/Under Development/decentralized-security-marketplace.md similarity index 97% rename from docs/RFPs/Open/decentralized-security-marketplace.md rename to docs/RFPs/Under Development/decentralized-security-marketplace.md index 3c32c753169..f2dda7b7cd2 100644 --- a/docs/RFPs/Open/decentralized-security-marketplace.md +++ b/docs/RFPs/Under Development/decentralized-security-marketplace.md @@ -1,6 +1,6 @@ # Decentralized Security Marketplace -* **Status:** Open +* **Status:** [Under Development](https://github.com/w3f/Grants-Program/pull/1726) * **Proposer:** [Matteo Casonato](https://github.com/0xCaso), [Bhargav Batt](https://github.com/bhargavbh) ## Project Description :page_facing_up: diff --git a/docs/rfps.md b/docs/rfps.md index 7e55d6c5717..d669bff0bf7 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -36,7 +36,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [candle-auction.md](RFPs/Closed/candle-auction.md) | 🔴 | 02.02.2022 | | [crowdloan_front_end_template.md](RFPs/Closed/crowdloan_front_end_template.md) | 🔴 | 25.04.2023 | | [data_analysis_tools.md](RFPs/Open/data_analysis_tools.md) | 🟢 | 25.01.2023 | -| [decentralized-security-marketplace.md](RFPs/Open/decentralized-security-marketplace.md) | 🟢 | 23.01.2023 | +| [decentralized-security-marketplace.md](RFPs/Under%20Development/decentralized-security-marketplace.md) | 🟡 | 02.06.2023 | | [epassport-zk-validation.md](RFPs/Closed/epassport-zk-validation.md) | 🔴 | 21.03.2023 | | [formal_guarantees_for_grandpa.md](RFPs/Open/formal_guarantees_for_grandpa.md) | 🟢 | 07.10.2022 | | [grant_management_webapp.md](RFPs/Open/grant_management_webapp.md) | 🟢 | 09.03.2023 | From be59227baa891c6da742b5bc5c9abec5b20ff241 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Fri, 2 Jun 2023 20:51:40 +0200 Subject: [PATCH 454/578] Organise RFPs into collapsible tables (#1783) * Organise RFPs into collapsible tables * Fix styling of tables and summary tag --------- Co-authored-by: David Hawig --- docs/rfps.md | 117 +++++++++++++++++++++++++-------------------- src/css/custom.css | 10 ++++ 2 files changed, 76 insertions(+), 51 deletions(-) diff --git a/docs/rfps.md b/docs/rfps.md index d669bff0bf7..37d53440b04 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -19,57 +19,72 @@ If you find an open RFP here that you think you can address, feel free to [submi ## 📜 List of RFPs -**Status:** - -- **🟢 Open:** We are looking for (additional) teams to implement this. -- **🟡 Under Development:** One or more teams are working on this. We might be interested in additional implementations, but it’s better to double check this with the grants team. -- **🔴 Closed:** This RFP is either closed, on hold, or no longer useful. However, if it’s implemented and not maintained, we would be interested in signing a [maintenance grant](maintenance.md). - -| RFP | Status | Last Updated | -| :-- | :----: | :----------: | -| [a-and-v-topology.md](RFPs/Open/a-and-v-topology.md) | 🟢 | 29.11.2021 | -| [alternative_polkadot_host_implementations.md](RFPs/Open/alternative_polkadot_host_implementations.md) | 🟡 | 02.03.2023 | -| [analysis-website-and-data-platform.md](RFPs/Open/analysis-website-and-data-platform.md) | 🟢 | 17.02.2023 | -| [anti-collusion_infrastructure.md](RFPs/Open/anti-collusion_infrastructure.md) | 🟢 | 29.11.2021 | -| [appi.md](RFPs/Closed/appi.md) | 🔴 | 20.07.2021 | -| [bpf-contracts.md](RFPs/Closed/bpf-contracts.md) | 🔴 | 01.07.2023 | -| [candle-auction.md](RFPs/Closed/candle-auction.md) | 🔴 | 02.02.2022 | -| [crowdloan_front_end_template.md](RFPs/Closed/crowdloan_front_end_template.md) | 🔴 | 25.04.2023 | -| [data_analysis_tools.md](RFPs/Open/data_analysis_tools.md) | 🟢 | 25.01.2023 | -| [decentralized-security-marketplace.md](RFPs/Under%20Development/decentralized-security-marketplace.md) | 🟡 | 02.06.2023 | -| [epassport-zk-validation.md](RFPs/Closed/epassport-zk-validation.md) | 🔴 | 21.03.2023 | -| [formal_guarantees_for_grandpa.md](RFPs/Open/formal_guarantees_for_grandpa.md) | 🟢 | 07.10.2022 | -| [grant_management_webapp.md](RFPs/Open/grant_management_webapp.md) | 🟢 | 09.03.2023 | -| [identity-directory.md](RFPs/Under%20Development/identity-directory.md) | 🟡 | 30.05.2022 | -| [implementation-benchmarking.md](RFPs/Open/implementation-benchmarking.md) | 🟡 | 16.03.2023 | -| [ink!_smart_contract_block_explorer.md](RFPs/Under%20Development/ink_smart_contract_block_explorer.md) | 🟡 | 05.07.2021 | -| [IDE_for_ink_Smart_Contracts.md](RFPs/Open/IDE_for_ink_Smart_Contracts.md) | 🟢 | 05.04.2023 | -| [ISO_20022.md](RFPs/Open/ISO_20022.md) | 🟢 | 31.05.2022 | -| [ISO_8583.md](RFPs/Open/ISO_8583.md) | 🟡 | 31.05.2022 | -| [ksm-tipping-button.md](RFPs/Closed/ksm-tipping-button.md) | 🔴 | 20.07.2021 | -| [move_smart_contract_pallet.md](RFPs/Open/move_smart_contract_pallet.md) | 🟢 | 22.12.2022 | -| [multi-chain-block-explorer.md](RFPs/Under%20Development/multi-chain-block-explorer.md) | 🟡 | 23.11.2021 | -| [on-chain-quadratic-funding.md](RFPs/Closed/on-chain-quadratic-funding.md) | 🔴 | 29.03.2022 | -| [php-api.md](RFPs/Closed/php-api.md) | 🔴 | 27.05.2022 | -| [parachain_validation_conformance_testing.md](RFPs/Open/parachain_validation_conformance_testing.md) | 🟢 | 18.01.2023 | -| [php-scale.md](RFPs/Closed/php-scale.md) | 🔴 | 23.11.2022 | -| [polkadot-collator-setup.md](RFPs/Closed/polkadot-collator-setup.md) | 🔴 | 22.03.2023 | -| [polkadot-protocol_conformance_tests.md](RFPs/Open/polkadot-protocol_conformance_tests.md) | 🟢 | 08.05.2023 | -| [privacy-enhancement-polkadot-extension.md](RFPs/Under%20Development/privacy-enhancement-polkadot-extension.md) | 🟡 | 27.05.22 | -| [raft-validators.md](RFPs/Under%20Development/raft-validators.md) | 🟡 | 23.05.2023 | -| [scale-codec-comparator.md](RFPs/Under%20Development/scale-codec-comparator.md) | 🟡 | 30.05.2022 | -| [social-recovery-wallet.md](RFPs/Under%20Development/social-recovery-wallet.md) | 🔴 | 03.03.2023 | -| [staking-rewards-collector-front-end.md](RFPs/Closed/staking-rewards-collector-front-end.md) | 🔴 | 20.07.2021 | -| [Static-Analysis-for-Runtime-Pallets.md](RFPs/Open/Static-Analysis-for-Runtime-Pallets.md) | 🟢 | 06.02.2023 | -| [sub-consensus.md](RFPs/Open/sub-consensus.md) | 🟢 | 23.11.2021 | -| [uncollateralized-stablecoin-research.md](RFPs/Closed/uncollateralized-stablecoin-research.md) | 🔴 | 01.01.23 | -| [uptane-for-substrate-design-and-scope.md](RFPs/Open/uptane-for-substrate-design-and-scope.md) | 🟢 | 04.03.2023 | -| [user-account-access-analysis.md](RFPs/Open/user-account-access-analysis.md) | 🟢 | 07.01.2023 | -| [validator-setup-maintenance.md](RFPs/Under%20Development/validator-setup-maintenance.md) | 🟡 | 27.04.2023 | -| [validator-selection-algorithm.md](RFPs/Under%20Development/validator-selection-algorithm.md) | 🟡 | 07.12.2022 | -| [wallet-aggregator-library.md](RFPs/Closed/wallet-aggregator-library.md) | 🔴 | 09.03.2023 | -| [xcm-tool.md](RFPs/Open/xcm-tool.md) | 🟢 | 20.07.2021 | -| [alternative-polkadot-js-api-console.md](RFPs/Under%20Development/alternative-polkadot-js-api-console.md) | 🟡 | 19.05.2023 | +
🟢 Open: We are looking for (additional) teams to implement this. + +| RFP | Last Updated | +| :-- | :----------: | +| [a-and-v-topology.md](RFPs/Open/a-and-v-topology.md) | 29.11.2021 | +| [analysis-website-and-data-platform.md](RFPs/Open/analysis-website-and-data-platform.md) | 17.02.2023 | +| [anti-collusion_infrastructure.md](RFPs/Open/anti-collusion_infrastructure.md) | 29.11.2021 | +| [bpf-contracts.md](RFPs/Open/bpf-contracts.md) | 06.01.2023 | +| [data_analysis_tools.md](RFPs/Open/data_analysis_tools.md) | 25.01.2023 | +| [formal_guarantees_for_grandpa.md](RFPs/Open/formal_guarantees_for_grandpa.md) | 07.10.2022 | +| [grant_management_webapp.md](RFPs/Open/grant_management_webapp.md) | 09.03.2023 | +| [IDE_for_ink_Smart_Contracts.md](RFPs/Open/IDE_for_ink_Smart_Contracts.md) | 05.04.2023 | +| [ISO_20022.md](RFPs/Open/ISO_20022.md) | 31.05.2022 | +| [move_smart_contract_pallet.md](RFPs/Open/move_smart_contract_pallet.md) | 22.12.2022 | +| [parachain_validation_conformance_testing.md](RFPs/Open/parachain_validation_conformance_testing.md) | 18.01.2023 | +| [polkadot-protocol_conformance_tests.md](RFPs/Open/polkadot-protocol_conformance_tests.md) | 08.05.2023 | +| [Static-Analysis-for-Runtime-Pallets.md](RFPs/Open/Static-Analysis-for-Runtime-Pallets.md) | 06.02.2023 | +| [sub-consensus.md](RFPs/Open/sub-consensus.md) | 23.11.2021 | +| [uptane-for-substrate-design-and-scope.md](RFPs/Open/uptane-for-substrate-design-and-scope.md) | 04.03.2023 | +| [user-account-access-analysis.md](RFPs/Open/user-account-access-analysis.md) | 07.01.2023 | +| [xcm-tool.md](RFPs/Open/xcm-tool.md) | 20.07.2021 | + + +
+ + +
🟡 Under Development: One or more teams are working on this. We might be interested in additional implementations, but it’s better to double check this with the grants team. + +| RFP | Last Updated | +| :-- | :----------: | +| [alternative_polkadot_host_implementations.md](RFPs/Open/alternative_polkadot_host_implementations.md) | 02.03.2023 | +| [identity-directory.md](RFPs/Under%20Development/identity-directory.md) | 30.05.2022 | +| [implementation-benchmarking.md](RFPs/Open/implementation-benchmarking.md) | 16.03.2023 | +| [ink!_smart_contract_block_explorer.md](RFPs/Under%20Development/ink_smart_contract_block_explorer.md) | 05.07.2021 | +| [ISO_8583.md](RFPs/Open/ISO_8583.md) | 31.05.2022 | +| [multi-chain-block-explorer.md](RFPs/Under%20Development/multi-chain-block-explorer.md) | 23.11.2021 | +| [privacy-enhancement-polkadot-extension.md](RFPs/Under%20Development/privacy-enhancement-polkadot-extension.md) | 27.05.22 | +| [raft-validators.md](RFPs/Under%20Development/raft-validators.md) | 23.05.2023 | +| [scale-codec-comparator.md](RFPs/Under%20Development/scale-codec-comparator.md) | 30.05.2022 | +| [decentralized-security-marketplace.md](RFPs/Under%20Development/decentralized-security-marketplace.md) | 02.06.2023 | +| [validator-setup-maintenance.md](RFPs/Under%20Development/validator-setup-maintenance.md) | 27.04.2023 | +| [validator-selection-algorithm.md](RFPs/Under%20Development/validator-selection-algorithm.md) | 07.12.2022 | +| [alternative-polkadot-js-api-console.md](RFPs/Under%20Development/alternative-polkadot-js-api-console.md) | 19.05.2023 | + +
+ + +
🔴 Closed: This RFP is either closed, on hold, or no longer useful. However, if it’s implemented and not maintained, we would be interested in signing a [maintenance grant](maintenance.md). + +| RFP | Last Updated | +| :-- | :----------: | +| [appi.md](RFPs/Closed/appi.md) | 20.07.2021 | +| [candle-auction.md](RFPs/Closed/candle-auction.md) | 02.02.2022 | +| [crowdloan_front_end_template.md](RFPs/Closed/crowdloan_front_end_template.md) | 25.04.2023 | +| [epassport-zk-validation.md](RFPs/Closed/epassport-zk-validation.md) | 21.03.2023 | +| [ksm-tipping-button.md](RFPs/Closed/ksm-tipping-button.md) | 20.07.2021 | +| [on-chain-quadratic-funding.md](RFPs/Closed/on-chain-quadratic-funding.md) | 29.03.2022 | +| [php-api.md](RFPs/Closed/php-api.md) | 27.05.2022 | +| [php-scale.md](RFPs/Closed/php-scale.md) | 23.11.2022 | +| [polkadot-collator-setup.md](RFPs/Closed/polkadot-collator-setup.md) | 22.03.2023 | +| [social-recovery-wallet.md](RFPs/Under%20Development/social-recovery-wallet.md) | 03.03.2023 | +| [staking-rewards-collector-front-end.md](RFPs/Closed/staking-rewards-collector-front-end.md) | 20.07.2021 | +| [uncollateralized-stablecoin-research.md](RFPs/Closed/uncollateralized-stablecoin-research.md) | 01.01.2023 | +| [wallet-aggregator-library.md](RFPs/Closed/wallet-aggregator-library.md) | 09.03.2023 | + +
## 📬 Suggest an RFP diff --git a/src/css/custom.css b/src/css/custom.css index dfd728d40c0..daabdbe71ba 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -30,6 +30,16 @@ margin-right: 0rem; } +/* Used on RFP page to minimize tables */ +.alert { + background-color: white; + --ifm-alert-border-color: rgb(28, 30, 33); + color: rgb(28, 30, 33); +} + +.alert a { + color: rgb(28, 30, 33); +} .footer__link-item { text-decoration: none; From 508ca4c6a9c3550a39861703d7424c61bb4aaee8 Mon Sep 17 00:00:00 2001 From: Ghan Vashishtha <74914749+gnv-zeeve@users.noreply.github.com> Date: Sat, 3 Jun 2023 00:59:48 +0530 Subject: [PATCH 455/578] change user management to network management (#1782) Signed-off-by: Jasti Sri Radhe Shyam Co-authored-by: Jasti Sri Radhe Shyam --- .../Zeeve_Parachain_deployment_zoombienet_testing_automation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/Zeeve_Parachain_deployment_zoombienet_testing_automation.md b/applications/Zeeve_Parachain_deployment_zoombienet_testing_automation.md index aae0ff28f08..fb58dc20bec 100644 --- a/applications/Zeeve_Parachain_deployment_zoombienet_testing_automation.md +++ b/applications/Zeeve_Parachain_deployment_zoombienet_testing_automation.md @@ -174,7 +174,7 @@ Before applying for the Web3 Foundation Grant, the Zeeve team has built a DevOps | 2. | Configuration | Parachain configuration is critical and complicated, we will provide the GUI based pick and choose for genesis parameters and chain configs to start with parachain setup for the desired Zombie-net | | 3. | Node type support | Implement setup of all node types including Full node, Validator node and Collator node for the respective relay chain and parachain within the configured Zombie-net. | | 4. | Cloud agnostic setup | The larch setup will be cloud agnostic and it can be installed on the choice of cloud, instructions and documentation will be provided for the same. | -| 5. | User management | The larch will allow to setup different users with desired permissions and access controls such as add, delete zombie-net, view, delete logs and save, delete templates. | +| 5. | Network Management | Implement the larch tool with a user-friendly interface, features for execution info, network deletion, template cloning, and management, along with robust error handling, for seamless setup of networks and templates. | From 1681f011670025f631994f4c890ec6047e9f2b47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Forn=C3=B3s?= Date: Mon, 5 Jun 2023 09:51:33 +0200 Subject: [PATCH 456/578] Ocelloids Monitoring SDK grant application (#1715) --- applications/ocelloids_monitoring_sdk.md | 298 +++++++++++++++++++++++ 1 file changed, 298 insertions(+) create mode 100644 applications/ocelloids_monitoring_sdk.md diff --git a/applications/ocelloids_monitoring_sdk.md b/applications/ocelloids_monitoring_sdk.md new file mode 100644 index 00000000000..1dbde9d2289 --- /dev/null +++ b/applications/ocelloids_monitoring_sdk.md @@ -0,0 +1,298 @@ +# Ocelloids: Monitoring SDK + +- **Team Name:** SO/DA zone +- **Payment Address:** Fiat 04.05.2023, 16:37 +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview + +Ocelloids is an open-source software development kit for building monitoring applications for Substrate-based networks. With Ocelloids, you can easily set up complex multi-chain monitoring logic. + +## Project Details + +The project's features are outlined in the following sections. Three primary features are planned to be delivered as part of the grant: + +1. Multi-chain support: configurable multi-chain wrapper for Polkadot.js Promise and Rx APIs to simplify setup for multi-chain monitoring. +2. Core Components: a set of reactive operators for sourcing core Substrate data, such as events and extrinsics, and reactive controls for filtering and transformation over it. The core components will encapsulate common patterns like call batching and multi-signature calls. +3. Domain logic for ink! smart contracts monitoring. + +### 1. Multi-chain Support + +Ocelloids provides a configurable multi-chain wrapper for Polkadot.js Promise and Rx APIs, simplifying setup for multi-chain monitoring. + +Example usage: + +```javascript +const substrate = new SubstrateApis(new ConfigFromFile()) + +const polkadotPipe = substrate.polkadot.pipe( + // Some monitoring logic +) + +// Subscribe to events on one chain +polkadotPipe.subscribe( + event => console.log("Something happened on Polkadot: ", event) +) + +// Pipes for different chains can be merged +const monitorOnManyChains = merge( + polkadotPipe, + kusamaPipe, + statemintPipe +) + +monitorOnManyChains.subscribe( + ({ chain, event }) => console.log(`Something happened on ${chain}: ${event}`) +) +``` + +### 2. Core Components + +Ocelloids provides a set of [reactive operators](https://rxjs.dev/guide/operators) for sourcing, transforming and filtering core Substrate data such as events and extrinsics. Additionally, the core components take care of common patterns like call batching and multi-signature calls. + +#### **Data Sourcing** + +Reusable subscriptions to events and extrinsic calls on Substrate networks. Here are some illustrative code snippets of the main functionalities: + +```javascript +import { + events, + newExtrinsics, finalisedExtrinsics, pendingExtrinsics, + flattenBatch, extractMultiSigCall, + historicEvents +} from '@ocelloids/core' + +// Subscribe to new events on Polkadot +substrate.polkadot.pipe( + events() +).subscribe( + event => console.log("New event on Polkadot: ", event) +) + +// Subscribe to new extrinsics on Polkadot and extract underlying call(s) +substrate.polkadot.pipe( + newExtrinsics(), + flattenBatch(), // Flatten batch into individual calls + extractMultiSigCall(), // Extract underlying call of multisig operations + ... // some monitoring logic over calls +).subscribe( + call => console.log("New call on Polkadot: ", call) +) + +// Subscribe to new extrinsics on finalised blocks +substrate.polkadot.pipe( + finalisedExtrinsics() +).subscribe( + ext => console.log("New finalised extrinsic on Polkadot: ", ext) +) + +// Subscribe to pending extrinsics on Polkadot +substrate.polkadot.pipe( + pendingExtrinsics() +).subscribe( + exts => console.log("Pending extrinsics on Polkadot: ", exts) +) + +// Subscribe to events on Polkadot starting from block 15192447 +substrate.polkadot.pipe( + historicEvents(15192447) +).subscribe( + event => console.log("New event on Polkadot: ", event) +) +``` + +#### **Reactive Controls** + +The control components allow the system to react to external configuration changes and other on-chain activities. + +Example usage of reactive control with JSON filter: + +```javascript +import { events, jsonFilter, ControlQuery } from '@ocelloids/core' + +// Query for filtering events +const transfersQuery = new ControlQuery({ + $and: [ + { 'event.section': 'balances' }, + { 'event.method': 'Transfer' }, + { + $or: [ + { 'event.data.from': ALICE }, + { 'event.data.to': ALICE } + ] + } + ] +}) + +// Subscribe to events of Alice creating a new proxy account +// and update transfersQuery to filter events involving +// the new proxy account instead. +substrate.polkadot.pipe( + events(), + jsonFilter(new Query({ + 'event.section': 'proxy', + 'event.method': 'ProxyAdded', + 'event.data.who': ALICE + })) +).subscribe( + // Change transferQuery to start filtering + // balance transfer events of Alice's new proxy account + event => transfersQuery.change({ + $and: [ + { 'event.section': 'balances' }, + { 'event.method': 'Transfer' }, + { + $or: [ + { 'event.data.from': event.data.delegatee }, + { 'event.data.to': event.data.delegatee } + ] + } + ] + }) +) + +// Subscribe to balance transfer events filtered using transfersQuery +// It will first monitor Alice's account for balance transfer events +// After Alice creates a new proxy account, it will switch to monitoring the proxy instead +substrate.polkadot.pipe( + events(), + jsonFilter(transfersQuery) +).subscribe( + event => console.log("Balance transfer event: ", event) +) +``` + +#### **Substrate Type Conversions** + +We will provide type conversions for necessary Substrate objects that retain both key-value mapping and primitive types, i.e. a mix between the human and primitive representation, defaulting to the human one. This conversion allows easy JSON filtering and matching operations. + +### 3. Domain Logic Components + +The above examples of balance transfer monitoring only involve JSON filtering over events. However, there will be more complex cases where it could be required to query on-chain storage and make some computations over the results along the monitoring stream. Ocelloids SDK aims to extract reusable core logic for FRAME pallets as domain logic components to simplify the development process for these use cases. + +#### ink! Smart Contracts Monitoring + +The Ocelloids SDK will provide domain logic components for monitoring ink! smart contracts which will take care of: + +- filtering Substrate events and extrinsics for contract events and calls +- resolving and loading contract metadata +- decoding contract event and call with ABI metadata +- converting decoded parameters to typed key-value mapping for easy JSON filtering + +Example usage of contract components: + +```javascript +import { jsonFilter, ControlQuery } from '@ocelloids/core' +import { contractEvents, contractCalls } from '@ocelloids/components/contracts' + +const CONTRACT_ADDRESS = "5FCqFC5xdPDv8mCkaiC2hDbRauc3pg15XDEJme98BjyCsqNU" + +// Monitor transfer events emitted by the contract +substrate.rococoContracts.pipe( + contractEvents(CONTRACT_ADDRESS), + jsonFilter(Query.of({ + 'event.name': 'Transfer', + 'event.param.from': ALICE, + 'event.param.value': { $gt: 100000000 } + })) +).subscribe( + event => console.log("New transfer event: ", event) +) + +// Monitor transfer calls +substrate.rococoContracts.pipe( + contractCalls(CONTRACT_ADDRESS), + jsonFilter(Query.of({ + 'call.method': 'Transfer', + 'call.param.value': { $gt: 100000000 } + })) +).subscribe( + call => console.log("New transfer call: ", call) +) +``` + +### Tech Stack + +We will use Typescript since we are building up upon Polkadot.js API. +We will also use [RxJS](https://rxjs.dev/) under the hood for our reactive operators and data streams. +We are considering [Mingo](https://github.com/kofrasa/mingo) or similar technology for data transformation and filtering operations using MongoDB query language. + +## Ecosystem Fit + +Ocelloids SDK provides several advantages to the ecosystem: + +1. Ocelloids is the first open-source SDK to build complex monitoring applications. Its design provides a smooth experience for developers by abstracting away the underlying complexity of the monitoring logic. +2. It provides reusable components that take care of common patterns for reactive sourcing and filtering, including call batching and multi-signature calls, which can be complex and time-consuming to implement manually. +3. Ocelloids' domain logic for ink! smart contract monitoring will be a valuable addition to the Substrate ecosystem. Smart contract monitoring is an essential infrastructural piece for Dapp developers as seen by the popularity of services such as OpenZeppelin Defender and Forta detection bots. There is currently a lack of similar sophisticated services for ink! contracts and Ocelloids SDK will provide the necessary base to build powerful ink! monitoring applications. + +## Team :busts_in_silhouette: + +### Team members + +- Marc Fornós +- Xueying Wang + +### Contact + +- **Contact Name:** Marc Fornós +- **Contact Email:** frozen.pomelo@gmail.com + +### Legal Structure + +N/A + +### Team's experience + +**Marc Fornós** has been designing and implementing software systems for 20 years. He is an expert in the area of distributed systems and data-intensive applications. His experience ranges from warehouse automation with radio-frequency terminals, to being the technical director of an airline post-sale revenue optimization software-as-a-service platform, generating millions in incremental revenue during eight years of operation. In the recent past, he was in charge of evolving a commercial Ethereum block explorer and bootstrapping an explorer for Substrate-based networks focused on the contracts pallet and ink! smart contracts. + +**Xueying Wang** pivoted to software development after completing an MSc. in Aerospace Engineering and has been in the industry for the past eight years. During this time, she pioneered conversational AI assistants for airlines, counting more than 20 assistants in production covering ten languages for customer service, FAQ and in-chat purchases. She also built a scalable publish-subscribe system to trigger actions on flight feed events for the automated agents. She participated in designing a composable Solid POD/RDF data browser and bootstrapping an explorer for Substrate-based networks focused on the contracts pallet and ink! smart contracts. + +We applied, implemented and delivered the following grants under our previous employer: +* https://github.com/w3f/Grants-Program/blob/master/applications/epirus_substrate_explorer.md +* https://github.com/w3f/Grants-Program/blob/master/applications/epirus_substrate_phase_2.md + +### Team Code Repos + +- https://github.com/mfornos +- https://github.com/XY-Wang +- https://github.com/frozenpomelo (shared account) + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 2 months +- **Full-Time Equivalent (FTE):** 2 +- **Total Costs:** 28,000 USD + +### Milestone 1 + +- **Estimated duration:** 2 months +- **FTE:** 2 +- **Costs:** 28,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both inline documentation of the code and a basic guide that explains how to set up and run a monitoring application. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 1. | Core SDK | As described in [Multi-chain Support](#1-multi-chain-support) and [Core Components](#2-core-components). | +| 2. | ink! Contracts Domain Logic | As described in [ink! Smart Contracts Monitoring](#ink-smart-contracts-monitoring). | +| 3. | Example application | A Node.js CLI tool to execute the ink! smart contract monitoring logic and log the alerts. | + + +## Future Plans + +Our long-term vision is to offer an end-to-end solution accessible as a web application to allow end-users to configure monitoring agents and subscribe to on-chain activities of interest. +The web user interface exposes the domain logic components for monitoring use cases. For notifications, we will integrate with a notification centre solution, like [Novu](https://novu.co/). + +We will start with contracts monitoring for parachains and solo chains that integrate `pallet-contracts`. Later, we plan to expand the offering to other pallets and networks, including custom pallets of parachains and solo chains. The key differentiator with existing solutions is the bundling of vertical logic per pallet with complex monitoring patterns. + +Additionally, we will explore integrating the core technology into [Forta](https://forta.org/) bots. + +Other enhancements: + +- We aim to expand the domain-logic components to other FRAME pallets like `multisig`, `xcm` and `staking`. +- We aim to provide a comprehensive collection of [Node-RED](https://nodered.org/) nodes. It will allow for easy integration with thousands of existing building blocks for visual flow programming. +- Finally, we plan to support time series to aggregate data over time. This functionality will help users identify trends, such as when balance transfers exceed 100 DOT within a week. + From c6ec7e454277a4f82ddec2476b682de640c4bcd9 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 5 Jun 2023 20:59:18 +0200 Subject: [PATCH 457/578] Update index.md Ocelloids --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 33c128df881..7e5d5652f6f 100644 --- a/applications/index.md +++ b/applications/index.md @@ -65,6 +65,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal Saas Pricing](societal_saas_pricing.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☐ | ☐ | | [MASTER UNION LLC.](https://github.com/TheDotflow) | [Dotflow](Dotflow.md) | [GitHub](https://github.com/TheDotflow) | ☐ | ☐ | ☐ | | [Antier Solutions](https://www.antiersolutions.com/) | [RFP/securityMarketPlace](Security_Marketplace.md) | [GitHub](https://github.com/ParthChaudhary31) | ☐ | ☐ | ☐ | +| [SO/DA zone](https://github.com/mfornos) | [Ocelloids Monitoring SDK grant application](ocelloids_monitoring_sdk.md) | [GitHub](https://github.com/mfornos) | ☐ | ☐ | ☐ | [🔝](#menu) From 5fe9f85c090388fdfb194ed2ba4a9f61ba1f4a4a Mon Sep 17 00:00:00 2001 From: Shaivik Semwal <60818312+lawmeskiviahs@users.noreply.github.com> Date: Wed, 7 Jun 2023 00:18:33 +0530 Subject: [PATCH 458/578] Grants webapp (#1766) * IDE issue resolution grant application * level changed to 2 and pricing adjusted * webapp draft 1 * Update Grant_management_webapp.md * Update Grant_management_webapp.md * ent * modified milestones --- applications/Grant_management_webapp.md | 184 ++++++++++++++++++++++++ 1 file changed, 184 insertions(+) create mode 100644 applications/Grant_management_webapp.md diff --git a/applications/Grant_management_webapp.md b/applications/Grant_management_webapp.md new file mode 100644 index 00000000000..8ef3dbedc74 --- /dev/null +++ b/applications/Grant_management_webapp.md @@ -0,0 +1,184 @@ +# Grant Management Webapp + +- **Team Name:** Antier Solutions Pvt. Ltd. +- **Payment Address:** 1XhNxALoCmXF86aiwZtdDJspjWZBiRX9UfbJ4jQsWN15eSu (DOT) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + +## Project Overview :page_facing_up: + +This application is in response to the open RFP: https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/grant_management_webapp.md + +### Overview + +The Grant Management Web Application is a comprehensive software solution designed to streamline and enhance the process of managing grants. It aims to provide w3f and other grant-making institutions with a centralized platform to efficiently handle grant applications, evaluation, tracking, reporting, and overall administration. By reducing the number of clicks, the web application will enable better navigation of data, better UI, greater ease and effectiveness in the grant management process. + +### Project Details + +#### Key Features: + +- Organised relevant data. +- Github API integration to carry out relevant actions. + +Technical Architecture + +![Grant Management Webapp(draft 2)-Technical Architecture (1)](https://github.com/lawmeskiviahs/Grants-Program/assets/60818312/e24b6156-b755-40ae-bc09-624c75e860fc) + +- Mockups/designs of any UI components + +### Core Components: + +#### Front-End: +1. UI: +- Project Dashboard: ![image_2023_05_25T13_03_13_705Z](https://github.com/lawmeskiviahs/Grants-Program/assets/60818312/57801170-bdf1-4a5f-aead-05b4c2c7402b) + +- Project Details: ![image_2023_05_25T13_03_13_706Z](https://github.com/lawmeskiviahs/Grants-Program/assets/60818312/a2518aad-0d3c-4c39-a829-6b8d52f483b4) + +- Team Dashbard: ![image_2023_05_25T13_03_13_710Z](https://github.com/lawmeskiviahs/Grants-Program/assets/60818312/db6dc265-b0f2-4d87-909b-9c71803821cb) + +- Team Details (applications): ![image_2023_05_25T13_03_13_710Z](https://github.com/lawmeskiviahs/Grants-Program/assets/60818312/aaca6386-9f96-4f09-a93a-c3670662ffa9) + +- Team Details (projects): ![image_2023_05_25T13_03_13_709Z](https://github.com/lawmeskiviahs/Grants-Program/assets/60818312/a63aa155-5e74-4fb1-adf5-cb395f609308) + +- Application Dashboard: ![image_2023_05_25T13_03_13_703Z (1)](https://github.com/lawmeskiviahs/Grants-Program/assets/60818312/0dcb6be4-2e24-4a5a-975b-c6f0ace10f51) + +The discussions, commit, and file changes pages will be designed same as they are shown on a PR in github. Approvals, reviews and rejections will be handeled in the discussions tab +- Application Details: ![image_2023_05_25T13_03_13_703Z (2)](https://github.com/lawmeskiviahs/Grants-Program/assets/60818312/117f4eff-a6a4-4782-905d-f4abc62ecd1e) + +- Delivery Dashboard: ![image_2023_05_25T13_03_13_704Z (2)](https://github.com/lawmeskiviahs/Grants-Program/assets/60818312/16fd5ba0-a4de-47eb-a23a-624bed68177c) + +- Delivery Details: ![image_2023_05_25T13_03_13_704Z (1)](https://github.com/lawmeskiviahs/Grants-Program/assets/60818312/cd96dc63-ed61-4f80-ab8b-16aa87337321) + +2. Back-End API Integrations + +#### Back-End: +1. Front-End API Integrations +2. Github API Integrations +3. Database API Integration +4. Cron Job +5. Data Extractor - Service that extracts data from the MD files for storage +6. Web Hook Handler - Service that will listen to events and then handle the respective functionality + +#### Database +![Grant Management Webapp(draft 2)-DB final draft (1)](https://github.com/lawmeskiviahs/Grants-Program/assets/60818312/f133eaba-caca-4ceb-add4-8268d08226a7) + +### Things not included in the project: + +There is no wallet support/oracle for treasury pallet in this application but these can be integrated upon further discussion. + +### Technology Stack + +- Front-end: HTML5, CSS3, JavaScript (React) +- Back-end: Node.js (Express.js) +- Database: MongoDB +- Authentication and Authorization: Github (github apps) +- Cloud Hosting: Github Marketplace + +### Ecosystem Fit + +The W3F grants program is growing by the day. It is quite a hassle for the grants committee to browse the Grant Program Repositories. This application aims to achieve two things: 1. Consolidate releveant information from the Grant Program Repos; 2. Provide Github Actions functionality to deal with the process of the Grant Program within the app itself. + +## Team :busts_in_silhouette: + +### Team members + +- Kulwinder Singh (Backend) +- Shaivik Semwal (Frontend) +- Aanchal Kathuria (Tester) + +### Contact + +- **Contact Name:** Karan Chopra +- **Contact Email:** karan.chopra@antiersolutions.com + +### Legal Structure + +- **Registered Address:** E-221, Phase 8B, Industrial Area, Sector 74, Sahibzada Ajit Singh Nagar, Punjab 160059 +- **Registered Legal Entity:** Antier Solutions Pvt. Ltd. + +### Team's experience + +- Antier is a thought-to-finish partner for customers in their blockchain journey. We advise and consult our clients on blockchain technologies and tailor solutions utilising our powerful blockchain ecosystem. We help customers experiment and deploy proof-of-concepts on blockchain technologies and incrementally expand to scale to production releases. Our thought leaders regularly educate customers, partners, CXOs on the power of blockchain for today and tomorrow. +- Workdone by Antier in Substrate ecosystem +1. Antier worked on the validator and nominator apps for substrate based blockchains to offer a unique and better user experience . +2. We have also worked on creating an optimised and homogenised design focused on improving the navigation, information architecture, user flow tasks, content design and graphic elements for a seamless and easy browsing experience. +3. We have customised the default reward mechanism in the staking pallet of the substrate chain by integrating the sustainability and reliability score(which is calculated by ESG scores and Uptime of the validators repectively) of the validators in the current reward system. +4. We were able to run EVM and WASM machines natively in the substrate chain so that the chain will be able to support both EVM(Metamask, Remix, Web3.js, etc) and WASM(WebAssembly target, INK framework, etc) tooling. +5. We were able to replicate the whole polkadot ecosystem(Relay chain, Parachains, XCM), Where parachains are use case specific chains and communicate through XCM protocol with each other. + +- Our team has been proactively participating in the Substrate Stack exchange and we ask/answer question related to ink!, Substrate, parachain. We rank in the top 6% people in the Substrate Stack Exchange. + +- Profiles of our team: +1. https://substrate.stackexchange.com/users/2372/arunjot-singh +2. https://substrate.stackexchange.com/users/2281/amit-kumar-yadav +3. https://substrate.stackexchange.com/users/354/shubham-gupta + +- Our organisation is the technical partner for 5ire chain: https://5ire.org/ + +- Our team has worked on multiple IDE which include an EVM compatible IDE for solidity, IDE for WASM contracts for ink! based smart contracts. The EVM IDE is live and the link is : https://ide.5ire.network/ + +### Team Code Repos + +- Kulwinder Singh https://github.com/kulwindersingh-ant +- Shaivik Semwal https://github.com/lawmeskiviahs + +### Team LinkedIn Profiles (if available) + +- Kulwinder Singh https://www.linkedin.com/in/kulwinder-singh-394384130 +- Shaivik Semwal https://www.linkedin.com/in/shaivik-semwal-468a13202 + + +## Development Status :open_book: + +A minimal POC has been made wherein the basic github actions were successfully tested. +Things tested in POC: +1. Created issue in a repo +2. Fetch list of issues in a repo. +3. how to use responses. +4. Get PR list to a repo +5. Get PR by number +6. Merge a PR +7. Get comments on a PR +8. Update a comment on PR +9. Add comment on PR + +- POC (code)- [ghApi](https://github.com/lawmeskiviahs/ghApi) +- POC (tested on) [helloGhpi](https://github.com/lawmeskiviahs/helloGhapi) +- [Github API Ref Sheet](https://docs.google.com/spreadsheets/d/1RWB4XAMFj-tKU4nXEDN0ZUXXmVq1gLpEMqFp_WRPthg/edit?usp=sharing) + +Github provides REST API for a lot of github actions. The link to the API docs is [here](https://docs.github.com/en/rest?apiVersion=2022-11-28) + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 8 weeks +- **Full-Time Equivalent (FTE):** 3 FTE +- **Total Costs:** 10,000 USD + +### Milestone 1 — Teams and Projects + +- **Estimated duration:** 8 weeks +- **FTE:** 3 +- **Costs:** 10000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can browse through the application and perform github actions | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Frontend | We will provide dashboard and details pages for Projects and Teams with all details | +| 2. | Backend | Database integrations and data extractor will be implemented. i.e data from the md files on github will be processed and saved to the database using API | +| 3. | Backend | Github API integrations and web hooks will be implemented so that our application can listen to events and make necessary changes in the db | +| 4. | Data Base | DB schema implementation | + + +## Future Plans + +We plan to deliver the following after receiving the Grants Committee's approval : + +Oracle for treasury pallet integration is being researched meanwhile and also looking for decentrallised alternative for github. Upon further discussions with the grants committee we shall go ahead with this + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Grants Portal \ No newline at end of file From ef2f7e18252a75886bb295f81e9df6c67f649ac4 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 6 Jun 2023 20:51:03 +0200 Subject: [PATCH 459/578] Update index.md Grants webapp --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 7e5d5652f6f..8e65467d28b 100644 --- a/applications/index.md +++ b/applications/index.md @@ -66,6 +66,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [MASTER UNION LLC.](https://github.com/TheDotflow) | [Dotflow](Dotflow.md) | [GitHub](https://github.com/TheDotflow) | ☐ | ☐ | ☐ | | [Antier Solutions](https://www.antiersolutions.com/) | [RFP/securityMarketPlace](Security_Marketplace.md) | [GitHub](https://github.com/ParthChaudhary31) | ☐ | ☐ | ☐ | | [SO/DA zone](https://github.com/mfornos) | [Ocelloids Monitoring SDK grant application](ocelloids_monitoring_sdk.md) | [GitHub](https://github.com/mfornos) | ☐ | ☐ | ☐ | +| [Antier Solutions Pvt. Ltd.](https://github.com/kulwindersingh-ant) | [Grants webapp](Grant_management_webapp.md) | [GitHub](https://github.com/kulwindersingh-ant) | ☐ | ☐ | ☐ | [🔝](#menu) From a3c94b172ef4934a70c229a13971cb12d5f0f8d0 Mon Sep 17 00:00:00 2001 From: CHOIX Date: Tue, 6 Jun 2023 21:23:46 +0200 Subject: [PATCH 460/578] Grantmaster (#1765) * add Grantmaster proposal * add DB schema * add data sync + milestones * Adjust interface and cost * Replan milestones --- applications/grantmaster.md | 221 ++++++++++++++++++++++++++++++++++++ 1 file changed, 221 insertions(+) create mode 100644 applications/grantmaster.md diff --git a/applications/grantmaster.md b/applications/grantmaster.md new file mode 100644 index 00000000000..4b6a142487e --- /dev/null +++ b/applications/grantmaster.md @@ -0,0 +1,221 @@ +# GrantMaster: Web3 Grants Management Application + +- **Team Name:** Zaniyar Jahany +- **Payment Address:** 0xFCFDB7351Da159B8f53217be2a671dDa943735fc (DAI) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + +## Project Overview :page_facing_up: + +This application is in response to the RFP [Grant Management Web Application](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/grant_management_webapp.md). + +### Overview + +This project aims to create a comprehensive web application for managing grant applications (and deliveries in a possible follow-up grant) for the W3F Grants Program, based on data in the GitHub repositories. I will provide an interactive and user-friendly interface for easier navigation for the W3F grant committee. This includes a crawler for easy extraction and calculation of relevant data, a REST API for accessing said data as well as a web-based frontend with a modern look & feel. + +As a passionate developer in the field of blockchain and decentralized projects, I recognize the value that transparency and organization bring to grant management. I'm excited to create a tool that enhances the process for the Web3 Foundation. + +### Project Details + +The following components will be included in the GrantMaster: + +- Crawler: I will provide an efficient crawler that is resilient to failure and fetches the data from GitHub that is neccessary for the scope of this project. +- API: I will provide a comprehensive and efficient API. +- UI/UX components: Detailed designs can be found [here](#wireframes) for Grants Page, Grant Details, Teams, and Stats. +- Tech Stack: The web app will use a React (TypeScript) frontend that comes in [ant design](https://ant.design/docs/react/introduce), Node.js (TypeScript) crawler, Node.js (TypeScript) REST API and a MongoDB database. I'll use Mongoose to enforce the [db schema](#db-schema). For GitHub interaction, I'll use GitHub's REST API. + +#### DB Schema + +The database schema is organized into several TypeScript interfaces representing the essential entities involved in the GrantMaster application. These interfaces are a rough draft of the structure of data I'll be working with and how that data will be represented in the mongodb database. + +Please note that these interfaces are subject to change and refinement as the project progresses and more specific needs or requirements are identified. However, it is important to emphasize that such changes are expected to be additive in nature. This means that while additional attributes might be included to these interfaces as needed for the completeness and accuracy of the data representation, no existing attributes are anticipated to be removed. So, you can consider these as the minimum set of data that will be stored and managed in the system. + +```TypeScript +interface Grant { + name: string; + level: number; + paymentAddress: string; + githubPRs: string[]; + applicationLink: string; + applicationDoc: string; + status: string; + lastUpdated: Date; + committeeApprovals: string[]; + committeeRejections: string[]; + milestones: Milestone[]; + totalCosts: number; + totalFTE: number; + totalDuration: number; +} + +interface Milestone { + name: string; + grantName: string; + duration: number; + FTE: number; + costs: number; + deliverables: Deliverable[]; + codeRepos: string[]; + license: string; + githubPrs: string[]; + deliveryLink: string; // Scope: follow-up grant + deliveryDoc: string; // Scope: follow-up grant + evaluations: Evaluation[]; +} + +interface Deliverable { + name: string; + number: string; + description: string; + specification: string; +} + +interface Team { + name: string; + teamMembers: TeamMember[]; + grants: Grant[]; + contactName: string; + contactEmail: string; + website?: string; + registeredAddress?: string; + registeredLegalEntity?: string; + codeRepos: string[]; +} + +interface TeamMember { + name: string; + linkedin?: string; + github?: string; +} + +// Scope: follow-up grant +interface Evaluation { + author: string; + link: string; + doc: string; +} +``` + +For the actual implementation of the database the [Mongoose npm package](https://www.npmjs.com/package/mongoose) will be used. + +#### Data Synchronization Approach +The data synchronization is designed to seamlessly update the applications (and deliveries, as part of a possible follow-up grant), making sure we're always working with the most current information. This process will be executed using a combination of a configurable crawler and GitHub Actions. + +**GitHub Actions** + +I will deliver a set of GitHub actions that triggers the crawler whenever new comments, pull requests, or PR reviews are added. + +**Configurable Crawler** + +To support and complement the push-based system facilitated by GitHub Actions, I will also employ a configurable crawler. The crawler will be responsible for selectively updating specific applications (or deliveries, as part of a possible follow-up grant). Furthermore, the crawler will parse the data from GitHub Actions for incremental updates. This ensures a scalable system that doesn't need to process entire datasets for minor updates, enhancing the efficiency of our data synchronization strategy. + +### Ecosystem Fit + +The project fits into the ecosystem by enhancing the grant management process for the Web3 Foundation, thus contributing to the growth and development of the Dotsama ecosystem. The target audience is the Web3 Foundation grant committee and other similar grant programs. The project meets the need for efficient grant management and transparency. + +As per my knowledge, no similar projects exist within the Dotsama ecosystem. + +## Team :busts_in_silhouette: + +### Team members + +- Zaniyar Jahany + +### Contact + +- **Contact Name:** Zaniyar Jahany +- **Contact Email:** jaha@zhaw.ch +- **Website:** https://www.MetaRoom.City + +### Legal Structure + +- **Registered Address:** No registred entity +- **Registered Legal Entity:** No registred entity + +### Team's experience + +Zaniyar Jahany is a Senior science associate at ZHAW (university of applied science in Zürich) in the field of Augmented Reality and Blockchain at the Industry 4.0 Lab. Beside his research at the university he is one of the co-founders of https://swissDAO.space, the biggest Web3.0 builder community in Switzerland and the founder of https://MetaRoom.city, a swiss-made decentral, self-owned, self-hosted Metaverse for everyone which builds on top of todays web2.0 ecosystem, and enables web3.0 functionallity. + +### Team Code Repos + +- https://github.com/Zaniyar/plant2earn/ + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/zaniyar-jahany-a5224387/ + + +## Development Status :open_book: + +This application is in reply to the RFP [Grant Management Web Application](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/grant_management_webapp.md). + + +### Wireframes + +Here are some rough Lo Fi wireframes: + +![Crawler](https://github.com/Zaniyar/plant2earn/assets/4472438/0dc2a196-777e-418f-838c-d8664be3596d) +![Deliveries](https://github.com/Zaniyar/plant2earn/assets/4472438/ba8d6de7-8351-4a37-b266-569e2cf55565) +![Grants](https://github.com/Zaniyar/plant2earn/assets/4472438/9a697d9b-74c0-4593-a769-e1991d87a737) +![Stats](https://github.com/Zaniyar/plant2earn/assets/4472438/1075c353-2610-41f4-8839-f06e4d8f583c) +![Teams](https://github.com/Zaniyar/plant2earn/assets/4472438/ec9e1117-7a40-4521-9c4f-eb5ce71a692a) + + +To get a feeling how the page will look like, I prepared this Hi Fi wireframe. Keep in mind that some details are missing, due to limitations in the wireframing framework: + +![image](https://github.com/Zaniyar/plant2earn/assets/4472438/f9082c64-bf5d-4e7b-8050-b52d03aeb151) + + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 2 months +- **Full-Time Equivalent (FTE):** 0.6 FTE +- **Total Costs:** 10,000 USD + +### Milestone 1 — Development of API and Grant Frontend + +- **Estimated Duration:** 2 months +- **FTE:** 0.6 +- **Costs:** 10,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | I will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can use the application and its various features. | +| **0c.** | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. I will provide a guide describing how to run these tests. | +| **0d.** | Docker | I will provide a Dockerfile that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | I will publish an **article** that explains the development process, the challenges faced and how I overcame them, and the functionalities of the GrantMaster application. | +| 1. | Crawler & REST API | I will develop a configurable crawler and a REST API that facilitates interaction with the [Grants-Program GitHub repository](https://github.com/w3f/Grants-Program). The crawler will update specific applications or deliveries on demand through the web UI (see [Data Synchronization Approach](#data-synchronization-approach) chapter). | +| 2. | GitHub Actions | GitHub Actions will be used to trigger updates in the application whenever new comments, pull requests, or PR reviews are added on GitHub (see [Data Synchronization Approach](#data-synchronization-approach) chapter). | +| 3. | Frontend Module: Grants Page | I will develop a Grants Page that will display all the grants in a tabular format. Grants will be searchable by team name, application name as well as full text search. They will be filterable and sortable by pull request status, github label, last updated timestamp, number of approvals & rejections of committee members and all this data will also be displayed in the table. The table will be customizable and attributes will be hidable by the user. It will include all grants - both active and inactive. | +| 4. | Frontend Module: Grant Details | I will create a Grant Details module that displays detailed information about a specific grant when clicked on in the Grants Page. This will include any parsable data, such as team name, level, payment address, team members, legal entity, milestones and their related info (duration, FTE, costs), etc. in a structural manner. In case an application is not fully parsable, the affected attributes will hold an indication. Finally, the application document will be displayed and the links for any related PRs will be displayed. | +| 5. | Frontend Module: Teams | This module will present all teams involved in the grants in a concise and searchable manner. | +| 6. | Frontend Feature: Grants Committee Lense | This feature will allow a user experience that is optimised to a specific grants committee member. The committee member will be able to provide his username (using simple textbox without authentication) and they'll be able to see in which pull requests for grants applications and amendments they've participated and how long it's been since they last commented on it. I think this will be useful for priorizing grant application reviews. | + +## Future Plans + +I'm planning to implement the following milestone as part of a possible follow-up grant. + +#### Additional Milestone — Development of API and Grant Frontend + +- **Estimated Duration:** 2 months +- **FTE:** 0.6 +- **Costs:** 11,600 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | I will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can use the application and its various features. | +| **0c.** | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. I will provide a guide describing how to run these tests. | +| **0d.** | Docker | I will provide a Dockerfile that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | I will publish an **article** that explains the development process, the challenges faced and how I overcame them, and the functionalities of the GrantMaster application. | +| 1. | Crawler & REST API | I will extend the previously developed configurable (see [Data Synchronization Approach](#data-synchronization-approach) chapter) crawler and REST API to facilitate interaction with the [Grant-Milestone-Delivery GitHub repository](https://github.com/w3f/Grant-Milestone-Delivery/). | +| 2. | GitHub Actions Integration | I will integrate GitHub Actions to trigger updates in the application for new comments, pull requests, or PR reviews in the Grant-Milestone-Delivery repository (see [Data Synchronization Approach](#data-synchronization-approach) chapter). | +| 3. | Frontend Module: Deliveries Page | I will develop a Grant Deliveries Page that will display all the deliveries in a tabular format. They will be searchable by team name, application name as well as full text search. They will be filterable and sortable by pull request status, github label, last updated timestamp. It will include all deliveries - both active and inactive. Also, the deliveries will be included in the team and grant pages that were delivered in M1. | +| 4. | Frontend Module: Stats | A Stats module will be developed to provide statistics about the grant applications and deliveries. | + + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** personal recommendation \ No newline at end of file From b75b3164b7c0c7cf6b911ac3dc58ef53243ca885 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 6 Jun 2023 21:25:54 +0200 Subject: [PATCH 461/578] Update index.md Add Grantmaster --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 8e65467d28b..1a51398fdb5 100644 --- a/applications/index.md +++ b/applications/index.md @@ -67,6 +67,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Antier Solutions](https://www.antiersolutions.com/) | [RFP/securityMarketPlace](Security_Marketplace.md) | [GitHub](https://github.com/ParthChaudhary31) | ☐ | ☐ | ☐ | | [SO/DA zone](https://github.com/mfornos) | [Ocelloids Monitoring SDK grant application](ocelloids_monitoring_sdk.md) | [GitHub](https://github.com/mfornos) | ☐ | ☐ | ☐ | | [Antier Solutions Pvt. Ltd.](https://github.com/kulwindersingh-ant) | [Grants webapp](Grant_management_webapp.md) | [GitHub](https://github.com/kulwindersingh-ant) | ☐ | ☐ | ☐ | +| [Zaniyar Jahany](https://github.com/Zaniyar/plant2earn/) | [Grantmaster](grantmaster.md) | [GitHub](https://github.com/Zaniyar/plant2earn/) | ☐ | ☐ | ☐ | [🔝](#menu) From 86f5f57787db1b019f859e3cedf3c8fc2b26d60a Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Tue, 6 Jun 2023 16:47:21 -0400 Subject: [PATCH 462/578] Update RFPs (#1792) * Update and rename grant_management_webapp.md to grant_management_webapp.md * Update rfps.md * Update rfps.md * Update and rename IDE_for_ink_Smart_Contracts.md to IDE_for_ink_Smart_Contracts.md * Update rfps.md * Update rfps.md --- .../IDE_for_ink_Smart_Contracts.md | 2 +- .../{Open => Under Development}/grant_management_webapp.md | 2 +- docs/rfps.md | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) rename docs/RFPs/{Open => Under Development}/IDE_for_ink_Smart_Contracts.md (93%) rename docs/RFPs/{Open => Under Development}/grant_management_webapp.md (96%) diff --git a/docs/RFPs/Open/IDE_for_ink_Smart_Contracts.md b/docs/RFPs/Under Development/IDE_for_ink_Smart_Contracts.md similarity index 93% rename from docs/RFPs/Open/IDE_for_ink_Smart_Contracts.md rename to docs/RFPs/Under Development/IDE_for_ink_Smart_Contracts.md index 623b882e162..97e828261a2 100644 --- a/docs/RFPs/Open/IDE_for_ink_Smart_Contracts.md +++ b/docs/RFPs/Under Development/IDE_for_ink_Smart_Contracts.md @@ -1,6 +1,6 @@ # Browser based IDE for ink! Smart Contracts -* **Status:** Open +* **Status:** [Under Development](https://github.com/w3f/Grants-Program/blob/master/applications/ink-playground-ide-improvements.md) * **Proposer:** [David Hawig](https://github.com/Noc2) ## Project Description :page_facing_up: diff --git a/docs/RFPs/Open/grant_management_webapp.md b/docs/RFPs/Under Development/grant_management_webapp.md similarity index 96% rename from docs/RFPs/Open/grant_management_webapp.md rename to docs/RFPs/Under Development/grant_management_webapp.md index 0f71c53ff0b..f627fa715c4 100644 --- a/docs/RFPs/Open/grant_management_webapp.md +++ b/docs/RFPs/Under Development/grant_management_webapp.md @@ -1,6 +1,6 @@ # Grant Management Web Application -* **Status:** Open +* **Status:** Under Development [here](https://github.com/w3f/Grants-Program/pull/1766) as well as [here](https://github.com/w3f/Grants-Program/pull/1765) * **Proposer:** [randombishop](https://github.com/randombishop) diff --git a/docs/rfps.md b/docs/rfps.md index 37d53440b04..4c6c130c1ca 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -29,8 +29,6 @@ If you find an open RFP here that you think you can address, feel free to [submi | [bpf-contracts.md](RFPs/Open/bpf-contracts.md) | 06.01.2023 | | [data_analysis_tools.md](RFPs/Open/data_analysis_tools.md) | 25.01.2023 | | [formal_guarantees_for_grandpa.md](RFPs/Open/formal_guarantees_for_grandpa.md) | 07.10.2022 | -| [grant_management_webapp.md](RFPs/Open/grant_management_webapp.md) | 09.03.2023 | -| [IDE_for_ink_Smart_Contracts.md](RFPs/Open/IDE_for_ink_Smart_Contracts.md) | 05.04.2023 | | [ISO_20022.md](RFPs/Open/ISO_20022.md) | 31.05.2022 | | [move_smart_contract_pallet.md](RFPs/Open/move_smart_contract_pallet.md) | 22.12.2022 | | [parachain_validation_conformance_testing.md](RFPs/Open/parachain_validation_conformance_testing.md) | 18.01.2023 | @@ -50,8 +48,10 @@ If you find an open RFP here that you think you can address, feel free to [submi | RFP | Last Updated | | :-- | :----------: | | [alternative_polkadot_host_implementations.md](RFPs/Open/alternative_polkadot_host_implementations.md) | 02.03.2023 | +| [grant_management_webapp.md](RFPs/Under%20Development/grant_management_webapp.md) | 06.06.2023 | | [identity-directory.md](RFPs/Under%20Development/identity-directory.md) | 30.05.2022 | -| [implementation-benchmarking.md](RFPs/Open/implementation-benchmarking.md) | 16.03.2023 | +| [IDE_for_ink_Smart_Contracts.md](RFPs/Under%20Development/IDE_for_ink_Smart_Contracts.md) | 05.04.2023 | +| [implementation-benchmarking.md](RFPs/Under%20Development/implementation-benchmarking.md) | 06.06.2023 | | [ink!_smart_contract_block_explorer.md](RFPs/Under%20Development/ink_smart_contract_block_explorer.md) | 05.07.2021 | | [ISO_8583.md](RFPs/Open/ISO_8583.md) | 31.05.2022 | | [multi-chain-block-explorer.md](RFPs/Under%20Development/multi-chain-block-explorer.md) | 23.11.2021 | From c9b69d9a25c8f9fe29caa42564c8a48b9b2abd7d Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Wed, 7 Jun 2023 14:46:41 -0400 Subject: [PATCH 463/578] Fix RFP images (#1794) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Sebastian Müller --- docs/RFPs/Open/img/grants_details.png | Bin 198066 -> 0 bytes docs/RFPs/Open/img/grants_page.png | Bin 336802 -> 0 bytes .../grant_management_webapp.md | 7 +++++-- 3 files changed, 5 insertions(+), 2 deletions(-) delete mode 100644 docs/RFPs/Open/img/grants_details.png delete mode 100644 docs/RFPs/Open/img/grants_page.png diff --git a/docs/RFPs/Open/img/grants_details.png b/docs/RFPs/Open/img/grants_details.png deleted file mode 100644 index c18ac90f08e062452e2b1897ef3f1cdb9c1054e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 198066 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%0D4%dQVlQxT@e;Xzc%F)lDq7+T4~*8 zM9OPp2CPt3tY1(&g$xHpeVN6CT)1-qN5{&h!9W$LzO0qDs!aq2xX--r%(%WPr?I-q z=jAymK9$9Le`BKuT$GgvNdUe0+9o#Fgb~Z6X=vTB?^|HEa>C ztmz46rwb!-=B~SsV?%h%b#>a71oJAPEyv%vo|On7rV!87Pk+P`ziX6V`BA4GCGtY) z_4@aT&!`-A{I4fZ7u*~0WD?oM0GI>m^v#hHvoqf^?eJZA70V5pEi!IeFLa) z!%a}%#LLmNmQhfXTt5NkU==}qeo8+)2Lu#uPaf_%?kTG}HLSL%5J7)Cc_t$t-~1hc*~fxK`bs%!U>9pWDv(vXH90-V-Ta%Jb$uSed-ATu}2x4U7@l;r#pHe32I-B{Bw=Y z4rHL_Bg93#GCZQZn3Z_x!Ox=-Aby*m63n7DP{hh)O{f>}SNnAyRiy1nSn;Sj0}*DH zI|jI>+Ws~1aQZWrY1A}R)G`2@uUXpwSd!+VQ2lVp#Z(YN)xTA|S+5a&W}Y7fdN&;A z8pNM~v#Mw+>5&FUG>nI*TZKmg<*bQj1yzkoFP8rs3Ic_OZ~_&>%0q~8{P z#b4=#o==8NR&{p$aULA(EFrD*!D+Mtz-vHl4vAq7JU9mA2^HCR4%*SJVgNrWF;Ca; zd|cA76o%z1jL!tvRe|nI=IsTHnYY5)IN;3Z_K)`tlAL#H-J!GZggDaxqrHrUg$(7oxe)Z9 z^t6p56M+Hp?GU_?j$^e{Yu*ZwuZh_CT0;+KI({LLqz`ZtX!bZPSwSQT8i4!{(wwecs4+h_TP1l^n{dIN8J zGf944YdTD`1+*?dp>7i+F@hp(A}Dl<>$Yz}fb;zWc)8VJgJzF5MjLlBA0IH3?gIvC z-4=s><~PZ7x!uVu86x#ZQfmMgHl~XCQ4tvTLW6eS;`AWKlM0LJ5gpybec*AL)I?ub zXPNVv@58#$b4+Wzy?xR3BGwcj@@WZ%UA4$hq}pM89@&Sd|h%HwEw-3Kn}7j&xQc2&ouUOh9C4b zfRo4Omf@&%KqHxFqEx+2NwW|HFlKTD(I6>z5=IL+%&Dl`; zl|ITVKyR`K79*ek6F{7HCUBVU(12)L__0I7*Zbq3sXS=%Vh(Kvut8NL_M4lo3pSghN?rtNNgt*<@= zV5F-bfM{@HIrUeTgh~}2yVHJl{ayP12*O6-#fKvmfIGJDEoscJOW%BK4xqC2$*w2U zR{Z7e6%`R}_sszbph7RXgTEWhRj7cGNnY?g^Q--=<<1y@W_{sv*xA;h1JR*EFCcnv zQ=(fV#(HkfH`d<+NIuGs7U654pT}`5W<3DH{AwytLNfnld9y+W+SDHOI3UV^_6smWXRLM(_9v|4Pe`y5> zMD|?;UwI@;{3%5;j#vJ0l$Vv(%|o)4cwXCVctoj_15bMZ{C{0m*(Lf-d78N}h_$PM zZ}Aee?~+YR0tM=sHXrmK;BYu(s91Ju5k7WlI@zt;VsQraiLYrubWC}fhcW?sK0BY| z7iVP~L~QmV50S!Eo|pl0{ed6RNgxEBkjX}b*#i#ehqt1cE&Y4N^5HA?JmKfRuUN=0 z>)Xd@6KPROSFj}^6mm|Wx87ur7iTM# zJfI2v02-nSu(*tCjsWS;Fn>KgTR0+SNC~^^4czTkLFy`axg0W_!@ zv^6fO@PJoq+!c5y#d1OFz25=&l?N$i3|<|uZaj{e)opfbtOPoR`7~>7_5TeHQ2}y(`+*Z929yH;#i-c_!0x?*#a!SP4Z9V+tb`}S z;LyP8E0D~nU#)>F5%MaKq8x>@A=STjya$B!r#;H)&rp?Dli@8o;4K&6oML$Y1}n2- zkW{NLhf^E*Po|8#Vx{Y7!dTL2>tFD$;sbJg(|iUwf$bhDD+ZS_BNd>z%GshbFnr5`2K~WzoY@h z6V-v?n+cUilAu*hjAl5!hP3qZYC+Z*=oGaxZw)f8CxA5>$HNM5u?DnChmU8&)>e7x zUFeakLl3pz*+V#``zOT-|34ZH39ivT3^4z@Mw5YSG?!l*&AJhdG6?_xcgj?lCHke{ z@aowx5{MqX91Jo|%4Pa(5IBQ%JAhXku_KC~sa*#+IpcAxMJN?}a$%_*md~p;o~OWvTL|)&S>Ij2oJd1ci5c zvsbmnpHUpW2HECsZF2d88E{CS!#tc))O4*`Wf70geooHMgWtB#h@2+`U^t;dpaTxw z?zcmgJf%*2?+dWcPdb3(lwXS`heqzBWq@^H`sfMs?VLUpbGWynW7CRcKzH(Yo>Li~ zO6=?J{8v|b1YTS@Dg-@_0t6rLIz<-UigJ*T5-Kj#?*m|>xpvc9MrN&OQ#gzTj!#Y| z)b<4Sje#mXycgchCT8-$6Kmd8B~NmJHQxpg?v#Os(Nn0Gtx5ya8-xzni!_3?PsNZU%2()E+^>hvZ*p;@_Y3?<)dt=6lot7net}jX>ovUgcf^ zm@ynMoY2MuXDRiIJYvJu6=Yn;#{|0cv1*87uH?8GV0i$JSP@XtI|;3}hvr&~vGDNq zR-~uYFOq($aV3C3iDpub0QIaRPJ`r7F*XJAvt+h2KxfO2huSp)1{WNYY!v#&1R!Bq z6f*Urc2ZpSC@pO`jbBovv%48r;b31EG}87ddwtk%id4LhuA-YhoJg7TxlO~XIc?UhFGq6VJt znEwp!_bB++Gc!25+^OwAIUJ78&SrgS4*aytiNt>zRR}M_XLI&FiRWJnqCIfc%oU!$ z&oB^4NjmOmKg0x3B?3Eh|4a!Dj^JqHoNV~_Cbit~>Ne&RP-Yrc&({KB(i}7B6QMtE zpP!Oex?l}hGk|`~2f$(tUjeC8+7_IRuBOWa8Ha0lQWxOyrS*dF{*guxPXKnvq54d> z`|qfO$6z1d`9uW$Wq|i?runfPH3K=UV^J8SuxS~HrQXr@2KKQay!jBcpI%tEX()Uf zhuz4V!1meLxau?Z(sU|AjgBWD-h3dy^JiERXF))_kPa{WcsV#4%UAtkVF$Jo4+Hno*FgFlGE zI5;SN|KJBiUuj|LA+`i<2&Uvv5E9kLI>Xz?^H=wALlT0D91$qu44lK+{&KXZ}g z@c^AD^##3vZTvjX3i9yRQ)*h4Pj2RU{`wP-Dinqlv!KlV-`)a#l!HGN?Jxc3dw%;Z zM)Iw;WQHl;)hK22uUPCupy|-3QZ#3CYR>RqBR`@7Yj>AQUIxAe|5+L_>eO%(1`T@p zk@8rb6xtKK99_Ybbw`VC=83^j0msADlApV^`!2)_f4^y|@2te_xZsd&sq86~P;WVN z#zlBRD%A+l@N1=@L!rLx3q8cbAy98rnN9b#B|K5HAuvn^g z5c)s%9wP`WzCpwf$A)f~t%JStpkge=3T2*Je`o9yhRr;g0UP+Jv%_xTS;*pc2Q1a` zzM^4%kw4zpWrIu1eS7P$6qW3T0aYVKQhL_8QtrbAf39N=gIw8K&AEL`x8b_5s3S=@fYV6jA#VESGCI|juRK&hxEK0Cp7VEic+?OmR9%e6G;!fLTPEOND zP*)vGb2IwZD%P8np1vZ;}NL-BU1a zlDo$^^S1ajusHHgNQ8HZ4lNs#HN+nqxQ9_l(`s?0xBMvSqFNZ}0v?d2#7nhJ8sL-) zVg(iMhkAWDhTb1*G)YA4dbAX9t}uWnea84pW>mq#sSNKY{c$4Mn1ELC6|cIpAF9-W zS6&cD|8cJ}2+@~zg%`L#<;=J75ADjv+hO9igbs1L`yS&KiV>GfSvH8T1rr<6JV^sm?2S+()) z=L~NA84>;s#U^Z*2U6vIbnGw%`Fon8bUkkd~e%#Pqp z6tM*QLkk~yC{C>9S7@dbtUDI7+}^U)QS#kly#0*Varses`feY?`eMSmrr#;(@Ulc( z4$@$Q=x!)_6FbFDzDhWX!ISELoupe}6dG867z2;D*g(@`Zi+RmrOrDZEG3FO6R|3L z(&5Ry*@U8UZywLUZQSZBL5p}KW+3!}k%pC&(<9x9zwqIH1G||o!PjaFTq}(Y_W6wm z3MwUC(K1_yH9hh}u0=zm$}#0hk)N0=^*>gj`*!B$vwk~0D$O0zZ8)MnT>8X_cHZ<# zRUl+vL605LGOvXhcB+biYZ?p0#~wbWyV^VZW47N2jA7df3?#~0i|6yR7RKYZn?=BtQMj$@+eO6o9JG_=g((c9R341L!> z7*#^0uo^<|+lNlNw9l=(g%WTHv+_E!=wk0VwQHI`-7Js6sk)Ad*snoErUzEZ#<%NF zTg?TY=J1ve>b~8RjP(WfN=V^ihVWp!rgLTyoB}R|ga!=+OPuv545aFu?}U(zwu-X{ zu$sP)YH^ir3BQ4TOzDHM5{uTGTaOyesE7DKF%qIJTCJUo<2aKq81+DkzED z^n$}f_lM0vOyK71;2UyktkdoBVrzb#E}nD5zzZj{;j$V`x>sJLx+; z$!E$FFHAXa-amWmCSNV>a#kn*m&6 z7P!${<^MD_JEitUBS5u>lj&2}Y*b4rUE3zwy92MH_a$!<KSVtYzQw`x#VCnc(eQ%s*;(rCOEOS@u**OP&(NOl5hXEtzvA zZcY-`H4R_mcphO?V$!#};j(d78!Q~b1ABYCdvGXC8_o^U4%y-e8*700Q0C*RVB(hwe)=uGO<>X>7wTc%r_=& zyIrzy3HKR;_+8b7pAi|BN5J?oBAnN8y|8`(RUCdgs?<4PiyNl`wvVoIMfMN>lP(dy zh%C+LW7WXE9s2tXcK0SG>s^f^rTjbxVn}JO%ZY)|NQV=ruLD%N{Tt-hiGhR(+0)XV z*&P@{ObDuYog2@DRcl;k`Vi62rNb`YpAQ-Due6_QB18zQ3dn8QV(6*R&teko8oP!* zbSaW)xzLV{TC9^zRVQa9C{!!n1)ys1yOXmzC zxgnWU5+Gxr9ZCLhig8W-;41NHs6Y%iBF`&BVo_MSV>jji;=n@>U9X%C^KX~>>ueuX z?{#4=yLCPC;6N}Ql8A^)Ggsp6(&L7Pr|kJJIyYVv9?`6vM+s}X(#b07FkUoS^J^zG zrPqueHpL1*Z@EYs*}KZb&CTy#F&kS5(vca;jM*y8;nxdu8eeuf%f3wL(3>E%b^`J( zjL?tDuu?|%y9@{;ECXlR(i;-s5+iDv`p|<%$nisQVb% z<)=GDnrSF@Cf_W1vLztWczn7TI6rb0^j&-6E;qY4;;fmXOxm<7PNl~)x@S2#TDPBN zRw|go<)Zg2Rf;Jdi>J>?gi z^#mz`N=6bNLL;&~4pmL%#27(6Nxle`5Ke^d$g=@X3>z(PSfH^T5f2uI8WHsyVP2c{$Ancm z`$UySPMy0@RH@V?u!ZlqVG(~iMUucV*_#UGdhG*w(D~ytU6e3i&9o2GQ|T{0N^JMA zd*q+398b)1i+Sy2yH%NN2A$1q%&&k@o#bJ5@O4xBFcJ2_3w}9`kf&T-z4d3<>@WebC5&D(+{H z%(PyCppose=?4ncf?;04|63Ktc5v!E4>~qFKwa4yed?{RBh|hVo5>q4`~)1&aTmzr z-}LZpR1Em>T(lvF7U~cltaOSz@LRq|YjYR;sTvY0KAtIuqPC>}ml%J)F-FJ7ESzC6 zc&17z{YE5%BwL3zH7{%nC)UhZzE1aQCEJT6pLC{n)O`#UIb1ycO0950F0g$u;L83C z0v#ojhxw<_vONXg>&3~1{6}Dv$_v*U@$XLpxvM7of~=5_d&-vy-}qrQ+bEjE$Cpmi ze39vCN9zL(=3XffuZP{qY)@bD-YM-NwH87=D1a6$cV;(mFodett6~szwe?j!VlnZj$(Gd=y*3!&4QKk^!UJIWTYy*+p-dw z5tG#_UYM0yp3g?lq0~M6A>#^(H*B&>E_L$ZvuihTJS4g0p6>V?ZM!fRV&IDT3(vkU zTc?l<(@aUk<#c(d57)iPufUKNS1jWUVRfEQXV)UN`@3RKM4ECA-xm*-D@7^Kl8CE7 z=sfI!;WG2fDEm{BeTF~nDmYBLdz?C26;4m7w{|`-)6_6;Bbbr=k;go zxCU6qiKf?WJega;)u%=|F6uLSp}2GK!z+8?)KZ93-0Ub0@pUo~Db14G-}Qb!lgseT z17yz6ep00IV8w^W3&rcGi?hOzdr1)Wh!j7>EA`pJ5S7K~tJS-fiMrN~s1|w!m+}2rc1dBoNy>bCC@6^4zyeRi*a{}4&{BDv zz!xqoi(UGUe9195vw1`2hN74>O=g^tP(_8rw`8%17t~-qD^i}`t)&w(<(JY1ZdVnG z-74??xoN>O6Ml-VLyOp(iq-iGh$Stb^La1&h*E^nwKnVpDYrX|TXDUs8b(SJO`v~U z`ccj9|1F-TUO3z~p7iq)sdWm~3FcoMDK?=JTHBIn(mdJ{Q+o&R-s zu;kVYP5vWTVnc!Jh%Z}bmCM+N3`-l1S#kR-k5=OM(ezKqa2OJ#-r$Q+dL&D2-ARZY zqXFg&#Hx6rV7k;u#vC%J_yLwm9{jNPxogBU6c)W7X{XTrBu=qR)Y+ zCn4=DdrImPCy6r@hc-FOP4k78T3#!XAmkRY27)WLDIfJjH?!xEn9x{5HYJGn+;X9E z>L7Vh|B@rS0P}Xk&KGX^qL35e$Td+M`R5C#zk)gi3Gg}+lCVGZRy*7%#o6)WpR#pA zDBTv*OM#MgV5p`ON9aThq{9dl!@S9zck~^a;;)cQ?akB}t>+7vh>Bah3!DausMJY^ z0AQD8vJ74(;4+vemXE8>Nd%pGw=NNCHSQ>$#+P0V2W9@19HIi**Z*X1{)sb#KZ5O6 z9NB4UoWVa@_sO|~WR815qu}tNxuoYYOCTP$?2C?5f>r@qk3k&M!)Y_4ao4q5@u>k| zk72n>9AyG18Y#}V4(v?89zzcTEJt4F9x^d3_2QkB|5{fS9EBcb@ow9H-uFu{wv>Wn zO+q*w+8va-W4D~ zT?Cl2G*e~FXmIXbu_-U{xAJv5g!2xiM;i7m?!N}gHi{U>)s>!0-;}MJlWs#Vz&-k9 zz{Lc-lV6LAt`H0CxnL@^R|EBnufJgh7quMXQ*Czu%*u>4*-h*y8|kF@mE84+rvtm2 z9kej;`=;w#fP_i#y+)pxKRmZz2^1>YaH1owX|%@#2kWS8S)0!P_cM9;@(;WHm!f=0 z{~^@`6yZavSAyqr(Yv`^pGlo!xQ&he z$VUGAX2vmtHGW;t@VV&sHU8s+w^7I7X>a6*UVmD}B0TVYd`b_Z{@?5HkGlUSB>i&q z#|m=5owk8@oa4Wb~0WbPlu1`j3h^!c!(=pS13&yT*228*G|3_biK zINpaBFLbZxb^gmI`QR$$E_&y~-|dw?GLZIo4^i%*|1#PyaNqcK1IF*Kyp38R2ELE~ zeu(&gd1tmi_~Z$?Env?qR*b$tZ!pxdC=;J@IsDuXV6U^y@$B$4=07vk7lkj~7f;UV z|2+Ebw}1c01_6sSV+`*TI)v_c!2V#J7hrJ?{jPv(|DP@Nh=;2#x}dMJzi-X|`ZD3a z$_xp~1-Sbiarp2Q?Qf$Q-~%cjB&1)0}^jO&@4>S-t(z{K^{OHKi$ju zW9vxatJS6SME<|67B-m0>Y46g!ems+_FKB+Ixl}e%j%0tu41?4J-+{0vD>J2Az-hH zqy0Dj+c7Hx$3j^fQLd_wF_4;I0fTX+wH|BV?DrAG(SaFf=W%@w`Y$uC096Kg_AZfz zeQYB#tv8)fk5&R6x|sfnBKl4Uu!!@9+ITO8x&5gce7zl8?TZ zgy+NsN&Y&Kse&G$ucE-*yME?rq=Mo)^P0otUF{n~v0qvD+wd(-4gZ|}`-}dUR{0eP z#Knrj3|S)WkKnS;>VDq87TE}}>AvcXo2rK?^c$byjec}b>n4q*>9AI4EB%Bn7Zem)0~MHpoSHrS1AN=~iVT2C z(tmn9ro0yETH^fmaT2&$$RJu(EnbNGk@fY@<{SQoC4!Qkk6I5=&ivfZ{GilBnkLEP z(-z6#c8^8S+@){ibgEmBd+rc+s{N=a@?&f??)}_QI5fB%r4xVl{x8d10cx-E>~cT=wCOh1 zRn>I}>;ak22CN^8)CoX15$&CEm~k_UQoxGf{hr!yvRGXoQO)$uGNC|Wd*1Zk0P5l{ zGNE_5MC7O5bP$amdY&fe;eNg5j@bun(tk!AqVw^b3bg*y3t+k7YL{BuVYE%cIaz8K68oWYGIzfE;H0)^sA=7|^ym{=yXxduT&s)O z9|m8a?B3rgJ277rNh~6usOkOMmi+x7?R`*7<)ki|+j+kp@|?y2Mb-&uw2sF;rSJ9O zasQJ^?Q)J*fY%vq*pg|R__`1^xU6@55X)q>Q`<%QW?*5h#QkdP5|(#(_f3-~0BozH zK>Bg(rh=K}jzx=+bV1$I>KbH7a_lqI0XbrwQ~5ZwJUyT|%9W{d9Y= z8G45LaJ%98T=Se*o&NoP)@BH37R04(`}v6`zi-3H_ogA&9Xx>ZjjG%#C}!nz=p;~o zwa>93L%F%*(Cn-McwX(UyUq*SmFuKo_fmvstkauE<&)vi&h~}tlWL|i@vGD$ih`o5 zmlJ;5(d8AC(pMR*@h?eD6y4eG^*h6aVC|-=u54~vETAv3aPrk?%5@ZbTJb@3C!tnh zR19%W32vM?klH{QR~1o;rpUdP2&a%o&xf7o4`J!;6a`e_PLNi-A0v#jD6wL+`LuEO zcsyo{hk4X4Srlf*D0fJ68+8B;XnAs`4N&o*#JpY~VKTnEUHjJYdMSh`^I*$FhhY9) zn{~Mn3N%#EajW#})ovA)?DZYdWB`30-QF9upJr<~=snfKUI~0-jp^L@V-Bf%(`9OD z{*CvtZmp%km)Y-D7t_1f>`68kH|Xw7Y1$7fuK5alOau;e7xQd4M2Ry)VsG7<+2-j_ z<&HcQ?@Hx0q~NnZZ8~iX@&ujFo>IH4@h|iamJMw@pgiwsvpM(DyV_L0<4kH4<~+CD z7MXIna!v)*mkGyd@!?(4hV!AD%b}JJ=3K}uiu;r72mK%Dp!0y1+%B;5HVi4Ytoh)L z-p`prPXDQZRxduUb__&HaHmiF(}0Rbus%9$-<$#X*%#m^sDidKD6iH%oe$EODXd+V z$=3L{?8bV<;ujNQ2>7SUVaJ7~vsU%dNID94VOQHGet_Oz$yG?-CI4-9;oAP`eh1zf z-oY0?L9Y8YEw>L-3g$1r^ECHvT4RWHU)-~H6uZp z$7tF5E(S6IJw+!*&i4vPUq4+miD})!)lTgAR-GAl5@H`p@F&3sJ2fjGW!kLWf6iKP z#GPQ#>{wP!XII5#Fi}$M5_&i^9VSnos+Fh=XNwDeDD^qHjM1{vbV6;uLP1EFd7WrU z2sa+gHNnyGvMk3O-rX*1f-BTmsGy^sGxPrKAE6~KtB)74+|R_!jyn3$j_Cz9q$@jm z{XLp4S6T0l=#2S!KERW(2rJ#lPK=qK#A~PC)4Ms=TfDj6z4_Dw2J2vgP>}8L{AXT? z(|AGK9g4jVNQ#-K8lVS4d*Z_7ccdUCLd2%!cDNqdyFP6e`gznw)WilkYsJ#VW(wh4 zNYTNz*|~Ey8|Jd|U{SsKLe)NS*GjE$?Pqb)Wv{#&uEyd}dNPgJhbqVYrNWZ#@>FU4 z3AimTz70ymR7(b1^cd9g(Q%U0@^5)n$z3m(DJjpG4d)K0jKb~(e>Ff+J1>$VQdjF7 zjkX0RNJrYF#BL1d;3&{&WT<(S*%~$F`Y5LyT)67Gi(avC#?lp6?Kss=5z~08#|e&U z!ahd@uq_@e@YumesV6HfAly%evUERTQJHnNP6?6IoO(!gase0fyuavJ_NTI$&J{=Sr z&<9NQ(7wV+ADXZG)uj7p1JR0>Uz^Alcj!2>mej&c5ub08-~+({p__;2J$**)TwdD&fe> ziu{tZOqJay$Bv@2p+72MXC3r|=%PY<9$4Oh=wG1w3MmbnmlO8P*%Uj&vddaU^CwG4 zy(KkPb3m~5a$fSj*-Wrp$O-NI=MDMsMmG&nimvzjZ2mb?Gnrnb#$HneAvGfvUy9Fj z+%Ix0C_L@^!rU*HTZp0f=R(UQLp?L|8&BRZJXpzr5LXv+&c}zv)=4F&LgHCBy4S5G zhmx04Nq=N_Bb~+)l{lAb2YvI?h*lzXg-Y*;0wK4?3AyOpE4ON zkc)qUb8y){XRj_lXLj`|m+-!xbBJoYkafL{&3bmNWiuw9xmnFOOq?N|?;ZSiA+MK9 z`zIW*PPJ}WY(pmaks6M*-*xJ>Z!|a1-M8Ib_4v`j2Dx+r8{k{%WHDJuh2v)Gb1MYE z6qZ-+dD+*Lc4P=|+m*e?oJZEM>@&9v?jm~34JYYEkGuuE026a)8=HP#Uk7758TJx6 zMjFPvo|23Y1kRYwxGm0i%gpZ)!9lpX+AJZ-Jv#{Vw={-gtIV{UU7(LVZjYE2s_+63 z_@^+gKxsWzet_9&2OPL$B(eJyfE3PJlNk_hf=y9l6hh$+aOPoq6*&TyB794Jm(OUD zpQwpvY8z?PGy=spgzUL7N3}UzCr72%lt~x{L9xgW-o-#B*^?zGDh~Hk{b}tyJNrq5 z#0L@qE3w2T7I%GJVz1W3iS5ho-)>E$^^&c${glc#2eqMU_3qD91)zE}ig#5BVVpe}5Cov^wV$Y#KJV}ZMyCnj~Cv<9ibfPzla6i9+o~o^J+n80xYp_}VC+_`@ z@`n@;c&1-PLWhzaVGVn2=Ec2 z@HFj*>^0x~Y$g$lJFIW9%?|Nx0cX?2L}{?%PG8|YYI)rbu|`oBDX7C$wfhWdQv;&%JQv~WSIgqyA*TWkkKQhIBU84y8Gb92^D&#BhleOd>h9;zU&*$ zZis(!dJmcWCQ2DevyWW-u*B8QoT2p8h(w5y@roI^EeIpHp5}HM?xYfFTA&Mx^`kA_9*l(JV{ z0#al@9J{_^@vWzNJfoPqyWG^_BLKAJ=go(f#DvlY6>qUm#|W0NW9qJg^ezqO`yuZm zdBfmh`35UX_p&_k;SKgy`!(nfGj!2i5zF>;WGCmvcY!B#u_o3y*se=>DLo@Cmk7%e zN2tW;#u0X^3ua%|f*05>IHo{w6&<1);ogUlA*52F5bF~8y7+vR)jhuQUS9VYIpH}Q zkz)57BJ^*L+a`??18`WaPXdGT)y;`~)pW(@o9E`41k)`bJ(`*UB6-uX*!YPn#T; zPD{Lr(sjPxwZgb@n-jOyb&8R96j&QR#k?zE6*;m8Gfla*`2&8t*kOm580Kv(s|Bdu zD=rP3LpUR1+6?0GWmuFpWd`_nH?QtJ2_5E5eXC`hSAUQLtl8plnA?%(w~cQd|TFl>-pDtE9N93Y z8Z3f}Oa=sNy>tZiW@fU9dm%urXY|JfyICHYz3XdL@;lKkr<`Y=Htfl{Mp?K8opGt{ z*FP4ni{6!5kDMjU590#x&5O<+e=6dRAg#PFx&{i#1a%cRrd#{TC2W=z@AZitf<#;`{|R3Qv!*l5hi8&wuL znk141L%Vx-AKaA+!82ZI&)FAT;~jdWJ%?S=ijFp~P%0_-sk%DGF}cJGk2nkTu#>!w z>&cLl6{;`PdzuS4yh|ccVpl__{SQRwEODBLCrp%bEf9hQnbFyo9@6OYZIqki#;N{_ zS%AfYxq)gi8=69(^44(Ft!B#MWmHQMZ_Eao1cSFUUEWt%ZhKw>Zw#C)FDML73DmVC zP$5$YAIqB0W+Qx;1w`+6u}ot=u}0A##_J+>Fm{O+d>%0@pY~arlHVHmXBM{4$*^_> z{qYVY5PJv+&OC zblNw+Pa{sI`2)AiJodZB<09+NnB{w3mb~(i{SKGX^C6U(enOYQyZQUbzDFMHGlLcm zLE_dN4c(j^hBu5xNo2RN%+f9Tg5B;I(!)F&%2v68C=64m++jl%hu9|%d>?akT#lK2 z*XzS*#a;SD!|LxPXmS*>?i@vuexEqY9)7>W`D+8)csg&kGum-o7%f6tU=1-i3yirMY<6HAlDe%k5l-u#+SDw|{m?!o1`uU7l~ z?o*!2A2G9cmeTR`>RmP5lgH6UqbRgb{F=Sj8g3ed`6e6sliOplz6utWXKPtx1^b@E zity7JOaOs#DC*n$ozt=~SBs`)vE_JQJ@Y~u{cj(AIm!2RlP_zE2=D3heLHV$dy59` zAvzDx^_+5J+!-Z5954@>$}?1Q0NIhy95p97da=H^u;)EuOY2OfABj&2IeM@*IiTIC zY%u!uI0e19+}A=sXsjg)2mO=x_;hvD5LP@Q@TBMiq2L;V;}VmCQIZ9M`h`u^0qi1>tA7j0Lfc_C#D@sF}mA)DuQ8|$} zxloV9sEVxH&)g(BT3a68nQ@eUObU_hoE}>pdu$*CJxJKcGi6+%?yT@K!zw?BIT6wQ z@`QyN%gm_0u*N(oy0g&!1@qSff*~bU8ki$_q_#_#T7${6vQcwoBF!(^mZeKVoTufAddN%4X1AHSjp?yv)MnJYTryS? zriM0bSDIXwat1d2R!WIP)K*M%P7*wEDsQ4lcnmNN?II;1dfwRjmWJTq+cY8;MKJ1v zIboX)ldj}+2gl+^GZ$~Lfkzn@{AL-7*j@lZ$2-rs=f{IXSjo{9LcJpLC6aV`rh=F4 zLJjmku%>&rR2{#Ib1>-0`1VVvL?&)yy3IXH=`I|72^c%1k}B%M-K2C?RH%Q-iOtbF zZxsIp*JA1v|IBYBjpW0=sRCp~wjIuyz)^+JkP&W5SSNJ&tPPr0JTc`wedCDuY|dlP zx6ZDM#AM)<*Re}E>|j7fg~WBXhMb7PA-4qOWw<5YH5E*LUz~k3|f9JuAq;Z(kiphRoLZ>A|)lJe% zB!v?uJ=$!z%|*e2RkIB0N~{$e|O3g^^#j*esE_qvc#( zZZiGYbsQvIRGclTRuYr|=(tUHH_GcR{{HCYpUm@5x0_8|9Ts=b+Bz2tgmibB&d+Tp zDZYH0iRRe$m_alRUQ+#V+nA4#>s`Ov-s*#_h~qAvCiXYs!}`XeR6;gAR6@yEd<;pf zv!hSHs-ah>iL+dHGp|tJ*h$#5KhKH8v^38h%kXTBB}%ZlFul;lQ79}$m`_nQ{!@ZCrrS89;~=MF zxA2`v{F+T;(RA6K_UBY;>G<)YFo5yhift*~;?y!x67*h)Vs!yi5)YJ+39Yuj#Cl^|j?Ij+Bh7;|x?SJmjj6M_mVO_qN7?8=> zo*|k<^?(VFHQ^uk(psyB)8F3@pAiIWIq4Y{=gU(VLAWIC!M=MQWd;_rmet96nM6Z5 zC5rmkVT+AP+^@|qUsE%t=>=0WEb=f{s`RwK?ZEcWI&8y5#8IsItoHFJa)iwb1-jRR zyTxTRiSiQXQD&ECCqwqMzSlht5iv;Ep7*{*S1_;S6pcJB$`fMx&a)q3r@{Msee5G% z?7Bg>=&e;nVNrLMP!Yxap-S!i81siX75Ww=zSSpVO4L~0I2P2Q?gK^?k;wgh_lKB> zXI01dr7EaASK8UT?{hZ)AenuW^~1P>@+~?eVak^mtcfNy;G(ngD$G^UpZCj9X<%b} zDq^~Ec&*sqsj9-d8qMmBf;B&dv+EprKJ~lC>SnipDjZA@vVhs~)n9cAGx)?n@E+60 zmUWlNQ{R4$QPfC|hMsF>c?F4EZ7U8wXld2R6TVZ`V|qC(-DXNfSo@N^I^54! zfSjAOlB;3)x`` zpi2Li43keRlas)mdMA~I?U4rExx1d#9Edm3Ux~g%6I-jon9@04Mjn1 z2jwowm{iDx{9So!`RARdfZ$^98VVzKf~rWlKRB1u-;;$vInokUJ{%=2Cs9_t~!*-zt@ zCtxpTN8bBDT&%m#YK0<`nLMTGIY#X|Pme@2qeS&AM{7HYk0c3*CHb13rzU_Jo}r*P zg7;E*V;Cmm(jq1r)XA0((UNrLQnu>>m%&zIg{7FQNjtQItJ{9i_Q++XJEQ)igKb4R zH-k%DR#AUU;_g+R#$3H;_1JG8&te+n?Rj-3zb&AL?0*|C>)CtRaYp3(0gYO99vSE0 zn*hpCl;bQlD@qmiBtA*H&cz3RCu|MunEeJ*C^Z(vRZ!PfEqyxcCcf`!dV_jAu}O*g z2wtanu$Xo2Y79CHwRMF1@X0H7wjg;!vg8W_B#nI+mn>MRC9&@ZW~*rlvJgR}A(3b{ z^fWHd=rf2omOw{r%!38_v9B~4FSbE(ZTczSA)@1}=WBQ~PJ=ZLtkhV`H;ND+2Npt8 zB9e1jAtsylT>c8yj8^-f;cUqwnbIJ?EJ^e7PxTD4$T zWOEQ!jIj&ZSYqOl|7zTB(-TR={Y8R$rPknuRK?j|im}<$&b0$NrTg3SDpBJp%EK<( zw)Z?=Nx3x~j%^N_OH9AS`kbD9LsXFE6!9(#4D)rs`#I>)#JTVdp2bRj0vX+kugJMA zWl~_?7TN2fHu5PUx_7WSA=E#jS_;cAZi2;gkfHIuoa0ZiIrnnveX5?@=d4Ha|-1b)gjJy==;veH69o z>)|$Y_wx1fixh$eC|OQ8ec+(9vYVptC5wdrA;@;-mZn4u$y|^SUAycWbwn2zzpi9_ zYbfhUeX;;{LVN z8f@7y&N$*8UfxD}@Z}RX0B;ekqQwlVbexFOUJctl)4YN0(yjz}`i;$sD!Q7Bb%-^< zr&;X6bnNK4hE6wl*wxl~_EYuy6W=%BxHQWfFDH5%C$U-CMlE~-h#0o-J;ZP0%LE9T z^N5W?hn?@I{3JLiEmAqc2>ak~>C=zFE@Q#p&Jx&-V|V%Ou22t)(Hn*;EJhAOcL{ck z%cZ3mE(^w6W}6Xr_t9twgYC^;!MakKLlOM z0wF`)rN$){1*bD_O18PQ928+tv4`Y7BaR%w6t*Kac^ZMss%)ILPnHpgJ-DK5{s|f;thD`DH)FE552Bjg;gV)Rp;gCS2puvVM$sW#0 zI+VNac4lYO;*)-=-@DMmpuH0YTR-P51?54G0c*ip$?axBYFX zBDv{SLPS8iq@*RclysK}(%p?9AR!G~LL?LkX{9BlM~Vf{K(^z+Opo0S`o~4YtdSmD5oxC_pq8U*0Q7WCs*Mgcks(N5#A#a zwJuL#X>|v=86hLDujl;XStSITr8&hp`9%S zUq_DQExYp9!%Cl<&S--fs@Fo8Hy39M)K0u^A17LP5%DL?w~hhVusUU3(~a8 zdp&Mrs{Eyg$xls8=r41UUFNV-&65Y0d$LOVtDMLTOgmVAbdopMgR`O6?~5SB%bXJZ z!}l>GVQFGkUBI8;FOf}G6pHsYX@@C1raM*ASm~UQqQ$kw7;A9~b2gh479CMppKX^M z&VT6L(_(f6rc4(&HYIG+EpDXCrp`VnA=u&!?xF4^dzAdKuWJ}ohPx7P%`cI7 zDWQ^LsE5F&%83cr1d9=pa$y2kIQwjd6E#-uF&nHmOpriOY9`D=7-UBM{WM2{svSw% zx{WOE6tl^TEY-*SvdoGGA_j|qY{YZwXp%I`YAx13rm8@b2*0r!M-mb9-QS%kd?+tL zLJXhOVfHP@J4OZO`S;j&2Kimno;5GsoIvPPh~~|bqujwT-|BRcKen0CnIy#N`T%-$ z!`Jz&Zjqp>Cl^^3l%w_Uta5*B2Qaj~ec?Qz$m6I-dwckEB1(xt?-gaNk(e5uHNKkF>)g+`x9ESK z4#~G#N<0BhfVU^Z&5*Dbjccz5@N#HO3!dsmJPO9-Q0L{opU7?UlohyRW(l3}1Zl%7 zlt${v3nhwF?cvxug4$%1yZqvkf#@1#!}x^1Q7lYeiY$lgN*$9B5KH9!K6tuHVcXP1yu1%`i z4~@sJ6-EZvZH0?l8A`?$F~aU4B(EkQ439Kf*ZT^CqtG)HC!Y8mN;bA_&_vlNzo0DM z59G(S*J8%#MmHO@1hBP;LG3%YlA1pB6U3|k$|6)NAb^FMjg>Y^<&}m_Fiv@f@9jFF zB2{NU8;nVPNf{Jcqn@n0c~!-W+0@V{HTbYW+8fFG4OBXCFoZ2KM~o_dIUt_qly^%2 zBof~G)v1_b^pPj!gm=5rH>!xaqTffVh>nkVZSQZw)3ptDX5dPdN497(LDnvVH&2{(KQ(z!*_V~?ePEebN!i^lYNLp#XR4p?P;OA3c2{*f=;FW-t(yiO(V541 zgkgAn@gNUY8{duQc{<-|M^C$q(cwp^6dKionjB;6u@P95?owPlIu`bi1?}58YpKm5zZ4R`S@P4Kq*tsfQICEV<4Uau z4p`B?wVVtF3+)^xs2ljF&DAAsM1RozUP5MR=t!M19sy zmG^_$&w87MM?7727F7!Rs2TcGf>t>%)HRoYuN3To>#5{qwQcdPopTg1U0`S21Uo}v z{Hn`0j2p93TozqJm~;V|YV{}I`&K$-X~3Cx_Vd?WEQExj(j@+{Aa!%uVXoN_J?^26 zf+$8|z1`FnQ`jDjv)meRl#^^DXEU1?^(^)?_ktYb@tO;z2!qZ>A3T?*Kr6>rm}j&K zx-5R3@M_4{46bXTYwACEyGz~}{dhDXHvZg`-D9Tqs}xXJVWINuQik?!*nX`$9o?xt zuDYi`0h)X-gJ{B~9R04!7knfQ(`>Kg$rO<*6~O6){Zg0x^W#xET3o{iT*~8gRI?h0 z%l=R938y{`)Nzfgn528BVjwpD9hB5*yQ=(9t^10Pj3kva@Bkmfy18)8y_Vq_@vKX% zv&N3|NLf@M*T==1fm0*=RM&V`aIvM+j335fTYORN!Cuy1>&+-DhdQ`dE>Tf z)>lZ|7W6fvq?-aYIwkR&XQZowbF|;zc^gp<#}%;_Hfz_tIX^>gy7^Qz?%9U?+$hMD zRUU*F@~h570^EQH5N^P)W3;Pr$21bD+BQdSu0M{vh&_+aPG1BYM0kC2Hq5Fon?%s} zzexFv3mwgLKK490N^0FcHGZ44kOy;b+bC>YAK{Pi^4Q~OTQ5DftnC^r@-L&DR9KqW zH`R;6m#g_~l=-fp>yjXP8aUH_U3))lh=%nwRG2gVG}ytl*pM6JUd^Xxpu9q~iTj37 z!qF?>Z&F_2-cP}To9~D|RkF~3T#O<1(&y3wKpOA%p^=d&e!##lQ7)Ai>g}dpoLwq5 zSFNRBH(kQ$%p3aSs}$lk6YdY?XPTSMg(QNQ3IUwnUCgEvWtHm=bsF3=nlsH$tOd!f z)}^~(SZ^>W_CnaZ)4J-U)6FyEUz>arBvh>x$yJRUNRZB!Zgf2yN~5AWS(G*FBHnsT zc07Uvc}ecJvoEgIe1K7tr55k&hBdiRHX9KDl!*KlhxYb$m^F=h|Lp5jdA%_a&~ekt zby1S~n(u*N1`0Te<-K+JRJwCrbWICwAJpAUnTq2vQGpJ1{!`W}2wypGPTxn&^MsnN{xvne)#yj*-IhX?L=62c{ zY-O)~1u+C5ydRFG1sP@#nm+2{D_{jF7Fi_oRKR*bvUNL`(SU*2phw? zvX3{Rrug-#1!V{X_s$?T2RD1b^Q_)zFj_=E*2Pb7lR^eL=8wG*iwVcjz4?8{J-Umq zK|m_5|=uKZF_iBr4<`n0&?9cciuaCEKP@3x6WaMycknQY|N1Ce$GNifU zfqLv&9TMbkC2X{~dN)JIJ}#Z$wX|C|FA;K@QUgQ589*t_+_Al6sTFX70hhaMvDCF8 z=GWC@9+uaYf@BaJpBFr!C&{De6)&j&t)rY(?@-INxNGD4dmo>=&c>n59T0H*(7!o< z07BjvwlSLPdVYn~we$*4+-1w7uFcgy=eoRV4+_QHH6Np6opLP@)Uc}}R4*YUL6Wx@ zD${Ra1{wUo)nvELD>MGo2S0V%?0$5?$Lj-K*6Y8?`N8;3e^!@wQFzATpL9vD_~EWL zsnOTf^uN9GY~Ik!OxxGGX-R9w7+th{;3wLT$V=g0Yo8$RB`MY@7+BsEyi3M%&%%m? zTwAf@!zC(fBV*35>Y*)tg&)Ss{b03I>!0$?2z(YJK7&W}a z1HP!l$dXuOH7r3jNHEmbe*0U;yyV1>=bbz$+rwYBLNP_UQ?``-buq+tB%%kGcaJiI zjUF6FN4nqOJdpB;)NbKw?yuHXASu^y+;Po`${RO<-7BCl@i2XjT{CTeQ)nu!_~AH& z7G@xsWQDAPkklr&rB&;s;bmXi{1_A)ydDT*JA*W& zRnKtZieW=Pk&2VS8>PcZSk~W|`;*l+Q@u_P687nAnmXEjW`mfG)>0@yDlR!YH6^~d zdB_qRwgLo6{CM*)sPTo#EDg#lvIUHx0NT%Iv!qRAkKRXiywjtwrwBy(b(dxKK@o_| zr4!=wn5xC4VeJJ`c|ofo#$i)3{eD4I&)%HXzL+9e77ch6^H8U`0-Tyq=ye7clIWy@ zs^bI~y^c49$3OZBfXLxGwrjX+Qt=-cls9x`+a_ADgbN^1P`D5~A zf~~F8!6)@s5$5)vMVQ!)-*oKP`V7lzQj${EN9b`$MNj({{6wehEUWK~cu`kNKC=EK zWMcpMVDGE`u|UIVQ=Ex-+J5=ZHp8`P^AqbC;wO80Kr zH}{E77Tuhl!bj~~OpQxc4@W^(Kbs{*&Nx=WYJwz3;Hv~n-L!IKMIZ+YSE1E)2`VXF zdkzzZRdC`<{aAvn`XQb0fm-US@x8nR%qwU}WE&=^s3|TYLkS}czG7NUaQ3VtU52$s zn>|nH&^kB9oK`EkOr0)gsIOj+0VO^$DxWK(x>bhF(5@bQm~)HS!{M0;#=%uH(W5o> zZiHK|2i5nW`%d(|!ZlcYoE6A@n4uN(xE&TLDj6my;;mqde#*Gc-(|y9#S^J8TWK=+H(l8fj?FSi{12EKX_6`T0 zP>HOcEc1rZM#ZA625#@~=@Dec)D?U_K;t0#>Sm=!E3th+3nNCJ;O&8xG@ph zf=jD7`M^*mA&|z8q)OGoOU72B9fZ9V!qqaR+*^ll$~@SxeWp(^m0eriH&ig;<`neq zt*JZNjD0oX-w7XVeAfmip~smMpffU`_M>a#@*9zpzUEn8AnV8$WOzW^utu}nlCROL zYv4N4m4zR`lvlVWbt0V~&_bZB!s-~Vr@U#P{PrPv)9r!F%o1mgZg2n8`*hICdu0fGpk6|U>8{s*d<(Cct1bFvVkT8D_@GyWve+r@_ z!AFE+cv};k3zQ29vd7#y@ULv6pS8LuUt2$N53ETx#DY({AKSL^eb9S%@{!g-+fvxc zCbXo^`J>9cHUU!IG}N>Cdo@?Jr}k`|IPOebLNR9=EYGX-*0>_5W|9(qYz^-DUYi8f z$tHnIG$0*$lA*#v`V0p!1M%rxZNDFD&{;)X?S=I97W~OC_WtFQc;|^&@ z6R5syasDV{bez41$)AnK9C2W;$S*PpdX6?A>mT=TKQM?0@nMuzD}WZb~6x+S~L29Np>PSUsM*{WBC zq{z!QNYHj?q>UDF+;z7&OIp#qStf5l0@dxZ{}copqL^U2>gMc>$R=OH-k1b(K^LJX zJsvqH?`TgvqH74JbA23?B)6fC7v&;fZXXQuAR#9_#PG%oG;&41+nAgOf^=Dx9UUT4 ziKIpHQ_#=2ABB`lr%8g!4=v2r5W{HHD1XuAg)?WW*6DtisHq2?lmLZIt>J#3t>^7^ zcxv@`PzgsAQ#H8a2C_m2&aIq&u$__J6v7OHFx7JDrwLr8U2*Tjbcb-I!hD|7kLCNp zT-O3=JB1A=ddP}ytOdQ~@}n6z67AY>ZfE(1P*=9HRe#L-&g32Py+)EkK#nLSX(<53V*S8N&hx zDwUjR_Bc%1btH)L@xugSYHyNT>mS~gmigL7p}NBf8OIj@iOyRSx>@XdC;bX7?&#r% zMHli&Z=TB3ux4)xE)lBa0mCw`_1#&dl)R!L?7VTsoR|+8Y zhko~ieJLHE5Wc?Iz~-iB{CpRqU0l{^^_vC5B=Jl?RA6Pr8D)$^HfxdBjptGR+NYE4 zh;}Gm7@z}k&)`x1D11*ptB6kUc8`Wo&hcF)#fYG`rM(vno%UJl;`MUrN3qhSJYPn0 zLx^9j%Ims(^aK{88!Z}5J9uCz!$Dbd2=g(qWVE#Mz1pfA!h6>pcgTwe7y`vcrMLuw z=y=eO9?AO@849*Jb`G{s1M{FdIg~nRIAZ3PGVJnhoh;w21zYd_+Xoh7@T8_00y0yN z2)z+R3xp_#$of`s?`6&HJnz$?~XZVIEuBs`DP# zqos)?I4%0upDr)a6K~n2H84FlCZi(3htc3lGOuR0j1=GaGU77EnU#4Hb3gtc=tlL zhu>poxfQ8Fq@$zDl{}LpDe@KX)e#k&xud`uLF}BIx-Lo7gQd)|W zFmqS(kW8L2Q~Mb!7`6V8^?EgEGzHJlf=zvPka4dP9+e0^p4H?LCG~xE!h|r6WEgXbJc%_ zgKtV?BnWqAh+~|=>dpH^R9aykR%D*L7Up!t8MLy#UZBW|qmk0rzcxSe2jNoj$LTU- zmE=||^dGWjvo~VYKt-f<^4R7&9RA6k^OJR?D zW1okyi$Ul(k~=lvp36SirL+bbYo(;sn!Jcz+YDhKpS!a&WHA>dqTbN;KHhaw1GAR^ z+)nDq0a*cXyDvV^8XtF)W!_t&qJjo{0J-yvQjEU~hWHm7%AQahaI&@lRW)x6zIw+) z$h>_z8_My)j|p6>xt>>P?F{OdZHtFbQ-nB>(_j*3No$m%?O~i zptS0ac^~g?%Qig$F-_lA?3u94&hvDnIlg$aa4t=f5or*_WT(Ewz}2sQVBEvF)zz8} zdfD){KW)*T0+7w`#DZF!z>SrUUP0RW-~2hVGrBjb2phXp%{I&l{rNF|kk?0A!%>7@ zV*U(5 z7Y9``=Q3faSv+C-)s6AiFCv?qr%F_0mfd@d-~?Mva(MvD9^d0S3jY!vI!U2)zr;r7 z6u3f3c^!{`^W+M4wR0PpvVph6WDvDCu1qT2Q&Zu}y#@!`r*vn-O-webpfSaw8B`ri z3nf_D%vBNFd6u@R<3=kDc0*G(N&QQz3k}=X0Rqbpl(Km2nvwAjeXXpc7AJO#L%b=t zQ#*aXuE-p3lwF>LmphH<+_}CHAKu36plxF9Tz02bS3~>e@i*I=z?@fK$v%LKjT=it z?6@_(@QoI|jd;b@?cG|J-AS*ko6XE<)zTr9Bn%euA2a5hK*UdPX)w4i{YG)&vc?wK z6*cvpoWhmDmwBaY#dj{@mX(RYTaax68?hfdMG=iA zvqI|@Wz}@8L@Gd4v?m1T*fJA{X;NQ2p|vX2l2z`EIDI7b6^YAzFmGV8(3r9)Y|+{_ z`QxiA@NB3-usNE2+c(rzZ=X+E4Oks&?~Nm50ZqP5aU$R|q+A7H>0!a|Z9S6xDA&Y2B3tm)%BQ%TplVj{nf? zb*R%`#fi~}LK?$0Zwv(w>ZN%nSJA#F+-N4ew<^iS^dUQB?VH@w+A?r#Bh8{fw!_^m ztb~SN9bWQgR`@`#&$h|GJV3UjdGGL2vaxofBlb&HA*{9WJFB$r$!^ zu=8%yUTB$?Jx^n5)=S-qT}CXNpjV#ub>XUl0@TLF$+w^B2Y0!GBYM`v>^`CrCaUVC zV5$Hkem!*jEjwXtqk&Y#u6KB&*=d-8vNC=m1+?)w;o@%G*XEXjD9ss-+)a;P^0Irt zaBLZM0y*ift;t9!6wtN?Q~C1iflMoG7SAPkIA7gnS&hGo*U}5S<$iSxGX4m&bhpyVXSK_9 zNejX#CS40kt2M538}8DuX|kjNu_JJwI;Eg!NNSoYHbDKMY?p&0oq3r0+UB*kP7QUM z*|@Y$UYS6gy+S9!Xps8v1j%u?To%$=uc4AR=JSd74L_U7(ecX+e++<{-c=MhSIv8E&st#zy!=$;d%m!|j89Pm?)@)5Oj+1OfT^-wURn78H zaud1Z#}~9~Onoy|(l40t1v65|9=O7-uo~AXPl4Go4mt_M3(HodC^T4Ev>Q0pDQYyN zm9^1=7-)IYn_FU$xI~c_*S@pF()idH3!XoDKBz zR6_Y6{^H_|kVChXfE()^fPmh*c}^+1f(?JJz`nkR2Zs(9cKA^wJ07b8YPl_Xk|jyjbS@Z zn-UJ7&bRm>2YxyiU$aCdiF6m>;0hAr~GlGTXtdZusuY_iY%xD9muxndNGONvzk;!2VRE~?)uquO|Dcb z0#oCxcCH9Xsuz^%2*RabfXxP|NWxpi1_KE$*4Xeb4^~jm;GX>JgA|pp2nhtCVd_>4 zOIz1FIJ|jIIhuBL)V{~5^mF4k{N970)(#H!U!nCC;YKRIHL2rr) zdbXkDi$Jcp+@#npfR$w}TYuH|B}TOQ(F-)GQngOHM^XeBmT=`Hf=CW%vytj_`e1gB z0?*oYfKIa^j)p0-vHN7@S(~!0pIizTPNx<8t6kfb+cPM$!I^HkBT7SVQv5+xk6wyV zW_n0|ZKr=gnT4~_t&k#yBMF~PVE+1|Py;r6bI=Z8I+%zTP*`bnu_LQ}{_GG3>LV4O zAw&@ey2S=;hW`9NKfe@eBM%a4;n$%aamy?f7*-hIh8j!Nnz zN2b!T9WtoQ_{5=E_7Bqc*Bj4!Y{$HgXPmG&uHfu)Bh1Ikl1xks4;h~a-Z>P&F}f|^ zbBVWfl6=@Ks*c+DK|rmm$utEAqXNmsb*@Jx^64xnUq1L8D(ilWj2$U1&3(tM8Nb&s z8ta&J6*J5iD&++CXhYui4i3;CGXx05SZUH03~2m-@bok2o=-rAAS67Z1@+Tju-&r0a)t* z?fPG{I)~o;3qZ0%E#saehB?jCgv< zf))2uOXgo_FEkJWGlVvIZa)9|Xz(4Rw+c#;^HQHZnYJCS27nKbYbHPpAmJ{$%+q^# zqIY&U5(t{IvloLlGBYXb?q*Z`A_wo41HgY->Y*$aF67=%*~2qXa>F6=RM~ThLIg4O z2dvS&WwCt`7W!{2qhGT726}yX_wx%B6bl7as8tw4`TxS6Isa1wK}b3xp7M~M|7koA zU^GKXyF%G-uvKs%RK^VYU9|JRj1ofv(H!c17$kcC!qNE~y{8gFptpL}^!9wCjOJP} z6LM1c`b9X=i-V-x1c|RoY2()OOXB@NJmia43TY<&rK zp8fY^3E~9-F>*`g`u=Ex@#lmXe870YObmp-V@nnUGxf5n@zsTw;sIt|L^Jxoaz7z1 zMjNRneql?HK_IGg=|6;jBZ%okP~~x*tHOoe2Dx!yvIT5fw;6uJl@ow6HN+usPJcm+ zMT1Z_@t*1Zjw`BAhm(gSMF}tdW-(~evH+I3pm+l6!s!Ty4`Zw_v|DrPx?sO->NG;hXe*gyl#XoTW9t-|Nj63MB#v9lEOR=E= zgkCdFPrZv+cK={Pmq1t`STgkg0fHvB0+vw~F^qA6G2Yj})8Xfj@i6~vQgcV|{3_3J z0S5qW_8S~GTtqxyjD*O*{&xPw>C70j$A9*_qk$ioZWvy5&3Q%n90hV75@cs6E->rd&!CULPCkn<&lBjc{y0wSzq3IpQ1m&} zVLW?YDRRC66H%}pNW3T@7vK3?INkpV-TBum;vpp3+}Dr#UY=KNf{-7z5Q;!KuLUo@ zGO9Tr(1QGq{rW}Li2-Z)^Iu=R$eJjyaT(FuFFLu+a*$7fX=)2Vur6}{935jIkVdEp z(s>BH<{gNg!X_37Pl3gY>ZLimMs5-b7-P}x={;D6BcFD84F zLz=h~Yhv}hw4~F6H8^I|CLlK{57;Ut&4 z;8vJJHaO1v+C^CDi|bSn0l$pV5BUDq{C^2t48T_wn!28UrCd5>U&qqTum9$qoKVv(1vUFb^7B7czyWk4RDH;BvAfJg!H|Kv zW#!AcQJ?>%91VyC7;|R+fEm8{gTMDr^K~%%nz}FO03lvx zS~zCjZ6~A`1n9JFB-&Q^qKALx|M%lOP>=7CmbT|C0Rn8Q2J`$;Z?&K2(;siVIbvJOTg{{xC3mw4~iz^I{-3-mxxvU zTJ`pxAZS6`T0i--bafkik0ceKB7R6q8s_708|`VWX*yYBJrN<<8#fsJ4XNkP9UlJ>RdxuPHD{2M?Y~9v#z)LwtQUt8prusc94g879lRD4P1Zkna0X6I z{INM2I3eU;><=?D^Ps~yb=^lP+WsAY7vNV3&J;QFW!-B5GHIotbKjj2R{p(>Kv9_c z_uFZhuKssHU0-qCa$)SGo6Wm}@8tl`Sxi{zO1~0gs;ki> z8YnNmi)eG$2Z(_p^>^rQRG%d}O7b|Zy%{kb{Q?jp8MMq>KWi1prb0J~{HdIc5@@Rh zmh-b(E4rvCa80OQ?E*}-gZ>72P_=&K{8`hCjbDFf20|Z(%1YZX8Iw7^4xwxofFD^u zHk z^L}xyGsI9rt1qnOD2>PB#g%J32+$yR*?Dheq`$Q3 z^w8jyU+DtTy!@g+8S4x({K}RqpIr}IP3;rqF%eKDy!vxQfA8vB6HgzQAQuZu&kkH| zUtuju@@fU&l>1Q0_GKg#JUJ(CfO@GPF%4*=8%@Ex%W-H}5c zfJVTMYd&ajsPp;JVpe1(ZfaoT9%z;>l5jWeOytN*={N6<>_)^Xm}7GgWpTsxfsHC=uD!R7 zlFf*mixB$oxma^9U~Rmnj5;F7IfeYTY3-$ss-CSIh1(#+5sd;r(OB@zHkO8YuNW4|2k< z3k+K80k~u5#f-qZjUh0AF*XTn`R5YtqyCJ7p6|U0bB9mrZlhWn-BF7Hx=Yz=vH@Og zHOf6wV)M1`bIv`|m9O)P=`CO7jp|!5O{vrU7KKr#8XZxH06GAe+Ye?<` z=utiI&M`rZjPXbF<>&uuN-f5Pg*P7@QMSA3DVb|utwyp%2;E3>%LN%5oPD6<=U&ij|kfS~#Dptv-*HX2c{~)v;Mqd5? z7Gis~vVRQpi=HU=MaSJOss(_y6wUxaul7VSk!Q2baG z&;1Oc+*|31cPzi}ZL9OzPFg`d<*7xscF|wmvHV=cnC8ySibn_&aoe?88On<+VkMfO z*3pQi5gr1yHdGUod(Xhquu0jgRF#E4>E^i~Y_aEO_Xm#v+D4azeY(bDKJ9aVvX&Ld zulGa3Ad=Zl9E@#Og7U&`a^XcP9k^R)5KskEt5B z?HArl#>T$&GCOx^>Y<7(5}|NqYDRlrxILu+^$?leXR)Zx8?>`2u=K z1mP4m!ZMyQPqffYoXR#~h;p7sNogTxtilHcPJ}$Lqot?%Tq=X8OfeNU%HDMRwC3&E z=}~<*EP9A%DLItm-Is@kGHW@n^j}pHCrzS)yEdHXQwA$Up{P6 zYN3hrxr>Ehs&!n-d1aa;$WlYo|1m>yEx|0+zReP=1l->nDSTK!(2(2+AbXraXiwe>TZoPl_nvAwLSml8zUmi;M2iE+PW75+STjk z8oEwuUvjny=cC_F`ihWhjZ|qJx-VABO9J71ph%O77isol$V;+Ogf&zTXxo7#2kHML z>J3sr)HCeChZ37gZ-|vIbzyJ0_L#d6^z#pVxc9~b6?2OzI|EP3)HK&vRcAOneRPZO=w+@(zeuDZ_fvM?($-3Nj5O?KGe1|mhLW)bO z3)AY`dAc<7zNDuL;u!)C-=$Vw%)LXVSU7+1t+6-3;_p5+KJOVemSI(#gh2p@*v~E3o4cWVFAF*P*{x22AU*}kouZ?1C zON9`f@rtL;dZAAs{io`EfeBRanLkr|7N;_djpGl)=R3Dxk~|GBsMZ4tqL|0y6EHTE z+IELGQC-k*$fkE!aD58t2#apL1Q_LkwS|0GR_*|1-|&+$unj8Bax>Tb`G+4G=GxD7 z8rEbKQ~>k=s~Y7YRSPZFGK)G^#n_zt!4h%*8@D`H9sZ!=EQ1EmbPRqAE_Ls|2F&XntF}%mQRYO%tQoKi5giX41rf9Md~>`? z4~)@GEt)*M$kU{}+-Z8l)OoKy6!?oXO8db7Fjtq5rCG(I7;UEutq7Duai(2of>o6S zZhl|VqqZ%Gh@NYQ33T8R@gRnPeIjkfpF^j1Hvo=`LuO&&HgJ*ZoEot??$0_)9b|;S z3fnVxfx9&Ze1ac)-N4DXyf`*lrJ49ZzMsOX#iFn?jC?M4U@JlyC}8&5Y2+F>xOM&o zv`U|*45@qQPpa0UQvW^C@|Y&38c3re#kZeB6^J<1C|NZpNIxni2s#yhD$?NCa`e)s zy@u-Qd3NHWVZ9hg?YU8eQn1_#eD3AFPkTjx4Y|uwh3PNzUA^k7hD} z2HUYZH2%3U)290~TS}N^4l?3E?hDnXlhL*9(*NhV2M#jrjKQ^`GH7 z?0OAfJWmhIYL231sVYi!>koB-Y1FK>%SZ~j>r3f6?R_e2p-t=-A@H4S$mK22qPf#b z<#!{Pr}B{_5_2ma+)POx1Fnn$vF9++rEA=egQkSZ=E-@?qoA7N(+WgvvJb2UOAZQZ z<_kuv)nd)&I>T+6m?@V8KJmoHmTm((U1z;6d$9FQ*Xf2D;e+^Gke~tozEghK=H^Ch zf0V@SIA+bi7E?H%PoQkWMmDdqu>c@W!{8ygLPx+~QW(lD;Eqq#RU844@u~4M(`#T) z-XBBVBADG|{eNN1H|IznKVbvzscs+8iT7;1>=@`WvL5I`hd$~u@P2H|ZG%CuEX~S^)J*<$RN_ZMydjG5qNofE&yQInm?8FBO5Gvvu`b-RhT$ zEJ}dP?%4!l7d_V*R6fNRwBZGLaq>HA<0_vh-+&NiDv{6j$LB`sy$Od%i#oPDYCi-P z(|sEx-?D30nHyr=hO^-Va--f*i&kl7;8=Uz!(M5ws5jz0WbY>T!jC0HYq8Zs*8rYoKw92PvUMKCX4y4Ujce>=&5 zR5!dqEV!>Hp(g>m#x)6+?F27va4hEe@Mcix0)L|$b~AzUbjeB z67XhvSQ`|=6bgg(7=~T+d^Q zgPoLnt7`t1#vT8%hJsEWr_Z1kmee80KrJ)LrVezfKHiG=$fA_%r0EA`HKw@2J5lvt zQ-$5e$_?8xzX~1!k@kK-kB758&)7aEj?xD6bA`puY7@-g5^*aH`-=+ymWHToK)1}M z_<=0h`pcmtY$21huNn_Pyx;Z=xSmUEX5_jwz$^EcWN+Az7zb95f`?x>)+P3R4C7Ho zqCjgh4>gVKWFr+3Jko@5fgW1bsUFojuOp%<_c;AIZb4xcVM&&K` zy`}qa2L~HCIHx{X+$T{otmaW&^(=pGnl_+%=T+=vhaN-mGl+&~(Vk2;yln)5pn9%C zLb-S4>({Hv4j(E;E6wUpu%ek12ui*J4(|@$<9I6x@{tLmDX}AbKnbJ>xzvg3F(+pk z47@h!u^P%%ghFan|F}nMz!Q7}qQ5~(^*hP5k^xd{hakzM1$pLNwuhw#T~erUkWerN zUwLgk*)XamHt4i6QbyhIQhTIc5ST!#9}{nFj)3v0CRBzEtmjR?#Np=VR)`IJGMqm{ zja|wV5A^TeTiq;~@YfNPLTI=Pb*W+EsUv!BeGhfz6yuCL!`}ZCSo~v)iM&d@`>hCQ`R1fytVj0bVIF+vSCqo?h&?aOv##iF z)>1x*I~AJHd2(~V4&IJs)BZf^I(LPX1S=vTpC+;sNByPBr3FA?UbW8!I&WVm$yfsF z<}US;uZIDLVKO&k`QKM3; z47Li!+UiZX-Gv(3uz4qZWFgJ#hlI@JJM(*rw3*Xgz$rgz!|F5FVprSWOw7Hk+CgQ@ z%xv2f7Yy=h*BwBfLosmy;RALP_Q@?l^~!4Mq|G6M7LF!!UO2 zv9mTlGJDccs^2vE^8_TevnI0&$8e}%Um`>f7xTLa$>%rO)0d?S8?r*=qf0(*1KcmxYaDB2R6NVgy(`sn z|6wVvH2NO_>kBa;0t5{xHc0>Fr_j6w#F6r%-bAC%OtW?d32tygB0&nj^25~^Z+i1a zh)aQ3mk%oTgrm0T$xcks>4Q8aO49rw;^|wHLJ^)nzxBMTH@nX-uh^f?EYV_7keQ~* z@22)iPR;52hZM`Y8o>K{vEj`w>a-Fp)v;wS(Sc}{6=wY)gApO*~QcdY~fu1iSqtGLyxUn(3Euad|^;lddK^8 zB1tv*MM}Ls z${+OiO74e1%bR`GlXY&*7Z*CO45a6S4YkKk^pd_3TaCpVN1MmcoRl)J|FN~8iOHb? zau;mG!Daq4Ndg1v{5_$@J0XyCLWUhM%uD_KRqqF2zIiVj?^B`wmx!iMgGFQ6ko99E z<`zi?Ud^S!y>kA$y%<{?w=U-U&r^p+0;~cBBk4Q`@81AJhWI6fUKERSUwL^05~3w* z`?B*7sldaW1>LP1=N?`h0+WCS5kn&vApSScfb;an`bks%GpqkV9L$lq!6X&`pM`nP z6M~`K*ZqY4k)waDlF1azr{fs87IscPZ!rS_kk*GqhX2j$i)^LA(*|#|qKG&@bFmq~ zqgya-ng3LhOc{{uEr!ljpIZjg4D@gxdw%!a!;7;d-~jX4%nkcT^uTo90>ktEYY^3c z((x7~#vOY6k)i*rLhJ?D`0_7ETddE|{GY#rPd6eV?Exp9z&uBh0%*6#PV)ALT=?#} zLGU1@Qyaes#d&`}#svA&7=!x(|A_jRimKvac z#uhjKxtC$Ibc=wK7-`=lz993xrcwR``0r#F<86?*Wr2HCq@Ts#SMvQu0NNXZim9{l9ZF=|dGskP|E^Y_mFQIF; z2|~Stk_*{p?Jidv&(Zc5{e!@Oj96Ip=bxv41j>v^kc;$B4tXDAJuXQ!u^=u?P_sR5 z>W00&Qst3lVtp!lZ#>JB>C!{mn#t?3=e8&`S(;oR1o1rA&vV&Zf`|t62d>4@JwyS= zm`{M!V*coR$L9K>v13RLNNSD(1Lxsi^|4Ce3I#7tUn-#+bMno5agWs1D!DLE;z!q5W|R65mGOy8W5I9gpsa{M7pd{A&E4E@GcwY{sdZ*jA3ocJeiT z{;qGm*F74iSC*2a7FHS3pSIVA{EtTY^~pOOtTG*K%mUl?eU90(3MZo9_+B*NPV z{jw}THvUPeGH~G(Eyt<~el87l2|BOFTb?~$PcQF@Q5La)%%wkO)*V!MX~WjtmEi)_ zVNQiAhma>z98JeYAUEpr>i^;FJHw(%x^72D42_BbL_~rCfkqG!P|2W(5+pQDMnpl$ zpu{E$*di#w04h0115H%PQBWip$T=s;pybTm<@=7de&5{tJonE$%)xHXIaRf5@3q%j z1>ahh1R5`xSiX!m0V0WM3qN`N-f)L>W>Q21FBh(~b|jQO7|Z3?6&4cII$?<8F1U45 zE;0RPzm*x~ltoKrR~A~_2}8dHplvX&PbB2;VOQbN_e}f6P!SMh4k`aD3|+J$@mv7= z$vHN{Q`E@5IaVFz>3cw+QnfVUXeN`e9Xc4wu*+?|AkPJ#jA{vUID;b-;LDITn$oLz z(8C!A%@<|@J2xw`g`i3>ooBhBeGZ>zcl>nQY*b57Y!E)fOEV)gC`h>_$!sX1G`>4S zKirUq&{R7=X{bhsxaQ_+@yG0p>_}J^{uAOUf+mylT zs~SG_^`_cP7qejjH7^g*kmI9Sw}bG9W^|mGZVm^|Veo^O{MU>UHT*Hcoom|Tp4Dq zdv}}y@G);F`hgijP_cQ?picOd;FNh?XdP-VJ9jFDtT#|vYrY6ws}3{2yFT8W zV;wh4Gl3DV2aM6=1aT7rmatLv@ybU`A{^{KV5Ww26prvaFMKn5*Dp{Wv+J%7?as$? z0HnO}WvJST7tt(q&N-C;s7yT$qL>B7x*=6hTyfG8>e3X)ho3@DTVA;q=jP+1vQ>B* z`s@Ri`QPEJ5{uBhz4&Bf(5fA3$M@`5gdUuB>XoSBC@EmYT(OP{4^6QHw5mDXxUPNB z2q1)$aS0!dAC{a6>H^g8MBYuB?L>R5mezx|b9E*IQ_HuS>^^FpuBgQlNlmQ;6OILI z1Eb9;`*BtT`l|?hq1?kHw!?}zdA0est&s@HQJfNiK?J{PYHzLgsmqmc~gisW?|Bv!G3?W&Hh_S2WjC;No?*`?UL*D8DSO5;D zvH-3xc)R~17xp@U|i1qASr*I&Wmt3wnPoe8h+x{=34>vR(2BOw`G_{ViZP#{=hBkplgYiB%ma1pSzBsVkXXox!i8vG7V%DEeY(rH;w^1N`YT4@==^+?e$>mu6AlIFKH^1YZjd}kS7@ZFNf!)I0dwsqJve&G(vxcxA; z>5B1-qKN%k;nxneYxuu&r3^M`>%Wb5h9fjvDATvd00bfIIsT3mBmouLQcSML!KE07 zB$9Ya(NrZ@BQONgcrdlw_w&9bT@E{tDSrDLfZV0lOT%$qOe%ksnJ)DekR}N5zXiJb zALV#*-t*IGRE3M0L%U7CEIq1H++S=d9*6@c+g^p*o!?BLWmU?SZm_JU-8qF#aOmsb z*RS0D750>=vTt7==$M!hgCHO1WdTlHYWpciVTcZWCHqg^{4!%l8-VU3)SiF@ggSIkyl`Wu&)xYrOl{<#eX5cXx@Fjf<5$hs5 zLc{bbiE|n<8~R4J{qo9NFCIEXw8iDP;W%YR@*?(k{_2t z4Cz~Qcd=)O;}tiKu{hIsv|&P5@Oq6{+frE6)mpG_V8C8`QsCn&C5y@b{QTrQU%JJZ zD+P`d_TEy~#rtMzCkuFVa~Hg3Mb!t63ixV62C@D;>$Q`_RyAFR`>U&#FxT)F79L4rqO$f=MyE6)@TMoqi78Kl3qWC;u!!BO+u*01R z8J%wHE&yce?GITqN)eBiS$kEa|L)!#z@gAi$lp6rFn>jz>O)(jN}WuCF`0C=?m2m9 zFH_U2s{t~SkD$>`rMOMI$t6MRl7Vf=Rdzg`vSF~1+XBrTb&AYpLQ27$7ClCV$dbx= zXZQ9)1GN2`zIq@UCY%&Y@9jN*{2q!`sZe%oiHTR4G(0#tgy;#I}nk;6Nw_Q>L& z&4kstD7@e+6tN{V>IaUg})IZwz*y?ZMS@eO{CKSF)t z?nmax5AVC5b+~G7ye%2vgv|IfezSkP0DzXma{kc1)N5t$z4wj-Y-PXUuher^vaCeW zooD-ZxjAwX@%$N2NMCDS#mYU)9lq0;qB|NkL0%f7nYco|nUD?YXo^B^H(+Vl!zUfc(SGeMX zq037S-n0F)(GqWtu?ZiML)HC!pl3d5I8`;O)btVXIV^!YG#t*459oYw+VGLRUl4#J zGXBgw_opE-X$2F(R?P^gI| z?Fu62aO{^_j*t+MWG=8QP;@y)7mR!2^ljBNqVUvG;d_icr-3z`C7fWIS!K`rJi3ql zF1aIqDNu^9m}K?ot^3~{JXCfg&<+q8Bbn9B4t@z66|*GM(zVRA)a@^heCEMVJ|3Ge zP5ZpY{)C1;_Vzn?>lTfDmU9L-1)Q$J}OB0DJfgJb{6(i1O=!3BS?Q~BeBCQMYPKV6UWVg-M$SXS@f34Sx}Cgjr)<`p#!QFtQeCMJ zUw0?_YeDuIEaau)1K50^=8yI+|Hz%mj!%4;Ep@3KK zk0beTSr#sm+%)JEXd^M1sLM&bm+umcmDfMqy1ogRsQAong)Fnc(D9;{r-~Cs&5uNr zSSz0T_uA7t`XuD|a8)n5|?yhil|qAXQoP z&)1K}Oy(9&k4)Fdun_Xz1p)nyBi%|ro=@Q^DeZZQ2sEYa=$sBuvH=spO0f^0q;azC zVsV#Zv5y8uWLWrwx`Jn{k6KNzhY^_^yR00ad^t=gMZ20yPcl61LBat=Bbl!gN>^{@ z8Cq!W#>_bPk!ocVUyIUqYMQ@j6TG)kJPNBGWnpZn^R$f5jf)<$&i^WXL`GX{yfNs? zEq^6m4%&%B@Ar~EZl(wnFyIoX?69KAqzo&OMkovLJ*Cb$u<`q5!r{2m+DvTjrZy<( zb?&?kIVKyZS-7@js?Kn%`9yZg9UrVoe8gG+b5eN>MwnjD`4ysa)Yxc{H}6?_=l0Ei zQHb-kqwm}fNE(hQ1i!>Lsrp_hzVD!&#OnV=JtF`*KRHo0dgSfVWd5^MgloF$_Z-ED zoSlxN+(jYSS&sO=3}7%o{%yXp@Es_154ZPn*u=OMlZ=B@AH6rlNDwycQRv{m`Q@Pf z#RT=eT_HEBF z65cPr2xr{uH|g4k*$w6l3n!ZBU`mIb5+sz8NKV1xZiNbALJbPUSfv;9!iOEcggZ?P zlX6gNvPgJ;|5?a`J0`cTU%e`gb5B?b()u=?Z2Td=S~I;;s&f}vVnCrH)3cdT#2H*3-c%Z{!ex2_{ArOL~-y}0qBOR)l$dj{fMKTHsND7*2w!Xu0Kcf7S5_(wajfWK&{8f9xQgFR zRPvy^!9Uvo1lm#Z6=xtYTllbA%96UzXjO5R$Bd5pPZpEJ>$!BgGmLOFoY}j!f8Y># zc}F6jJC3yqzOb9TlThUbY^Q9__}*<(MoU;KD~NPwAgl0ql*@q*(0DDdW$ElJ47SQ0 z@}KC)^O{A6shdGruqH<2flkq2CVsaO?6nrUlHrwsT+6E-T)_t_O@qVbCZElTyI&26 z1LBH4K3e36f^Y+rY|t!xLG32J>`HLSXiwAkq<+gOAM@6Gja&2eQM08yw0S&@2~fMt zed<(Q;rf~rj(Ch{pFg?+jVIFZT>Wk8sq=oRlU`zdh?EWE${U;#L#k>A;_$fFx`$*q zc)AvQ;8PEmHB2(#(=e`+lZDF`^DY6gq~^N8(^_@20>l?VOS*9*q9)sDrpB5_uu~dD za!=MPr@ZmCqNd|9Q#NfGwi$+IExUr}CN{}gR#)+1)o3O^?)!a_{k8EHYUTXxjTjg| zcj^Eu7|LzzhHq7A@1HKWhK(ynd}y%YBJPYamR*2q13(kQq!u4RKhmCBmfiw2;EQ0# z<9jcs(cK7;Y081KZdZU#c|hrmjQ%!DlO)l(=65%~gfir_q4JD+_ucUo>vK^I#F+fZ zbHE{}DUo{xwbnO|@+T3bJC~BW&%1u$suBi7LYekD>SOMYan z04?6~X?Xp4oZ0Q}9OA$*?kU{65x0amnJFHsPbW^=L#_Rh-~5G^l&6U1i=bI;BcWub z5N`9yeHJU-{-3x%9ycAZlIyx2JHB$Zqmn zFuzUL_*6$Qunuy-C|Q?khawpOwh5ZWPP?Q5I8V9<`!L?|{#te6HR&Om7B@kB!&zu_ z%hzpXy7hiHX*iUY@4J@rCIYiV_XgZRsDt)pIs*T_@agw^6=%4b)6Lr&L3G0?Znc}C zAEX8kI{*~Zf7Vnl1#n)Lpn2=_je^04K8@PXd87RGH6@vK!Jd>M70OXDsj0M^ju;e!zo#ayX+(BNP=XiBiU`HMkXcI)u{Ej zi(>suiztXq+8r;8BbmfTH%w9(5MbxvX|g8(B0`i9DWO*%l<&x_o&e$vqliP==vVxn zy2)VJlFNhy%!;VA_5iNcVTeM%0{^k~aeOob8vgNnL6zw-QFzIV_n}37Ji2(V>S-CKXN^k1jF~y-e z4GHxk7S+8SEc2^OIZ5)NXKGRaZ!LPZHY8?J&q2TEn;qHlOZlTC1)n!6CetZOGwb43 zd(BZ4^4qutvRz*x1A|?IpscW~JCtDkg3oX)XE6K?@DLXVO_rizC)-DmW+swH8k0vS z&J~AIQSZyPRaob@pU~mb&P;OiPwM9h00x7Y`jT@(?IRDtN4S^6m%-KBB>0*FH=^^@ z(7si60FHp#+{$#-GEO%~a((5bRks8ZKx6{5>q{+RY0Pe@x|rzUF<7dl{?}zF3c?h9B0!I*rS_;{*z&w>7mcJmhx zK4`c4NoOwKVN904@ILHryIm@SCBvL$TSjc6Vg01BvEfH)n`?XjTqX+$Y8*U&;TBcGNJS|&9t(*;=i=-T?z!5i6|;SCL}rA;dQ9h+7R=;qHaZf7`D`=V z__>Q-L{GSAX@u*v?u#bL4SqoFs%*27qY_iqFE#xxpG>!XN(V@IbH!U&9OBx5`ZT2O z{N0W$_3+DgL}{{43h$kj3p9-O5D|5pv8uZP8jj;*VVjr)*n&u8m5){RTERsmSpn}nqpP$aL-$&hQx0gMHIt8f z-g(I|U7)*V5JT!ZMV^Tz`AB+h-f?^MwsK&ikwS!?f&ht>kfBN^m;6>TTl~_@JDz8YS---=M;#*&Fx+A+f|-5#!+~H{%J%7p8FX$nM9v> zoDD9NRcJ(M9nzezkU*J&pgOm_G>;$L{e}cwnJ)VoVu0OP!F=aj3H6C=&bsvEG@_Jl zu+%40@cd2aaGw6$d86{gUb_AoeogZ67|smfb6s0v-W(!!YH8=tY64O&7{BIc3)f1o zel|CHiU44#k$_3S&E_!47Uo|)NiWFzY9w}5M zO}dr((3wMTLoHE_yU7rejudPFiLq|-#EGQ6gu)Ur%&KatJ$YsTpODQ%Dp9Vu;B93B`KarrE`Z{RV$)sgYfWAB4DTyApZA8% zfMT{4kkU~>{G!YTdZJN1zinU%Kj>p%t11M2ToW8|cq(~GfzFOrsFq*PWJ#Xu69k22 zB9$X;I$@#5t3#k(vFC@}kyx4zOe`ZOVCC539uN+lQs}b8`6Y&^ zUf~Gs3j;Q71yL!n`0=a8QM(kiE-xhT_M5f9QF2}YOBchdV$VNUgZw%?GJV@ooA(^%9;>Hivq-&+- zPx-9EZbX`ovT6pXR%abDhLm>^;vRJAGcIB%7Y807PkJn`BJfn(Z)!`P$%ye2s>Iiv z9Z#=YJ6NovM{Gg%v2GFAul(k%^+XfYKKU@S(?lo}!Q%%6O!~($)Kdq6sXcMlR>_5y zRpq{Xk#;?Qn3~m+Sk|eTbMuK^Y?!uq&Pb%)%kB0fGbRIRYg~Ng+dEy>c=;Da9s*|x zr7Zoo-g(_7b&^vvd??T;5ItIMToO{V^x^e1yC zKn9Ws!loEu%D{Q_JdBvseukqBh)4Q8N%c`5pqm0j;lm+Vhll%5maImJOg#tm(}W&) zZ1Xe;eD|a_K&D`eKSR6!TX2bJUzvZ_-#gE|9mhTd{Z9sTAv)Qtb-%_Q_TP-#H4N#) zbeZq=DFZ{p9Fs$eqO(u+dd`R8Hw*wH^(2)9qCOX0^Y#ma?Z%?=Xfiz>a&)9|L0kE1 zouk1h^j4R3-lxd#AzTsIY~84o9?}`CSY9qelrd87|E3SGCp>)2Gv?=))>;J zu6x*#_*!4})iPm{j}m4N$`D9*f(wN)^a%-CN?nC61t}H@COER)G?11?@cV{86i`e5iti*qqS)cGWjQ|ApR`uH z{}C>5pg(YsRdFb<(5aOF&1dW5F^dEHf}ij@Fj|P3wr&2nV(S+>S=U;Nm39jeh3j$=KJb1H19tl_d@_ApD`-sVT3?#ssn1@`s;2{vIyZ zCdz3Pvn#yN6ZP;i&D(B-v|g&y;xve<6o8g*6@4*~`VeWCWS?T(O`A)7PuGTp>=QF- z3y6XO?yIyZbPoi4W1UpaAeHAtq0J;&C^k(weIG;rFo+VUd!gr7#UBuF|46A6uo5vQpgj1AG?!CaZ!a2|BF#H%JcPV-f zTS?|NCd|m)jY5~S%oD5iIR4?5{4y(q&rDmzpVrOK!2tpa5M zej6sN%0%Gw+ds$T=Re9pj6Q|?eU$$|X+LULp9?(s#|!`U=(6c>=X+L{vI!I`L>6V; zdzMGCZ&6(Q^%?ldy#z>gIE~j2e=Cm8qFcD+b)E7Set`(^6DML+vgrxaP;`JLULnH7 zoch}xKOg1K&mRqe`!R4j(oRDWMH3FecL{W!Qv9>a{PTSVY(cU2Z8R6fr?wtN2yzJr z!@tXf(&7Dca$7zgq=*=i28fHNIr$(@8jUx_Z+`wS$3`^y?tEgS{4FcGbF-sk|Jw(C zT)SuspGsKU*1bqEL>!3JSlagmPjT({Z+MJ62lf;lw4i9QxvPM*FpjoJhneEy?>Ecp z2J>NR@Pj7h8&=|lzeY9PXZF887gCyVpf4^|W#0Dd>)iLix{BMBf7F74Ao=Up=%+{{ z)Y(futxieTb6q@E8DtDkn-6hFCv(C+bMcV4(D%wjN=kKnQU!a z?-h#AafqUeReAlFD97aIh@n@y2N4k^1GanqoHcM~1jHC+=Mnmow)FF+UwXhjsyciW zIYKeDD%jzx7CX1u|3+D)d^V*|a6dkaR92LWO$Aj^K7|gx)d&m0$E6-K> z66M8wVBD(S<(bZHZx?9YBmPYbkn6PUmN}>oTjd)hN_U(Y+CAGYzP9i#obZ*w z2`EYmJuk{h-L=4JI4E$wE&<1m_*RD%y-kj}PsiJHPK{-k zT!vFfiDB@%^_N?It-UH;(Lkb>j^`Usa;YU* z1)A7Rc8;^C3xvJ8Ue=0WvB_yQfOy~S6#j&N`rVJ}8St4>dOsnC%jgwcMg-C$BDTi3 zPmXGHEY!A{wxen|ViZ_>eV$!~(g$%vELNfZ$;!1Iy}@`c(B5%N!yRd&a-V?ch# zqhnpNjeV27cC@DmB833rEj*bO0>2>fMd1aC4CI2ckrJ7SjDyRA|4E4a5?|=%H#NbKxIX zByiq6<+|dK2Zku0sHu@N11RSM>x?Iw0TVRGWWJ1x%agbaRE2g|1qNiJqzM8OGw{(+ zF3SO8$7({hs$sm_`Wnf&c&^=A5x4827_cmC22EO1K&Pe+e6iJ6OLOC+8!xZ<>8L?7 z*c4!Y`vRLPXzgXW-2>EsnHzXx<8`W9piDi5pHRj}!7=uqj$IBlBD20E`CJU{eTbY$ z{xgvSP#1$R9ew(r3qOOve+4B+{_^siGfRrzqZ`YAZu`_loPHVWLu$hg)tY-4|tC z{Kev9L@$qVXnekg_U4yymB=AzD1sXfnJO>s7gIUl0Ynv@J7@k~E$H}Tl*0xA@eppB zQS5S__I0{%6sQj>55zq~Cy9z(7HM!s3N89{W!o^+qzFqS3t&ES+@A(OQ_E{7)5^&L zx)Vb&=2Z7Rnr4@b60m2WJj-ZRqx;SN}LTWu%!5*QZrKP38VtGzK^5pdoh+m8lCTKeyoK$L;qp}Eh=-t+& zcO5Y@^asCy7VC@1w0xH0h6o_l@{KuI^&u`7S4wutII=lgncp?`PUz<>lQ4sM_saZ? z$IqGg$HWVW{xLkIU~F{i>f686@fQ?tfs=xEk?U#+Ge?nRIPl$aulk*SzLC4QQUF4V z9R%1`l0t|My}2dWQ6#G;Y1Gj4jkV|0%_#O99G`F1weK*5xtdA6m4H)4E>Sce99H+_ zs0Li5duWr287&ui%?YPliOy$t1Xr2@5$2KZia7(5U9-MLzC#?#wBik_pL^C@P=Flz zeI$Mj8f4Nx6d)H*ntz4Kb>|_rGM?-kjQt!6h`+vK05Aq_y|Lko|zx*qzz2~1_wSxr=@EhPS1*Y5J?&XvGrx~RhwmCl;}npL446KK57|{cpt|U!^Z?!{@cv3 z=NM7x1bZEuGX5J7h@$7Nv;P_+I~b!Dh34Oq2g)5Tp!dfZ{f$^%9-Ihp;#`T&gv>wN zIDxF5$~-3lY+cmfBpK&I81DX{LJS5C=?Sy;a^IayLfPG)#n%@V;gHsk?fNd6AWSpL z5(5DxA}JnGd;|VVE$unh9j^G*nsiMt<9dTATu6;NufBE2gPJD|D94qsIrmTc+Z*5?>yS#o~p&U}Q){r{scK$SQNpNbjV=bpfe3L<52gUFWh;qCI!l^qzUq`ge zH@9TiK7|B$CQT{hOc-tK{+HirdlwOP?xX^J>@9&()yw0E4^wBBP=(SGz?OkjER1O9 z_++gHXdW6LIPp5eva1tMi+p?%iliip2Ytqh03QsII&0pV?kz%V?F5Ck-OBf}HsBR0 z3?|;boWxrVz{E|o3tuk)V<5Y?8@9YZsJZpb(Xk)xNkU${CB%lrX68*DT zrND%|%@+Ol&ntg~7YQ9Whr^7O5{4jySk`M`MDd4)@DyMspAZWMHH$8%$n2U>F$AsHyQFz3nA{wjlm^y_&cgm z?9C`^L?As9SB$GwBhBqjJMY{=AYTas@TYTT@a^9;HpPce7}1Vz!gseo!%3JQaC}Hy zw9+ls3Q?*Gi0(wDHTAYd_E*0GWH$`dH_4yV^^eI(5p*_tiU3zqs^0i@zIGxm&JT%_ zwVO+YnRVbdAbWlV83`55@@TM@T-3A0>A}1a0U*%Yl+o@#AnuxzW05$4v<{KnsBwi z;qE3ZDOxDh>549Nd!~e7r)P$0j+EhOm%fLuLR*PfbFdzqk%mZTaS^Bobs3ntp}E%E ze@58fagBclm~uE#6>~7c6PkDs3#{t+*?Pag6a|yYxA?ae=It=uvL(KNyhW!8D4#80 zemNXL;syGvX?teL89>}`jgoKRa&8-D6$1YmRRJM9iI9D+<qYCd@&KL5-ZEI5My{*0q0Gqis=p@ z%~vMqIu6IqK@`s8K^&-xkYBmit_Vm`7D9)Jlut$ZqybVt;;SJ$xYis7fHdP~IN?JN z$M$J}mh)_hPQaHPY@D9H4#H*RZ?_aj4)&-2#31UJ9(KEubM2K8SFp;*#P`$ClNvZP z-XwRTzyMOTJjM%w9;zofvi5ENnh(kmJ3t=?9b}*J=#GK;jg<@HV(hgoDOnY3?~^`HI|%;3$qJu>cFZc85tWJuVro&6w*^DKBT}EghPickHfZQquc2+ zuZyFL)EEa=Ll#m2zk9SHT4S&sq{)I{6KH=X3nQ6lKbh%CBi1Y$hy7b2LaYPN>LVby z{41iDKt*=fDeYh1_?^FSrfd~ASzA0rPTlyF#w_Z1CJa_f%TrF=>r0&RF~)Cb+X;}u zDHJmZP-y`pO@zK#c{UU!y24FuCmp_BEo!ae&T7Brw!Yj|a8CIda>rT)Zfnq^NBWTL zhXH+A(4+_fuTVGj`w0NHF9sV?{OVzQli=g{0cB*MYX0f@Nk~4%p~7f{v!{<|L49_! z4W4U=<@&E2gw-Cl=Nv}1^s*}P_0a0?`+qH-f3~zAF+v3w2{9#Mv0HkkUbUa|@Q@DA z6Eo{XEw4MmK}W_5czWfD>@zYeTt^GqGHAxfsP=oj;KUp*~56ys2px&&G`J_ij+_kg4-bSnXq3|CUHqIx;z~ z9vBAhttBW0D3L;ngWyge&i&~RsM(s zdByp=bQ2yR{0FKVIGXuqo9}G++YB%XwLCj>`(#L=|NrU_cI|+hP^sBLA8z?f@C7my zGHaP?XyXKGu0yTB8lvs`cep&e?0f#%XB*F84&mdK4ynzXEk8S^9_dWxm51Ph9%@KJ|1@_otLmg3s)Pj(bdqPr)E z+7y$Bl?vX{%eQi0cT?WMKRe5h&rczlzvYz~O4kAR_Xy*9cqHbJfcEQupB{#Lj2$wZ z;-HuTPg&t2+mPX{M2d^QK7)ReJ_6IqKZudm}J@(!p^^$PhFK_nvUk%BiPHE0XP#oxYnS9vOmGL^S}1F>lls3bXa z=1;lo&)bYtMPD448t6s&@`oYJ9$n??-TbdF-$x6+SowjqDCJ`W{3XdOw&h=6;nwpg zA^1!GH$t5cy2D4j*1IXc=w}K61MU78NpFr8a8LZFKl$U<-D}Zs%;d|3|NAed(F7u9eL6*vt^_#4S3RB#vy!3wuHV8*DQamw*Zb=k zMZ=X<8eZeep$CJn{`ECpg9+qq{_eMj=MaH=B;Nd3{;z+G4RvC+x!h`}jD&2ci?Pkk zyOG$4;JXk-4XE!2 zNI>Qfrs9&d1QJ1_@8@#nz62lj(E7nvNZ#BY*pAe{0)?_$2p#2D{P*VEqY-_I87Db-_E37oap~47H&U8Vsoai_x<-60Dk=a&3mM0UycJ zO&FbtVFp6B=`77fxvQXlo&yd+Yv@_)3Y&|K3LDSL2+*e z&yWR8uXf-MGsf62KCL5qo=1;Ni9f!1P-!fF2=HPg!mT9Ir*p+K*3Q&oT&N-;i z-W7Pl$tc>uXifqkzz+O=HGovpD-?10&k6Vb2<$n`Y)ij|jA*p1w4Q#)NV9gbDt_w) zWAWEuA%_(I2iwEaW>Nc#_!ocV+JXq+eRq97OGvZx>X&Rn%y742AcboqF6nr*&Y|)r zd2?{y0(-UE=Sh~bi0z;6DMcNP;;aa* zPJLYde3%`_p#A96Ibu=Ov&qb=!kc1)onH#(S9KGe=JMwW<1T&~p;eB|t2F#XWst3| zW;14)HhqC~*bq27zIm>|^Rz>lDxkCvlGKexzy~c85cqwXgY@|`wQ|6rp3J5zp=Cw* z{}}L5`CZoEGv-XNOg>Kt;+#o`wp8|KBv6M|nhROCeF;6jra3?>nMO6y>2sHE#-Lv3 z1%GC90LOem~5XeiyXsTA1=_jUBL#4ZT@o?ff$#a!ehMfVt5-`e1_6~-{B-! z8DWjJ#J{3sS8VM^o<-`Cb0>DYn|X-j^5RYQ1NH@z&XrJf8Na#+NqNVu*}rYFAIo+s ze%SCpK_W1G#(6O+KnBQOt7hJX;7Iyq6`i;MZCz80wNd=*hvYPlx8K3h@r9Jo0h2fL z&>?CCz<&7aDhvMQa7~OCh-Kb$tHd(kzb%43QXx>6U$s22!(5U zJqe@s21HGHeH>|hUQ*}5jf8)FHD(lN%PfAoql<;TLp@_sC0lw!IAG!@nz?}x*cD6W zv4aZkIeCk5KUaB-;0^Njmrk*7pGt`q3RMF}I0i0eKd>unGFcfGT6_AsHR{GA5ax!A z-@#!iP1i6j+g0$Nc_qW*QqO$=7~jAjtxEk$k#PKo$?i$;CJjnI{1z4hV&F|4+|W{B zunFFz0UkHgm!_3E{xwJ30(;E@483m1aeQ+P&8H00rc7vb9Bpmqt~yp8?(kaJP#vTx?QRd4Tmh=jQyng;=Dc;p0UNIPNA-ayZKnt zsyHx#mjOKt^Cc%62qXG~{lNk+U%^(6Vg1)TrurR|fyrt;Zw#jsQK$I(h-{F4vc2|+-sJ;y_NJ#hz z;`Qhw$^kNJuyOF=MIT>xK!dc;4l^<&e5ofIY>T}VuLCRKht|8(d0Jt9brzng%-Ibb zXDadHWWAz7QBaMZTsFDT2x2~={ihovX0`5HC-Rh7hG*ral%KP<0zz0sj&Drzqpah%K@8SRu3|fC@Ax@VB12+$JxY^Q%KRd8KWnCj+I$v1C!|A2kbiuanyE3j)3LZ z!RZPnwHA5ff{1$?;9VLeS4O4V|h6SDd=R6P*D$Vn+^`+#zRbA^VA^R+JW`#fQ8+Pq^wX;KjFt`r&B&c0jCJtBxKJO3|7z`k{EV z<6U|r(o*f;Kvq@GxjkSILZ=ChyGc#hI<9+gNDD5Ry1U+2e}ItXQheYwpMSgnlGKc3 zxbLL%v?w(jfRV*S+4paDITNW@?`jPtX=PxYo1YJZr);ZjlkVU~#U8rbg|m&?p3=xP zDNhmdsB>w@MWVVtK*!VbDp6|-a7?iImp<9>Zw>gEG4d8;%ke2nLMlIs*I!D+WcT0} zN#+y!JfSfGejE8QHH&vX6=|=C##V>Y5bko_O88t0Cd6OGt^-v_wq$kHPN<5}GG8A= zR<>K_%nN8Ae;*Hv9&B`8$iwRF=4e{&3*+kKqoTrdV?}^`#oUCI`?!aSK)Y4-4yVY> zl^NzKaLu;v09KOy0%R^BYo&}m<0XM$0g?DuKxae=ajDa1r^~a%*2kSi9#=5V|MIquiy6Rb~*gBn>q zmQ7=^={jd2ha7zw;(!cCK&IuVna_ zZ0?B)QpLO(I@kl|#d0BHE{+b5IENzLhPStHzTK5_{_)2(lk1JIuFKe`mJF&}-Gp{* zk2H^S)N-7if$MpYbJ`6RvNIyeK^VAKSv-*kxc*9Fr@z)oHq7^sS)+_VDP$ko5 zScN`mxIJgOi0d#8VCS5~_c5iI>cwxtmc+P9%^nloM;*G|rCah<2P(6~>R#1n$_6H* z9?FnKalWNL38Pk6`b_O>uA7y|@na=bj?t`&`R~Y&0}HvPclU40O2Zl5g2Nts>}9j$ zyE>MRCraTLmM`_l6ZvN~)dhI;s6Mj{Asrmj<$oT@Q$HmChcx}aW>M1qE|g^ot2WB3 zDqrb&V+;=T*OVqWp3Bw^a_yhpa0e)R&Co>foR75AfZf>UP$25Ykq=;$7j~zx_Gn)p z_A;Up;inY?yCM7bbgdC1BwRz~0P-pdQNK8Zv?V=(V8>HJ-1fnrg(ZDZMdAXtK5D3E zD$Wi1e9nfEvmZ&xIN}<3fAY^GsFo`>DM7>yMd0!^QU`6b2zo)}Kyh zHmGU0Kun&{vLpU2Nw$j?G+b=fiwZ`&H>I(~HpzY_=8HRxIMO zM=m>V9!On3bX1+{STvY{sUBU-*Lugf64m`w>t#j#mMYqfb#Ia~?ICw@D*3wuHre9o z$YF!1up!BkWzhaLsIp<7JQ`i|{(|2MQLp@hdB)6Ys8KvI$TBuI$jJ4$cIKzcXL{~N z_9}rDyG|gB%lgRjW$sb_8PU`cZAP;+_pU&7$_))wZm&_#l#WsOC+>@OKR?+0Zf`P} zf4sXKa*N2%peJV5=|+cIl%J!n|4{B_g**aHLR1q}Vy|iwMIGlSm_8*|et=zU*C*2w z^@Zwm*NbY}FTd^QH&T+P3PlGs0n6)P=lhIj1h97UFvL9N=zjF2+LbKSQwDSa&6kw{ zmV{ZdMXz$v888uIe$(h>>Qt%KfkJCY7fbv(;GS ztH1NB(p~I{{B{Oyi4NHOhpdVkM;6n`U7^t8O%YXvlf&dU1i%~538NjFE`IdGK4xSO zlS0I9s%3uKO}Mwm!%o_csM0s8Xk2V?usMi-eaRm3@YmC{QUS>9cI!q}XgOs7_vToB zKb${OT`y<_o>6IVV#eVc!gxmE-up-7yJ)`OD}08hQmFdte`eZH3HD>l*C=s9#`ep_4`{E32dbE+fjCR>Nb)?`o?JmpQM-voI%s2EY6jG%m6p zxT>n1i3bu_&$;YxKG@F-QJK2nEbmG~}hMo9+0P7GR8Y^fiDhQ{jb+Ui?FdqZsL3JC(c4g5FN-g6_S%FBi6om z$JBdjS>rOJSvLGZ=op^2`lJfPyHs1$@_~2K?Hs&y3wZ@2>I8NNc@eg$fRdc){o)LD zdkR~a2k%ll*L`&Qg*KQ|d5+JDcR0t(RE0INALv7L;{G^=kgufK zj@+6HjHPX*+|ylQONGwRPW2qG*HVa>1{bVyZd|+~KHC-ec=W9^4Yjm;RGreH1lYXH z_dhh#g0NOzD_>`!Tv+8uS&`x~rgwPbi_L@?&s43UyJY}Lm7VO4}QTj9{(JD^v7@>u6q^#|a|e!DuFt26U^5a(Zf(C0#jezg~p`TO0f z{VZ5^PT7D}*Mg)@+wlI}uQoC~%Zk9Rfj-y1P+7@MT~k~d3r%-DG{B}|+dg9AFl;`- z;&9NThxzLH86C3UUW=wD*z&y{;&rBY;Wt(ivUn|I>38D9SG@k-Rhq-%Tc;enqf;F} z&}~Ordd}mqQIRjOMd#1)qmq<*&N#&Afgm?Ejf)~O9OG7zoUe_ z1yPbs?VXUUPJUFe207Ssc$23R3(P5 z8#MUT-@a^~Ub6gAj{8l0kWv>Nd7mAyf3|cnI&QA7ly~RZ(Q&#%{QqN1dLdvM1k{bw zUk}jp=omp|aQh?eF6G!D5Z;!W_1#qEKCEMSxDI+)A}{V9zYSOk8#qn|+ygUW{^5;NE-}6R~%+mCZz1-G~=s+7#VH3|3*s5ZD*K$4(KIp)4d^n|4#PSVzdXHQf zpB&WMQ%Zf;m@%WV_NFAAovJZ=jS}x5fDrbH4TYBj3!=}>OZPAkhxlpRl}i~i?#kXY z$aT})I@Jy$K^_A(7JQ4h8as6!I%;JO_L3JR9zW!tw(!1NK%3t&12W`@=Z#)HF0-qV z`i7d(~JhUZqc&meO)xfv^{Ss46~{C#Nu@OIrisWS;5fXrbA zE81Cpe;h>Jl-WSnt?HvEGFFtE%V=2oYn%Z@yH+Cm=4O>0ox)0H!WHWlz2uLoqVH(% zGw4v$6|)j`;??}?{N<+rAZP>P!Gkejkd+IAr=RD5N!}^_lDk*M@B!>irg%94D*2U* zYMkc}?Ztadd9wOHTbRcm+CjYGEP)UcL8I!(r{+(c1D_d5lid7Q=ATN5k<(*dT`k_& z24}*qU-{mohu=_ZZ4U>(JuflClT~j8-d1HehIis(I@-2MH&Hius$G05GxRDAJSWhj!jy&J50cc#4qu)N4Z<^u z*8!75RDsjU;$%{k2@hs@VfPLOyF|*8Mh)cjAcYgp4zaub6Ck zS$RS%=_MUd5#B%xTcG*a!G7<17gSFkY4saJOkN}*Xm&%uz}W2;ajn=3cz#uL_9we{ zOl=1ZI9Q};_V21`)IctM$YZ3~4mKo6ccu1YSQnMy00VT+P{fWaK$sXU*-^+8q6SSc zhxWT30vJQiv8bw1B$K_$ZI`%U-KrQd3UE$H3A1;}ZSokRTIcqeE`QtV!eY#E-xdy*`;at$N-pU5E$(#w)aAs;pbv+< z4qgL3O(wP4@Y##}sueOl$9xel3?RHvBV5p*T9^O?yUQLHqy*#LuYu|qw>|zK-}=Vk z%>=}g!YTEE@8vcgDe-2mGd-R{NR5hwr^SwVIpxHlZ(Fl&)l31vDCG5JpbQAe_@g#y z&WpF{dA_xoy(-<8673hEI7b!~12^9*Y2MhJ_|gCtjBtEG6F4Cc(dPuIm~h8NRr^a} zU5C7ESKl%-Bd1*m(VHH8fn6oiP?KkQH20nPebpV8^vPCRFR{Bo`GtIbiWgDE87Zm- zhpj;!pqb#$IGe&E+Keic6yS^Xn|3; zoFpxNxOR{XIT1-#!MjAFrq4tSDnzDJ9frhR{f|PhH-?23Q@zOxIxe#fc6AD;&uSC5 z0;$4!UXX6a3CL&)4Ry3b%4hgGl^kl-#}Nw&Oj1O3WdrRYws0I0;GGkRQaL)nR@L|13^p?5S?I9jFe=gO4tzxM~edM(O(==Xp7 zNV|Dk)=2H`jFj3;*CClfNCTEM>9NY+N@+4))c7}_=NlSj6DJ$ zZOgci*%AcQs1YsC#m~rs5;1up*FpOrb)XT_)Jk&5OfR{w0E}xZd3bdw#e{e1dwUiy zP+p58fMYHhGMHYZ|hZS(TMOj#gE1f*Troq zQ_VZ3>jX!gv@heT9wrJkYUW2|{P?L>REy=zQ)-Q4>BQ_(mc9G~hiwkQ32L8#&1YIuJ)cnccgZ

y@3Lw@in{tGVC{6J0r`=1}A z><7%tLC+=l%b!em(+Mfxk=n3R9FYM>Yhxe4ONK)P)0T_v;oM&2dGS7dpmsBPQ*fvuVEZ_E=*jaP zhfiS&IUe?v3AUN_Y5BOo0d*FO5c_)6sZx;;r)PIjBp{Fb3U(58R4cwh%?ydKy15e^ z4^FEYG``k@VOxvD$i#E|O+50T2LwR|^L}A>a(UmgQ9ND*0P7IeP5n*7okN-!8ln-R zyxWO7lA=X-`_ABQ#=2_x3iBR)x0^+JTc9wbSNV=>-!Z6XRg;H$gIF+3|lUd-HIr_wIeXNwGD^)FhF4E=gsc%8)U3 zWA{TkQ0 z*S+q0*+Tfg;<896h1bjYS#N;~4AGusslVfkWr$)3s5ysM7~(4R;!~Y0g8sG0>BI;N z0Av(++|rk2OO?XH9&yPmPR`*QjvaO5?u1klyzV$yo!RgK1!&{*&?l{pk z5T-ORk6&&ry<_t6Y9pVfFzDR~5t_>>0(30LW#_I-Gll?_S}fH*yhQUcTlm_%bS0-b z`}q(nI*^#k*`ZQueHGHk6H6V=Y%TfiH>?J0eJ;lC!G2bYVEF8*`0->Fs1fZ74+Z#) z0l%EgAfLF>0e356YB%1M4`l0iXm&1j?x?y+sd6#1l3=j?{KhBEi}cvhB`6v`JQeCG z3cU|;6yC)8%y{u4$0#qN!H9z0sZ)upC&>UHr z6wa+p>3YuvB+)V7WFAR5V6J5tM|kgW!Q9Ju6N%5~s2B~Oc*#IFXv?+u&+ZHfZy0O- zT_$(8|l-m7O#rq?Du-~^T(H} zs+)B**7|3SYe^Al-SfTuULN%o+Ktx*SG^&((4?VV3(RqE@#WUZZ8(TYfd<-f)t>Zs zyf3*~A1C?p1M-?C{1v>v^;dY^_14UDOqU0G4&WTyEfwD-Nmm~M8$iFzX|aJx+un_* z=lX22ZRd_2U-ocEA~U}7Ef7<%7vF3uQ|_yIe9`C5~7lT;h&E@N6 z=8j{+dXkx7yv9{={)WzgB-RY`=zGnvbe&enguih{u73f zbkxEY=Nno`vhnAXOiu~*Jc-$f%{6#MxYMqD3ClL8;<2lEtyLWRonX2OMUGSj7Nq(_ z&H#3|4X8O}h7nqw4(i3}=y9A+n8*apdY!rkQ+I3&sxtO2h4bis?bexuH=J@~e@u0| zmYit!t-T&>gSfbhcdHlsLj@vrB;n=<(e_vEv+*v6e>f4o>b(A#`yo7bJI=FR=kh`( zgs%fi5xm>CW9wV)Cg!~dwD4OjRq>#4Nc008YmU#U&3X_wq9Txm`-w`3Jf`j@o3Pu! zbV@JWPwB+%-Mki2NJT_kQo|s+Efzfdi2LC~+jH`PL^UZhhDhB=V#~N06#2ixO$wqB zWmMkR+w4MF>Rio39d zXj2O`3Mv(xDagD|??AFAputJ<@q+834N7btI4B!i^;GxGQ`mrtmqf>pPR;)|JHLJ>kJt?(^5s`L9I1zW&bh{qLJnb@Ni*nkj&!zG z-RSR7PQnRA)$~*RKYrV3&%gv(>5)5ctmv}eQWf$)JfdS|`ru9K-(PNu_>+-kp%q&w zQCnhnR|pmBmHE3_xn3r%zB+_;vTZRj{A+o5v?7`QqP`0`zvb`zGIhJI9F>)F^{ecP z%K<#`I#-?B-_MYOU?7WEclCbXN}G?u)wrwMV-f1K)@COr3!cu|a3xO#KEJUk98&Fs z(F>UuZd}=1l-e8?Q4o+qf-!$_bE~Q&+n4H?TC+8mr!^wb(PXnh`ZKw8Q_d)1fry(& ze;obz+g@1JELa|cvwe{Cve5VWxU<~A5TilB+2?BEFL~4Wh+Rl028rGSiM$&6G_(}W z2J+zLC6KX>y4w%YA6s-#H!oX;U*4>z;0s<-e`^KTx^5sJ1sTM;JF?L7!5xp%m%}o>XK*9)-5ZzC-Uw!wY)3@qkJx?$2VU#uw`;efnR~Im#r@S3_ zO$j=Jt$@046}s$p=?>qXLF#Yn4`fZi5ETZnu)iOyxr?A$QMLqkJ)PiV(YRk# zQ5QNPShe<}^4KbqMBpRY-`ekO^LPv|OG*$g{Lh5g1g1fI2&&{#m$gHgrVE*JTZU56 zM_HFdB5>dhy#OOY{T{%}>&fv~95tXL6~M#m@L=S8H-wb7V>6K*=jTqS8@L_(B5)vh z;XUBlF(Eq<7xFYLEaUSLo7jARonn7(&p!Z%jC-ZtJ@^H_A z5~wAd&3VF^;R+dC&YKP>`_NmdgG|4AM}*S3UIDGJA3oP5>F@7HyaopaTwwcpX3+s$ zDq?>v2x{o3Kvzb}8V||GFOVuliMo_TeSsxz4Ndg7KtZ7ecmyx53A45W+c~(BMi)J= zDI&samq%4>v4q)jl2o9j(43xE2Yo)2?xwL}obgHb_%n1I4-U)ki@g=d=9&z-S0nNy zUx9|~-a(M4e+{l2)P2mkZS_DT6+O6z>#9d6m!=MMj!lC3-V0EWZ9-Hu1ab?T{iiJc z#(BNK*~U}EbiRpLNx|;4{ma)pfDBpOZJQ#H|L>FfuHVjbd={dJxs9E=V?%c*^Z2g|4O!0Ss6KYQS$$eQw^Rx#NprVJr^J zBf9U$3U*!FS#^HkCNHQCiPi}zLy5*X=UJ!DX}U&qPhw_Zb$B^p*29iS#@1BH>M?G{ z$F^)+GBgYa3;-ZI(7GFcoB7=-3jKO7Ooz_$?}@Ii6| z2rc<#RRobtb36VrV+3kI@fTlr>@f}3r<{u7CO|4k2NmJ+o)^du<+;FJRI6ypxP!FT zK0J<+pGJM3CGgIlvq3iV=4U|_j0^M#9{&j(xo*JBO)$6EMUa3&x0>v6Q`mAgo=H(i zxZzg$IO_`o#xTe+%BI@@yPbq*e)08v)Se&G+3%1FTnYB&8Js%hzE=yVkb~5@R{$aV zd;Vo%!H6WP+`kDCAVUsbju|BTpnJ*wE zh`XUIwsiem_Rz#q%iWNvQutge#6O56b|g?=4;n${Qy{CW;+zg5lJ!uI{V|n>C$V7P zrIBkODhxuHpG7-nf}UEf&3_3v$aJYx8jkJ0DJPeqr{_MuQe{_;%Y}UysgsG+FxrC@ z7g$8>CNbjUXVT5&OaP%ShE}-JailQ-L)B}ysKVQvFYX^pg5hL8ZwXl61TFrv>@i-5usX13A>`}d9fkDn$~VQZ_c2JN32!?eG> zJgOuxh;yg3)};?OJ2w2R1J?I7M5Qo6TGwDOR!Ew_Y0v&g;B8iheiahY|T^EZy0?di{= z_HQf!v1<~bjlDIp1NLsth3^FmVXixH-m3-E6OiBD!nCqC2AiiV1opK7%o$`JTolG- zZU-Hq<a_OmkJ21&a5<^Ern5Ik?qPD z{_$lniqjcBT(&%+-F7DJ4qR;I4KkzAcm2srX)b&+B&QB+IWRe(8ZLDe!_RUQQ^pZO zOW%VFnFWP`G$i~2ppn%;4X#OLAr7us90vto?NDyWseo|yMol29I~kU8 z{uO;~iEMzoZ;u3-*xm4|N-d(Tx>!%gMlLghri)?kOaWUDSJh z{6Q&1bg|mdgA|+n2||VM&@}E4DuS%*Keo!PAdzcuGEY3o<6J;SOqcT8!BlzWa-zhO zrp#|bmCu!-c<#GPW~yRV`4H`uZ8Fl>Sdhx5QJ;&Qr*}0?1j=zYa>b3ZD)8y)+#uWI zRT4fgj=`K)bf2-NAMiPc}3rnD;uUldj`3lG#Iahr5r_ySJ zYz+1pgFnc#jJg74me(;Ee+ud8CNN^HT3%rfH&l&+Yk2wm`tvjQu>^(c{rj+t-+(h3 zwT_@mxr;RB0!V*)!L>B<7ppJ=Em5 z0>$OtaeMbT$3dTX{s1WvTh+5b!A%%V2c3djI&qUWFJHQf)L~}QJ;P!T>=QLamVCl# zQz>HPAlshv^3r`apey+@1OyKrfSC{EhMA8*Ghcyb-a)1GNmBR3X#yQ4c6z9_$hWk9II)QWj4`!~91|xmn@wc@HxisjSQX@%U90rV&>J$`#q&E2el&2Xc+oRSlb=fEsY7>uC%#a=` zNCVaKWL`<}CHL}r5h>zSkm;Gc53qQwQ6iJ;1~pMFf-Nfl#`~k{f5<27$Hld`S|&Xe z#OzOLF4Y;fAPj?6Q|GjxE1le!Lm+7- z{;EaGO2&f_Pc=-oIYH9sm^g6&s=|vyV9Z?%5+#q8v=^2^Shg%MvPSwS;t-LymPWd- zdu6JySgM5Oj%vj<1FgM1M!Um94q!fMO~9OMeT42Kyh ziJb<^MQNi@=)eD@l&k-;6At_980B=!N8Jn@sx-ILdjodx9L4anf1sfMwA(2b6r18Z zu0q4>Bv5Vko)C<$`tuM@U5j-6 zZotE`ZATiaQ^$8X)hr12z??YXVyXMvH1-u_3VceM+LE3*}yNC^kc#)+T9Ybk&IoQpLl7K z4atg|edA4-0M6Y@4d<5`uWk>Nk?!z!otDe~!<9k4XJU^w$!P)VTSo-U1A!5$c9Y*Q zl9kTJ_g1)-0V5BtSU_XD8RBn!(i`o9d*74xrseh&8>}6BQSvC(1j3ji2(CoRb}E_wzus2PvWT)fUZS zH+Ay!Pt6~&LaErWIUj$5BR(mC6I)3WtxK_#^i9LI&Fm4_I6uN};!4oC{bgs)KN6b1|2O^*DBrH$m*yuUE>Z+kh5FQpyg4}7a)FHK zxCGO&k0@}nvysHcP6oT*0&aTYQvA2Y2CjO}2a8-}k3^9Q%AxPm6F|#0->~W7F775u zQn-J&iDD+9qE?+Af*ddpM8=xl!@cnAUI$il346y7yLJg{Bd~k#VTxUm0&qUi-Jffz zzNd5OIOH7&OHVj3c?M)WGC@+;ZsD2%jRtl961rfD6HqgPm#Oz}zt zr`M?1^zUV*KB?A0r~eK@*C{tT|3lX>nl?U~q4H@OgoZB_@%e>d*+>LnTY{ zlm_ugf7d0rU%;cR{8F)H6!@sV{EWo2+OND10CEt-^iV?Nzi)OERRAToH5tmzVHfln zg*-*nj(k0+Nxmyh7z};0Dc5N_G$jDn(==i;D4gKJbyIEnK5yD}CU5~o#C>e?&QP<;Yb@3N$h`I%gaST;`<#gqjod1Mg^<+1X?ZcF z1@h?l-hi*z{Lzi|9~+8sBRnNtHPnuzj}$eQF41TSw7*pdwF`O*1lUNpO9};g-T2GqF#ogM~Z=NF?>GuV$HkE$cg_JdvK) zDs3NC`HyAdCC8y{#i!v^z#ruY3CwU(2mZguV{EkIM+rXqD+_vwzUSS(3<84{bMVc} zx5N_eaCr4r*||FBVt!|UUQuAA8#vij$^hkm6n1qHWIJr#JR?MNk`p*5ln_M;SX`m_=|i6k zrEA0uit6^pNh`NZQohgBkL>0)6&l34s`&}7rDvT6*Vsb>4a21aC-P0RBotYh;?@Tk zRPdd5VJRL&wD`{>mvTk_9Gt~7$Jgmt_~)wQ#vG&*C$&L6?hPBo`Z{?WON=VLQEZ-; zkrDtaSu52Yo3qL-uqpKeNW~M+RqwI&%~^7gPdwEOA}Z#X&oZ(?bx)?KV%ch`I@yI{ zE(eZQ%r>3DkqSV6*LNw#^}Ut>bFiVxwTrE;=%&~`syTu08JjzRT|@p7jj4b}nHlhAe`a2(6omFRYS(F|6F?CqVa7J8{lOaC zf*d;mM|!4@)B%yBWoA>-2`gAa`kLA76-M}b*9NTDifYs`YNls~@57P#<~x3L4BQg$ zyh~Myo8sK_#wyVG2JoQoK>}BvUDGV-+w0k}GI%3xSj+xbfhHI zro(lFa)N>#tRf_1?Ko#-_;?H=WWSIv*J+&txUKW4u-Wfre6InNK6ASXk|yiraLZ&& z7sa4FOGMl}#9q|jO2M4?^F?;W0svwc9=@u=qf8F98{EJyv0~>B7aQt;$a9Zdxcxk~t4Es(fy$4TI3|R7lr)vWEd9w|a z4A2Or)u_W7j?vAMPz5C8byRK46c7M1Ns~icX6p^DKMGJ&gA`_5l>dTkhwJKW+6sb@ zksQViOQ+NpxTfNds#mOi0m^xQq$9ynDim!75uwh6y0KS}1>eHbPsTv{9zdZ|FjQAXB$gqNu7=Sv zY8Fy^p(00XU(_MxB?c+M4M3d~Nwe}E;a$eCG+G)y7iqLt2@o=7KR{Z44g@$@qdcVn zQLF+}yO!e6?(4xytK*&@ZCK)<4HxxkTKn;okao(lp)}Tkn@2N(=QAfS7~6sIN)$f9 zd=6#Hm5avbj{i_u+@ndNO`X#kSa@I_dG@4sn)rC@+#0`cF{XV1wgr{-(Lzw4JMjX_ zqVITaekw@GII1ipjWyG_e+dO>0>|qDri|lL%FoG%4Hq$D2=+&$ zA!K^((lMK2qXznhtG7<)4m4jZ?bZ-mwNHe2Z5D4=2z{^?1%wYJm>|^PmO858kvxrP zl^^eBndyA_bQH31`|PfoxVGuD87whU*N#GP&9BImH??a{KlMRM<(|7omT&u224vI* z`x(3aWFZ8fkoEstRqY?)gsL}$6SY;5kw9tjGLK+0WQ=vJ^LKwU;$m?=FaCj_4g-K5 zQ|U@!HME$E<^s1qchTRUQ|r0*aG&wL71Xge9}L2Ny*!$aWsHIxnLc~UhswGNb5&Wx zVS{lPtGkRlO3l3tcpZW%ULdx@t5G3N{pUtCbI#-q+Rha&*EKAHq_bu|med6tI|-G9-@Pl1YU zb@{ZHSO7#?wtlxNmu?96KiFB5Nu|tn9Xa&95L0`Tnf?(4!sKk={@t z;^{yJ)WPcdM+Oulrdw@vzPAtDN?zm$(rV{N)c$Q-`Cyc4nR`C?X5~oI;ZR7 z6nR?ri?7<~g44RLOkmx+XP@A{~?d7_82H8P?^)!`AQd%dUScT*I z8>bID1rQ~netj2ft)VYtv>PYmDktedjb;60p7hl7uKCFmlJv)AC!e+3a)@a3veMC! z<+c@dt0FWL+8|c}avSV>#94z(ZRSMdP4JV!eQl`O2p^c3r|RhSnl@vH`hegyJTsV| zCru~l0Yk*QMRgnM9XN&U1dH?MH%*g$c`VIRC44V|m8t$>!~4})Ho6bU0z{uC8iBu2 z?5asCiQ696FyqaWZu)4Jv3HHfkwuOUc!r|Y?{K-XQ;I-yy*5Sbm43Ma z=3;yGi|p9wR>H@-bhp}4hVUKFcbF{m2F6VlbJ~p`QGFmg%0gh`K#ZY4cesX@&W$|& z2S)q%|NfHKUOkrnlWRGA{6jz!X8XupsGepY*-uRFTmHfWhRL^Ig1xQ!ZUO2!wGY<; zOsj4J8{D!L55okEICUTN<@;tlSF(f7(L(5oIK)k?(>#_7jn;?AE-lWlV+XvTL*f&X z13gss;fWL_etPJUClkJFNLOuX#QD7$Ser!7HVHRFAapQVD&gd-6WAv$&f?TNt}HSg z^=}o#G*&>F!%h7Vy_)Ia<0ep3s9XmITTL9+T_>uYTjFW{>I4UhMY5A$PG!4-fg#8W+ zRu+-oO=)KDUgWg#7vEDK$#j$y&eqhDmwY*`I*|{lv7lB+z^K+9bu5sNUte{uv=fI? z&SVo(OLxdtPg71p(XqobB?30x|Ee^eVddxD(4I=or zh0sG+r9F+G4(h&)y7;RL#=NFRL7`1Akc&>PiVM2*F9`54BrsoMrW4gvK@Qc363lMcgcXwmVV>YwJr`NuVltd zXRT!NI+K7tV1~;944cK6DEqa8w=QGtatC!2`@QksDu6(kdb7vak4KLI4^^v+_-W>H zUtkM&&AAm-NeLicS%!TCeijnix7f$>ML)_7a_~ayuRbDoutF(p3#X7z&MXpoT$lxs z!nlkp8f#TLG908K?5otG$|dV949#$d{Mf$+5{_M{=@V&#E=YKk0jrzExw~|>oVNFJ zabY(UQmJ+i72Oq!HHlIAhAl~75TY|3pMYX&T(3Xb&!eKwcAjUsQOCuf zl4N~{a*(DAyAtduxo!EpWabv82dv7{pP1ERdk`UaR?Fa?|N*lz} zKfk!UxBY65QGE`h5t91yO);uu z;6*Gm?7{og)cxRhWIB??w0&)12=$K`!dOUFv^Gj(LDYn46JG>wR70Jfen~t9N3LwUC+;)gw*wWv-`I-OZ<0mE`lX)%T z(|w(TK(%j9^(h+%57*xh(10A2`Q08mxorN+EdgF6)Pw6kbC*BTv0}kY%e?5QI4}>L zRnII%W*%t$jWMb6qLK9LX^i@<0|EglP_gP*ZF%A))L+Rb@BdFu=3lE;^#=OjNZtBl zn-~%C8tC=0FZ}#|pSF>~OtB<1Uf8@k7?6euXU%33+?E%YC_@1L)QRoeHvN?r8%hz$ zgxP-oUDx5eaIOxef}56hLk^5>fy-?tvn^lo*Ned@YoptR(!Y1pmq{=n<*W-c`M=jv z(njPY+8>-hHYo{t)Sw4nTzJg&+u>(7LIbk5Y0Gv&60`&VOCk9r4A_nu?#=Ld2%^JK z8hvH{?R)*HjaaU$x7ldN6zTkZDhscm+B8U;-+Y^g2s}+a74xG_Gri5@3C#cX+Ba|i z_1nCktY&T7w!c$eMp6R-P9u`=B~GR9DmHuTVvq{?KrdC!Z!LbV9fwt}U3cz5+a?;K zsxsn~wH<5j`Df49Ux$nwD!%3KySe!_;*o7BbsUfEZ~uxt1sw(BPlpQr-iZ|KBj}e) z`-X{|ez|GK!*>!v!-{Pqm2OLQ=?Xl#ymc+@zYfo@Awd_$g_i>r`kTfbgZ84wXHwpO zw$}btSdOD70*-f*u_1ma3VJ#YujP!4Q{Xpciwc{}DZ~rR95Vpd| zLf>rDrm@xvhezm45gYyeyvf0zkvQp=vTqv6h6;3qy8Agj-24bzo-z_`bB!mHo4!nf z;RJjeF@f-3x($C#c|!>LV0&SwGn+m*!+pq0bT;L{L|*nroRh8qNAoiJBe>M zEu6pJ>eufIfB_ktO}Da{Su4Q{pS6Wy`qxtY^C>;}(e9KZ63=Gd`#8Qf`|4EwAX& ziWC$DdUnJU0KJvB_`0jfniV zL_VALZT6hPp@Qf16q)94J*V>gVJ&109s6T^(|Tl2gKujXe>!UY+fBoaqP#Bevzs4X z6$v)_Hit3&_OC*&panbk_RgnGe-~nle!05ac8N5E#se7G?LhUUs)zyFmo79NdoC4- z%>dZb1BEBg7uq1(1e*NHrMXb zb4;Ozbq@f}J+r3w!2$_2efIQQBW&X*kUaLxD%N7gw4DIJx0)Gz^Aqq79f*k$y%ZtL zI*3ts?#3_IzrS}4`iX#?OK8o%Zvn_IpaU;5a3@6MVlcUIM2}u*-H<>Xw}_n<@X`rU z76IM3`r=k^>4f&btls~rvLm(4BMYVxK6ifF6|?}5mCNqXD4-@9K~!u<dsX^9yGsc7XGu^B&1+6$SkzBbnd@Fe4@j5E(n0y59}}~>*CW!K1d%pOL9*D zdg#A`=-1OuV0BmnO9YV_UsV3d062f{{gzJuKllCr)RU9l=21aPEgLurBVGczofc3~ zk)&A(5b#DvblOA-sF{j99k?D1C7*6YCBMvgt_U>Hht^>BW#$4j*N00)u^A}+Kd-rP z6j5UJZK_Ew%B`=?s!RYM=oJX|-|7Ve1#>`CxeMT?-+CCq|9aTL93>~!3T_^qz}qk` zOSB`7fW3rDfJz*4GVZl`y$}3U_*Xy{!)?Kc3$EL&p(EKtKA=Jg-x-jL9z{{s#37h>Auoi3J4f?-4PQGa?|L5&I zG+=99A zZ+Ol(y<@pJ#1hJ&4DjBe4^mOKZL6CD)&Gn$Kf2p84)<(65r3Tl!_v%_Y2}~GUF*2_E&%x3?ZC#M z*63-mC2>F%w{xel?iL`h7KIE(^g-UST8Koh-8d8G@F!R(ynN6CoJqPYP)3}zh9kCG zL^Afl$q64=Okc45YBqQ%4hxz!MMtcJ&wG5@5?21&Bn>GLg4jCsIJIq>sI0p%LldjC zHrq)V7(DcVb-sIF0qT{FnCaF;-Y+2|$#5x}YSVhZwb;NRmn=knLK%a(($G@;6h01_zk?@Q(bhO{viTt#>4n9J_P#?WuJLwnQgRXcVA{lV}>i&cV{} z5Z}EzY@jq_6wq+$qDTKj65-W?MgeuyTm5hec^+Kyr#sRZ2ldT+VCPlpbUYXFrOLPO z+^q$g{GThN#6WJ9ywe&ORf5140pxGq)AV`iRQZH)xBV|dC6tI>?30W=j4v`nB7z@J zD$zWHCcOii9AspCg6L=CWx zpPFBTEm}=Pl`CLOQ#EGl_;XIMQzRyoXj{gmz<)7*AZ?=r4|KN>KbT}G=9X@)2{Njy zR@3+rB&K=!RPKTZoaeuWT>hrif;n(ud20(TJ2+n;i0GHdBTzL&vrY02{`Ykph;j}7 z{`F&szXC#yrK{46)zUM(Fop+qH|#pLL|Gy(V#W zo!~C+xzfWUj+9OTv70ZnsN%FqJmtGvGPdZG)p%=4s-Ok3hUv)wcY&PjFiuwM(gE-B z6OVcRg?9iohuU$=+WF6)~Nl{@QYBU``K5bMrJo0%pBqtWi*|uQt|K#Co2bX)?cEG2;#1Ta{h6 z=1V4oN*g#cyPz-O+Y4&|;5xz48;ymbW+Y$5v?p|Z>(y6+&S`OW1+k&t`A6R?>&5AT zdS?!DL)RHxcIEOn`A+DlYXUY`-}M-hLPXhzt!cL0q;t)K!>xvjPkKi0RO0QyBk&A(DCeQTjzh=8jN4&29L8? z!OBBivJ{7W8cn?xM6rxRMA>6!ZYcV9$sS`>jJO8PKFS5RL9WR<(ll&lg4BtUJCdAI z3mU4N1x*{Mb?sU%PQoo*1oxxx89txCUT5>00sn)j@$jVS=GWb}V;{?dz_f%~!h!9i z0vL~?K(peGtA%icm741lKNJ9Qq8qwPjDR8J8f4h_1|qi`P_>)2ApS%Sfi6oU;lUzM z=ZZs)g!Rr^j!>MQgw;=)c_9u63z634^7&@wNx zEMT2EE0m1&wAVCOznAX<-vu%b-%RF!$8wg**hBne8q$QM586oTRVh}a>>3x)Ys7x= z$QsAE3flBbKqru6(^o|I1rfODVA@;}xEWE1)CH*#HQPtssgBI>Ln(GZ%lzaG=ETp+ z;@zIU;xN6Tz@o5N2r^wMSF~~ey&1OcNI570ZH#QTTc5fEt(kHWj(s~Q*n=g`dWqnd zA+E_s)_@xp7p##G9x`wxa|-RF@1()p1Z6hT%yo5oJB*Keh`jO1P;p2zqVE^;ug$gf zKuOaaNld>#^?L7xo`b~Ueu6fVS5_KK116Cu+p8{&RIIUA*Z!>=_1Ek}6Ot3A#pu|U zf%^b1A4CCK?FM+G=b?YVRGLF{8M_g@?RrK^7||UQ&_Rthjo|`BakrtfBP#bLM5lsn zif7JVoNwR$-`@ixqsj<#M6=_%!7Y`Ye@#r|D72e!xD zE&xa4z8eun-ko=^(UGC^oD(exmO$#A|2j^8?$PW=+oWQ<$KGA$EvwBb|Ar4b+6Eff z!8WFFdgVh1RCfacp`f2PGa^xrbxhDILLW{rq@ra?|2C_z$r2b_ekc+IdCH*3G+HWH z#&#%Mx!-o{)%?{jX$dhx=it5WS9L>^A)=}ftu=1=+KBZ<6 ziIeRibs@R?l0OQ1pmfE+d7R}70j_{TEV&-7q3a#@XhbI4cU-8bMA*9%O_Mnk%$=TZ z7s5*Y*U0{LV@Oz|F+R4&B>4se3A+2=LQ$gy{PoPCu!w!QU`-~hh`eWe9Sm0h9k^_n zBVqu@&4m(RVuXZLm7R&PYn5l+9)NQA5_khvrDb$oJU!bvJ<&n2{d@UD4$@X(9=Vxt z+Dk;qN%6v-*9v}&HXsy?Xslm*kWW$%TxPw--F+XtPYzqKpC(Fg+hP3_#=fL;h>mZ| zuGo5bQllNrp2%8HLGCoHmI}<{`ES{onT0@vT*;FoUZKi@J5LalDBxW>q^@Kxwx9k5 zb3lD^aVQdo)e2g~3eaoQ>e)!HKwMq%hwRA{K1RbM(yXVOQJ!(qQ6O~86r_erS{1lh zTv06-IT;?>&y)AZ4zX7{8_&N*;5!T&ESz^xcH?G`GOD!Ard>kYt5^n3Z=U(x)*klNxJf1Va8?csFyIdlp|5da{JX50JcSr#WXNKx}kZT|c2by1inO%?c0nzK2(;YhB zVa#5T^OpW`!oTJ*N5xgK=HtZAAaqn0A+w!-1l_prXU#cV-k};SD!!Yw0kISHSsLDY z;;v+`__XC-gO%$J%t40%+#yyP#$kC?kiLfiK#5X<(8l^Q=ArlhcxEZs&eVx*c0I-c zB5%Az60k^A!n$JS?N6YcEi*eMXancx^;g=B3>zcl;aoQZ2BO_TmwC0PBM@>gj4;1eurLWb#&?guR}Ivqph*fps$ zSG@NgF$TS};xD#PPhC;fJM!rp%lP5;OHM>J^Bh~H5m$&P1fef5R6_>d&6u&7_vLqE z=!a95pHxo;ZD^#m!Z~1U?FWah=uXXw0-1fghf}hlX{* zUc0sto-2$$5M?I{qK?_GWXJm4R;+tmXWzfJ{A#97>V%T1FMZ%fXI8?<%qe1+e^Z+f zHJ>pn-fIY$Pib>GAYq??9b9;i2`;<`5>c$M@{}CJ_dv+BHI~|RlxxF)U01VMF0#dm zAYtrY$DyZ{)kveoLev^$#0sHzRsS9wJKd=D8!0|E^TP%7>7*aGG0~Mt@&lX&aeW=R z;z0UKJ*CNy%hiD%#z|0e%?H9^54yR4yhj{a+3UWRS)}ZA>|4)^T)u3;(0)Q!%iA}j z`d4+O&*y;3JYm1kSUhv?+hyoFb*QQYZ^JGS-nxcbJUQ9}{AG=4PHTf*rZp&)<)KD8 z^4OpqL~bP4c@GSapVw&CPdu*OMtOm7>;tGgU)QzDzZfg}{;2dErDm#|J51m!b{VVd za9qsaPc?lS$(?(V7;Otw#4bR2#uu;#IBQ+Yj1)zw`2Jqmaf{5()1htNj#-w`mKCW= zQXy+Udz$^!iV(l0utU>OH0Hg40kl%|x6$~22efeh9c5bWklYY+90GlQ!uh`V9{PnY z`D=1KwTKD+Wl|Sr=;rhz|B~^6r%c6gzK#~5*dNIo^Z*mnwNGJvyg~>RsO}$xO;&km zJtGI*N{z2h8uq<`|%pntKjTTTN1@RQ-uS@3N zP7@Beo32PawiI zVoCsI`#7g+n7U_(a_26_hpj~cyO^r+YH2ciDM{rin2`*L6(l12up#pq(_)lk1jw33 z-wA`LsbZf>fmJB>YCf`)pF1TMCki9VI_3Nzu9^98(4J^+74Z(rSHqb|CkTPvykBmt zfK7u1oT2sw`X~8(sy+W;{uHRAN_vj0j8?}yp*^hOjeKa4WFnrz;8vg0Xffcm9XI1@ zbpa}|4&tqTn~@g#JnIq3Q;YfR?+_92<0^vX8&UK2vgv%b4AYXLL4o&y6I16hD;8Ig z1n!mG+UrC`_4Hhgs&0;a?J`>On;NmTB9t%XBZ39V^bzDNY9hY~gmS)=!bN+sFLvC- z;b6hg71$Q%VyrMfQ1r1hX9?VI-O#dH%FB-al;R^Vr;ejeAJB{J0%{{A`x^T#rlYhu%R# zIv|>5E~;fh?u1CU&8i6*^sdvAhDZn_>Tx1u$;bHGKkPpKNMw?5#z#@g3p6bn{Zs@D zP*bb8SdAk}O+}-M@{)s0@RyFkd93aN8)oga2tZdpvea??>l|~>rSeGBHz3+yGdjBz z@|caZ9W=*o66a3d+{>r}<&6plE}vJ-T5XOY>=#FqL_~e6vJ#A1R+U?-vnEslZx%B&uGq!y!8zN>9#r44Ma zchDk<-8Y5qH=JQJPoySeSV;7F_6nu?mreyC64pV)KW74LX)B9{+WD;h(=rCake&zR`E9g2F&zx0U%ad}m+QXvj@kS1B$C== zd`9i2m`b5MuBsCH*kG{Sm*+C~!5X8CD(vm17w-yDwy*~9V1u@;mr-NEq z@w-XzVJ@%7Q4s6A8k0L2ZOctdG~=^ll=S4q zo^E%#+q%TDJ*ZYR#rOMBbpq8<_JOz@HAb(nT2)NIPXbeb7q@{q)4{|XrfNIoiBe=9 z5|^CkM7dm>dgp}K9Wb6t3X&18Mq$8-Fr~!wYn;-iM!&A|z{?Pb@*e2?{rtgHdIzQn z?v~^pem2I+BSxCN3aI(o&Yw^TSgIr+$2=+m^vN5$fvSSbr{r~>or{1T`txQkTF>f^ zi1vpe=?+vjWy>|hNvFhPytwySnarGTLoHW!9b30XhFuO|1 zHKIiBRPx#O@(H2KJ*}ya);u0oSQDaTxep7$mYVbzo|=9sf1Yxe`nYYo;WrhhML;|K z78a?zNE&pxr08)HL7Fr^5$$5Qy}H+*U2J_c^l=0S7p36LKy9s#(-4L32)%l7HwC#h zGa*omE5hq0rRN&tFC}o3u?-|r^DEPbdcH9k0Ymj7D&_NxR+iKOBAgBB_AiUbhuvKznf0+ zqrOv$LR3z;F+*D!y_bg0$F9K9Gh`2cp&Vy9Dh1gC6#MF#r_@W&X;%s^JzaeW_u>a{ zlvuxxX-X8(MNFYUOdbP%||(35MB1(oV}7=10lA+MD`WnEL4Xz{%|Mx)y>I ziG5VM+)aUIjJVxFa%^$+T+MLfjhuU@?prfQK=ryG`{az`!?cXanqS{0%<|C+Lz_V( zxrm^-Yw z?35}T0#{Dqp0$-RyaZ0_t90q5krY|_98b_3{fwO5HSME`<&@mCnDNiSfn0GJdqY_+ zlj~o4a`;($_`UX?n^inoo>V}oitX@wz0^yE%Lc4Ph0N-51$G|Ymi_Q`iQ#va&E zGUEz^cNhW;DceGgpYjZsLGu0T8doo^Qys?h63(k_Df^~mH*<&x1P87K70YAiAHKQo z+`y5hwXweTI@LLD=DZX^{lEb-G#er?2YYw@K3ImJ+82^m>cAU1*6D$=jQ55aP5yYW zy<|K!Dy+j27r3-gwK4hXCrYQo)f5Ryc?u{Q(4MzQyE4(JSq(}#-*87LQ`w({dx=uE zCo386!@cz7p(R3TnThNv)u>N6&F+a2!d${q@BKgw=D6HPau$;qeFrXRJ-_aN|>vP1S%JX`q32Tkd$T!z`yvPA0&-q zu9nuiDpgje@m`SdIz&XN9$BX$gvD_GeMZ5f;!s5?+z8QRJFb3;tcRKVN;-Rf+Y)US zr1TiZLtbYRV&}|A=Tq!(`IwUe$IZk7u#}m#A0KHE)W_%oDK7PuT|YWu7Gob~sJ!8K zkq1=|7urLbf{XjQq+(GDWsojVEIq17%2Wa>3(rN|OtnQSSui3)PtF8cVT4($6BT32 zX|=9-T-S9r0u2>;EnY7X3!yBuV-`=qv;a45({=REAOD(`r#KPf@r$A^4qnY*9KVsI+0aW!Ho*%2^(-qe=q5m+6weB$e$Ah6Mm+?8Gn%YT># z1j)EWrV>RO%FZFl0}yly$PI5TuVtcX2P zujMkgMm=6PArQFkVOE^1!)jHK!%d1+NqN^NDKYxJ;kIbe_%#J%huh8gadJWZ3aNoM zDk3vp@?&;TFVH&w1Fn}RUt!gp;FmXgfiQNyzM#ikC5v5|BhO@|A{qAkP56eh{A|$* ze?xC(tfm-k_>QQWGK7J%U|3YPCY2kmO^X@r=qg$m3V}JW&8~f~7-qt#0_6v)+w$_> zRkRo~ryaL_UP3e*L-$OxoDSzV0R`hj$4(B*w;3IWBkGS0K&y?I|2fKAV*D$RI3_<3 zXtSiCPG2tSN(y3?|8N={Ay8z^@As_kAnr*}_z~^Xi~&-O?Cpw-nU`X44b3l<`kdR> z8T91*4nw*OT|qa1v~sU9(RCRb^34H%jW84&i+@OI^!O(ituv=#wZ#Fk5nls5&+xOf z6bQYSZg5eD)*9ou_p7lSV8h&}&H8MDzi|welY>>I`<{Dt-GDNlLHryFk^`?|(pc_9 zz4iPKjxoP9ss>H`E=mk69z8kiBdtP%$+ky&ap1#u1W#BEsiVhL1fle;6R^4}IxiMC zmU+JW`)j3Q=d_+Upp~_pG81N6%s#9Qvk z*E|8Im|!2KW69wHxhxf*a45zJk4^L1g>rHbgll>v?kjx^H&nkI5}r`psq^kf<|Of2 zqDkl*s47T#y@_=|Xom1)Q81s`bbobUl;2h6-CDQGMqHgaHil!EXstrHoXbGeY7&O- zy>5yOC!D0W3tmOY#%jq>ow?1L^w$DT*B@MkTdx~%fWf-bu$?YsXQ`Dh z$0n`+d{MPDlQ?t%3L}%i`xl&l@itaQ__SWIR))^4kz{Y{`USw z_jC!Fd8OX$*XQCNMNs)(dz4C|3LGA2B?7plH^WfY`UsPXLMZDc2d?t^ku#`QS( z_ow6?`s9MXFT*E9C5IQC6Y}-YL?p`QS{*Msp|L)%GlE6BrWI1|<9}uUJ1T;A9R3KhGIh=7LrYTspHT8 zL=HCHvc&LcDFrPK*5PM|*+}{IBC--$$^%X0-9}kh+1&qJ`I1fKYOQY}aPBy6^T&3# zUYz_piyv?|jJJhr8T*ujVthdp?)mJ5_NeE*Co6_@#K>Afz`zu`Rpkgt`Bw?3->#g& z4K)yAOnFN8F{+G6(T_%QjjKP+m!dVKI!L5G`9=`(G9JL~+rnJpOdf4HdACIQ9*U5d z@#hOT85iS3Kr!?(yyZSoIW7kVGF`4v#mmN8c8=E^W0?#;m8NlkIbW*|NAYfk zm*#d`zH-DVM!rKMp?T6v8p>8ghSqG|b5-wg4aC6!M;GT$xF-t!BXBSiKI!F*v7`l3 zUiBq&g18~3C_h5A7Iz5WcE|5&#jiDWfrtIir6*@{sn4Ok33!MXv=L{?wwp^ut|6(a zuvtu4n;!bUl`Hdz&}+})1WJAn1NDBK`DvF@Ku+d#6(Ia_l;9d1VPyQdBb4?eP9((@ zrd5w{w^Q4UWz8MnZ|Yj!8Rf&eP)$oTX8QjdS{HXq#UkS+rw4lM+->6EE6f~6e_r#~ z%AtHG_nCs;lWVVXK7|PAe&Krn_YA&IeUhUDYRy1)$y@=CsUdDR?LHOb+ae&wDE|tn zP%3}ppvFwXN|Ga*;w(8e=dR>RUZjL!Dp~<(FTBWpnDET$@)PN6rcRgf!%#@@{;VWZ+m2hS@Of*V!K(DqqPo6iQ-P{ z!Qv6IycsrrG}}h4A!&K|V7lJT49Jr%p%6Q`Dr@LK#WCTcuo_d6T&2rA#Txo__xNso z1Tm8d6bB7QOA)BrKw1~w?g!1&x+-~da(9V-9bD4^J<`1>PuW^|*|ZUhOm|ErBm-b# z)d|`pQ6RdpY6zrGMR%>XgEj-%-vO$cr&94<=8X8MbptH&@?&N1vm>KzAwXyzH zF3VF&HB%R=LNai7J%f_>@7@U;J{U%o8lpdj&&ZS8)*{1!(v40Zy8`9jvO75d`|6}n= zFkFP_3nOHM>=`|v%Rj{*&F^ih7|9_Nyby$>J_qKsjDmWl0Akrl*?GO$q9ZEzZ68i1O^Pcyo?{$vX_5FwAJoD^ad+oLE`(7Z& zMr0f0O%Ef4&}`q&mSbf4FyIO|iH}#Vn-?aD%va6njHo8mV&JE7DOf# zy~$)YL5))mMt|a{>@xaKc2h6Q6AVGD$_|gE?9uBm$@@~y=vwi4n`8j_f_vf;zm#Tj z1Qi2E0U7*yL`1JlXfBy0POzevQZ|%X79e&i*VBMNPzE?9N#;xVGi>{L!?zEg&rH;g$c}dcT*Q~F7^y?1 z^j?7VO&PdWv%fS!Fe^SEF80aCFkd|=R{82}=!n+53eM=lw|4}I|8Pvdy#l`UWk%hU zIhY##x#=k~w;BkCtbvPckLeqDbGvw8Gd}DhQz|}bH2R?{6ql`^BBWNVSdk-}B|$qH zw}(;hgL=`e9eXkJ0frDvH~INk$F7*LWoejXBks*(2!{dk5@tgA2mUl1w?Uz1ZIq?$ zOK%!*YpaFA{kC>xtX$!>j=LL^cclYKS+1d)jjn03tF~uwqYI^{oL^R@J5|qlO0(Jac1$^qS(FS@b5nZxf)|3t)3eETqBHCrn_Mz zm0U^&9VUXG5&10q8Vu8puL6W#Y8T0MA`K(`7?C&;eiXRdEa2u0hV?ChLt$i`d~0E;pSVKyMLP z_}+N7m2OOYk>O^~gYkJm#JP(;XZo9#>w&d<^XZhiR%?rTr1$-pD7Ii-CcpF=w3EPe^m+8 z8<@3Vd-e^0Y59@K;UFvt3)@{A9r(elt)i^XR-PU;r?SMlhic?=1nBQOk8p|&Nc@H( z!X#;UkTc;-a)zoi<4|Zx)R!1WkS~7@w!=&}0WQs`_wu@V4n<3vfj?)rm33|1l6PjcAwFO(W6aU7nFGadM-@^TwYB{)>QERkoK&AfLCk> zS1j`xpyiq=tq~0pzk@{r_V9}I3a4``C zSuZ~q^1Jl&)qsM4&h_*DQ{=*A6Vn_uU@nsfh3Zfp_-;C{WvH-YM!BA{ze{l{qFOEU?84;3&?nGn3)$=s3oF5-uu}w zv2iHZY z1%l@PZje;zz?WWgGUNUBR;G9`QV|csum1Mw@AMT) z1dODn&EjW=U)%f7pZ?DXn@~WL;0F}Gf4hG9fWS5Lr<@fnM&O0+aWfPCTf0qMu>it+ zZ2w9PZs>JtMWV)RmS5W-Mg^MBc<(b0J^(BE-l_PXxBopBX%*0g=e=+c=<2seLceu2 z3^IUxq>p|Zmfxp64cdkSzIRi_f4wh>-GLA4ZRB+IDNdK6w^L1pywV-yI?S!%H>k!DcHg(-LI*zjvO+ z8HD2Wywmr2{&hWqUL-*6&1O(=|E)_epui@@f7|~{SN{9wUx7`4qW|@kJh!F4%`p#620|7Vo{1+2*95BhL%hUU(1v;5041Amr7D{TzH zVITBsN8f_7kVvy)MU&qb$nTHx+yR~Ho;a)WtI_u2gHAQ_b>}POf0!5y*lLlfm$iNy z4zE^dRc?6l|aihP1-(N{5rnnHqfWe*!^z5e)>Q2^cFgzz8K5=4jcdfaU1O4 z|29Z~*MT(4q&2zthxQIa{%pknX*t%f!(kZ!W~Op*oZ|K$9*u(Vfzom9SidbL73k<; zIiDr)hn|{zgWQ4>5j4)P1KbCL5{Ut*2Z?{Of)AlDsninxjzdO67MS3A#GjsAhb-mu z;}qK8?592SY0_@)pO%AJ1n5)38VT8N_ESv}G7g&tSN^n5$)M#X9uWRJNcb(}6MspQ zy7B9L{f}+x%Yz&})ya;AU)M=m3$))1YF_*Px(oj{SpS&`F=c40s$}M3|2nCJ{$S_= zOhKimKTM4cm>JGXzfQ{;uLZ~v5qzu6_=m+X$OC%BJ1NX_<=0mh#(;rS8?T^%C@BB- z+9=4#R-;FLKZf3VgGXhSO8*3(Eti3|l~I+Q(y!zA774BUxRW zX#Vu*GpJM5=igHP`c}&*FfV*#+Z23%7+o~L#xshNSN`6iU`a61bER2N|Mb#ysJ(q5 z8Kb}TbO!o#>q_RgUqAhyc~Wu*?ak|rg8kalGhVacQDS3>D>&s$=KxfN_w-sBDC+SA zB1Qq>wA)d^KjD7AFN2>AG% zS=oIOjpoWJ7jx)VVF}V(>@@^8{^5tAcK4}4yZg3qx9zX{IIR+VnhPrX@e;m`6U#-U zynh1%YU6;0VGYGRlRnuIU5x`;`v48DCT)pwJ*WiP7ak4cf4;`0Ekm}_WnmEKx1|+F zjn*d?ON+h=kZ-hDKpMLQ0wj)ASx8#ds0j?uoGT0w(`2@)$tp~N%}y`G%!-# z>KwGr&Ty;#zFPizrPoEsK8rnh`m51CgO!Ik6AD*tkfJ7hd-I$rbuY-(S^W%JUsOos z>xNLLfGnh4W(jf;RZwvo4Mh&9fZ+aT$y@RJsscqJH}7hK7;pb5nfoaStds+u?dUmt z)+YdiF8RzID7fdl0}2%sV;y0A_bDQt@%A=U2nZ^Q^DM!XVHKdJSY-o@#-Z9LR%v?UAIH$^U8M#oj@N*6AcVt_@0|jN>vU zg*{RC_%{EOu{Bgdb+0pwT6_&)3risE^~%ah#5%}f7F$-&$5eutA+kYk#0EUdq&t>c?m)oTo1hM;ek4>TwGwElkAW*OBx|^3 zKoejA)nftzu)*sf<|(pC8w&pk6PJ(UY=H3FdP5-CYz67lc7sf&G;-Mo3VK7}utWjd zHym2y^k+07Br^nN(hcr^Ly2oMSoFle7F22&{o3#f6nwJU+4HkBpc=|AD3g&YBM>?K z2vx9%T#{P9%wYQnAPrCQB-CN@f1$sAH@{$w$V2DF045vckbbe3Up>LTi?y zwC_NO{d?FqqX^X@P9CVIAU6c5K-cTc#vmAa;jj&??Enb@%mxt@YAOLNu@+EYy)q0f zTKr){=q||eN0tN8w-%6#q^SQ60`nsvD3D+Q6%|)lM5>33MPV2utD^FPVQV9g5hirz?zu=_=SDMI!MceT9!0i?5Od60C6Wt zh3UaBISj}fg9^iP&2XUihvHz|7sgIU?o566U73kEly zwfs&LclW%{{DKwH-mg)#wEyx<(|mC}dVX>NfZn$ZZWzTV zJ(x0kc@rc-DnSVwfRU{JqNat^my=R)2B7d&s00@Tm9!{>$fBT7a;!g?1xZTe%iJ}n zKup095#|#Zw7SWAOqoHZq4!|D?fHr&%*xp#AZtLTcDe{cq4HC%PobjR5Zl5-l>1Up32IcF)T#yoSPMvPpe(WWh>0~8VRa!;n1ES6B@o@f6o)0d zg8$Dq@w9K?;OsE^0dV*UjpM^_00$FUF~U0b>)phw419+fpZxAU!1@Ctl2z#d5IH4} ztemgatbkl)MNW!KCsZ$~IWc$z3BaI*lA)B+(U|8upuLQ%;1_ca8Z)qb-oI{ghKd6Y z|l|?#2@+Oir!V+vJ2;z4<528n-M2c{IfZKno zNALqJYz)xX1o@Q!2R{x*cyo9Fky754S`xYcSg_&m3{)cvBE=i)AJ5*j=TLvw@dKRc z7IN>8gF{;0^EV$`^E~hk3)4vjFXBjGk+Gm3N)@02Dgn^OHcH1H1yClNIpu)=-*EFD5Jp9E;RiJ;oFsat1eT!@!F` z`LF_@yuo6uS4aU$_~@dE`KZvibcg>K6smv>zSZ<#S(qdn+dO^C1g!xCf%&g@TpQ^Tl;h15A<{u&BZu^zR3A+*C(w1dl4vIa((k5s0sabNr*%mWcS2?t zR&fGq1$Tfn_#z-rRRH5Y?ic$g`)l_z47x)^c+DB;(u@PQ;ilTDu^@tSvY_jolEpV~ zIBZJ_fOMo^(9I|UKL=pLM}Y-gxfTFO1u)n@ZCtT#D5x-gAGjNCi#=;We`^6)A%Y93 z(Yd8p(glC%lM(o`GM~_MZ!t@l6u`kwtpNU+sg0o?AWe=Nh6>wBz>|d>%j(>ZkG9ld z?Lcq3k8U3~h6KZ;Gvxt5|1DuH0BI?>>Ao1HtRUSFkp{E?-vI15o|rIWV8o!D$x+x7 z7|AI}{MYFs=SBfF%6=@&`hMg&7&kS#L(>1ZKoN!Y3uuz_WXTP3ipP z(F1i8JnCMcDV~J$T4fV}?4DwHh{r)L(F*nhD-jqR)MJ`LS~RZ8KktjeP;d}Th}>_F z?8?Y0_{p>d*Magk3saDpWq+#78`A3ay>fF5r$VK;9ircER4-EM zrPa1}9lMW#0;?_%anlV0m~E!OH!v2$U;TSEmY)SfIVQ$v?{66>R^bh=2{;5PIG8i0 z0I)JQpPmBmsNevUMqh1jQW!fr*xYO~%^H}Wl$=7o^hFz$E)DgkaaX7oW+sa~iUWBr&qA_e#@6O^Fnt`dFf-|hH&1^(p_c0(yF z_FZR6wy8IqyIJaWr?R6}QNXBYM3reOr>M8z0cY-*wte@PuT7CTiGU+p({RkYe}zrH z{SFfI6yh-mlc2U(J}Zm?q-Q|Mf8t3diO{95+hg&q7MGV9E)uZzs37qeqDK&z*b)e- z?}IgRxC@9BJfkEeKx^Iz*fI-sd68%jAR|J*s;{3FtyTt#9tsyMxbek=Edn3<9k|3X zI<5nZ5FcQv0H6ZE;qy)o0{NR&!DVogR0;n_^WbL}w&l3QG0kAPdm-gz5(VQepqA$XeB9w`1TDTE=KR zD+Tr=hnSU(A+**GlH>9yU@L8gUA9v_1=qI`Qav|)Jk|Fj27wiEhS}+aChX@5_gr#q z(vEr}4#ZA*eN|mhxeh;C1+smkMn{6Qj-7PG)g%9tdr*>vMsojw2(?1)xdgZ4#i2*v zHFMXQ>V0FXjb&jN6AxLAS3tI;Hs1czGNp-CC_I6G819sNpbt!NJfCHPe3HOtFyDLw z__@&uodfXd1u}B8u>-K4cPKZ%Q2ynTfyAl=yfh4(OVM&yHeC(4S`vOBwDO`Ou?Gy> z+AYpi>QaPQH0`r6rX>h2;t#04!{Am`^Atrwvdei2s8TzgE^%dpk7U2qgVmbRk&xr3 z{qv4w^oeIct`guZ#xC9Y)c16+D(W@yzMO7`!@DAnh&D!C%REaLlblkPzi%rXu}9Vu z?`^XahkfH1SYov8I(*j*5^#Qc=Es9QkL1(G8RQe5l3SLCL$vSs52hG2IQY9JVidGN zXr(rdE?KwZ2;6ERCZ|6jrb^bufrH5t(px0}a=-#iyPPqbsm?s0 zYiNj|CxJDe_$m@EusLR4yyqzWggIS4hFSZk%@;Z_!u0UkeEnEZ5N`^(lMw63!%o&9 zjdh@ODGA`!o!mUl5jnu^%vN91XzX&h0qjlUvNO*W2L*?f!4AOKq}Br5^wUf^Ay4Mj ztRR$92)rqGUFc$kcsc>Sv*xpSqgvzlVa2&3w{MbXRVoi(L81l@A{e+ItLtCTLe57Q z4sO!v-1=gCq%4}>>wr=bl-JjD-;3V7vzN%gw?}ROD63UqfmbX^q_rk_H$d3pTlTPi zvmbyIj4~)SU>=qYn45B*yDYi^ij1$+>p9440FZUUxnxnRV8`I&ni?T32t5t}NAK8m zYS4vxix~_up#ro1pKP*`P8J`19~JTYyv}#{fiP+tcS!DkKRiMt8vMa(vgX?k<8+0< zl<0JsM5dj!Cm8g_lkDzT(acyo)a|_w>`@vU#`b!ov(Kl2x4RFRy_!ISphM z5;AGIkW)-QIf6)<7_%GZo3Ig2-2xchc`N@RLW~6Gn-()XBm~a;02nQ9%QcDv6VlYK zz=?$_%aD4b;eV>qtt~C0K{Vd0PMo4tj0{1QuiEtSvyT7bhFyr zT((gcYK4^VAZew=G1a1G(S*eaNHwj4A`_E$B_7@ZXyIcXf~Sf*^bpqsikVG|no;Tv zl^RO^h=`-?Gh-J`z3KebD_bxGlw}@LfNx7crJmNHyCX-!iiga+>G%6P<`B^xP^Ue+ z9!DLlcmgaDbWJ}AbWYHUT^3P0Ejk50&SdTJyT9UxWU*qbv$(v=uIIQE(;gwFUAPpd>YJ!o7baeSjnJ58=!2JiTLw$Z#uSq=t_v>($jAgc8 z!jHiUeP4>fOFrhw10p&YgH$=y09Fq`WlyE4@3l|{<^R|<)Yg^i&$eFxDjj>4Qr7sZ zAmo&0t!QE>HJme*HwLWz>EUNAtz5O05oIK-X&oHBy6q9{dhRT`2^K7imrEUxSw)Yz z`D6;k&y4|n$d1rt=Uc(FxH9Pb?5Syzkv0iuqKrSV4t&o^vU{EC-!-Odno!$F;W+p( zyEM`WMw|?yM1tuob8ev3NvR{3XHm|Ha671AHG{2AHO;UA*j4zDWDs(l z#iS;RNMF$<3=8LN%=EvBRw@=z6y8&Td}hV|vW2TJrTyQydf+~O9lzo8l8LcLORk+( zzh3U(tj112dI3bls=uD@7;Hc3nk~N*0URJyN4^5}DnJC1-Zi~)Tiwl?uzyw&SwBn> zBWI966&6wD7VxBhAB4G%_Uizvaaq2j=1B5*V-$d->x(^<=AfCs(>)_4zyofnn+;5QB7lbioQSj|tTG9BI!QC!OTy9v0H3=( z(p3q;3f>LV!(F~<@ zTm9c>>)!4VX5(_o!&=@j%hyB;Js{)WM~B~!gs0!)U1kVnINPlA> zEw^L+Fi#uzcvmg+Xbrg6ay^2mfL!UxU1#f61f{%ztV7=B`bWj#i^06f$_X~H(q|5U z2N6r(YW6lPXK*#S)wOg}X!?-*2k(I+b^hpf6NNWi!&~a-?bJ&XJPUYn$nX->DfU!z|% z$Z`$CbP{W|5D3ZGEb8EZ;OW};XLUfksO5RbsO}PAcR#3#NOA7l2asGON7w;@JZtmI zc!z4uSie}a1O^ufcc+)R5)&If!Xx;3*heJNS&ZnO%b8n^5z7L-AmHAsdTdf_Vvrt} z+sliDFm6q7n>mhB0lFF+GvObnzfnw1(~0X-4Ac)~}e zFu5hof~s~N{S53}+w0suOP|HfIAmxwW!+?mgQe|gEog3jGHhW5_B$vF#fMC}miz|7iRlZTAP z7`i~EPo8HS}ER9kxpF5DcoVx zFHms(i2v+-g=8aZ@CU*ovqL;@i!F}{_eyg|; zA34aV->5x&KES1MWZ21@a>;w={;;zS5xLprs~8@%%j2~VMd|Bui`E;f2$Rqr+kk!t zt5r+%6CC6@T#>&Fs@l(BPkbv3v*c4ibrNd+3ASzWVZ*!(LyHbrKApA$gnJyx1B%OB zDB?^~FX)Vj#S=@*u#Uu znp+VavI;Jj_`ojOVZubPXaV4*TU>!n?*h@J=;=bR@TFx+g{eS;0k|Aabe83e2uF`H zAOP2kF%;F*OS@WqISoG&`ebbyqI(crdVyL|Y5)}hza_15P3~Y;XoG6uVH^+ctCt=4 zp%VAG-B+ggELUhNlsQ`LOdxYt7?e*R` zZs30rru_(gNyYC4KEcC9%9DkYYCkJS1&fEtcuZN{gnb8*J63aT5w3T0dM2+A-+g}I z>&`ti@oLRwyi3}KAS#kO`AJ$5&Fc*)h&;@O+Uli`$g6{t~T)% zf{fk5CI`q#E%7>qydwOcrr^=q?fgiN({=ikEGh$?sME#>Q#q^%ZfdzutFVboVFMUha~+uW$!H;&2H3eJmNL*HnhX)H9eNFOJ^VC#5e zu7BNL!8taw4Zr91!-$+d$J{fcda}o<<%MX+Scye;ivkH zT{gHRdYYBNy+L)e!+}8Z1Bg-f0&BW)XO?v%wGi3oH9o()fv5?vRCVg%;>)* zUFW=`moC9Sx^ciUe_TR6{J~(_(PvD>LJN3JgCgB`-ecQ1Dr6>Y5iHh-Bwzn9qF?f# z03*o!^V~|`ywjb!%3r*(`Fc`|&-@j6wcTk-&(ZCQu>$wx_f4Bc$Ft5Kh)$l7;4-6*(6AfM z=a-leSJ=FNe;KcoE|i5kSh&TYhZ~s^PD+T9r`;>n?pP@#LZZTQFCqQ<62<0PgYWPM z%uId~x*FoSBYLV9IGx)rij)s0J&Q~Wi>3BSXg9Xg$yXA$Ysu$#+ii^uQMTSh?{J2* zn}fji0t4>JIEUThs?{tiHWXoHIe)oXzGwsl027=qO2=w-)*#lG6lZLS&)v7y$*o6w z(cZ+9Pl=vrGT98K_kP=7+Nm6_ee5eRk7-R;5?>)jmUnRPjYIjyYy(O-`m(t76=vda z_@Vc8G>iBiDfeCgTx_Y3rp03T5SQ}qZp@RdOX=LiG}0R}ymf=c+&+Whk_>z1Hu-D( z?>!a1J_!X3{!Ld@3sA4=WPFZUnPX^mi@S;Zj?1vggEy(_AB-_OVS1``)GdJIh&VPw zT_c?^@+)h~sm)`e2&z@MMqYpUrYokFhIGtjPSHAi*_EzqH#>2HzsohaRc(k|=kg6# z4M(QJiBf9*L6sB`didprs=lra}> zgkpZ{;6y&(mgM@v0CSkJDiOoG>yo?kc-SubcCX&I+R){(EPf87nj&w0*#XNwUggF2 zM-r6YXfvJR+bG9edw$CrE2hjih+Q^C?;;dBq`CmYhpYU{WR$KAuZ1y7cjfBqCo&5U z>auKe=73(%aPFZ?R8daSs=W3C`r}p2H#@q+K)2uJSciSwadNmqCaA2jp<^JVwN}ph zBDSKH?T7LL&X*W6di%(&sns~WZ>yD>PgIK~AcL!}on*l`$*0jHvpB^A0~qgVg+b1K=Dqt#o@F9y0e2u~ zZ!)^4$z=e_>o^qT;-0gNctQDk>1_UYPMj!NF@ii^(=mya=fCAvm_ZVA`>E>})e zteh=0P?LpIE5A+HDj5Z;LoOyvRps2mOcaoIbchce&*+Wc3yq@0JtY+aPsfZ~iZX`? zyc7HxcH#&b0*-eKXLrA9vU?jIG}(q9m1dRPu9+FS{7!;VgP|c%LJ*RBBjBQ`dY{0l z{LKfX;a_##Bv=iCw~ zE)}Ilc7E6FBX|s8DcGpR=;V^DQ}fqTm|@D1Kv6!_SWx^UU69TLdK01nlzV$IftIc zH4Z+F$1;Jv>L_EVZWNgh5|)20y_N1)k9RAkcQBQ@vKC7cMtR}3@tTkOT(4c5Z>tv; zwUB3-+$`37z&J&-zeZ%F?G5VG))%djtloDA${6az;{*%a7)paA?g$<1hKaJRFvTWf zslwDc$|PXvm$$zau0AGwVuDabh-(ZvYA(Z)rB$d0uFK=!=|bts@X&+@enL8Ir<0w^ ztfYD~z?x0YJu=jr#x)(-L$pOX_OKKei3{l&Y-~5@NJ!y1#Tu2~c5*kqFx5%!4d1w| z(kngd&q^e!V}C7#({f(d8X*|HRy-XD!;&dU=yh<9F=3SJ_j7|SzUA0G&EGt7tG_yH zUd+Jra!Y=`z2z80MJ;-iHJJFmsZ_gAWt!Kzy7Ebi#XdbUPX{OPp|(^kQQhk7u3f7d zbP9VU^UsnbBF^}7dg34rxLN-q;jjTDSmgNaBeq1NEIgC`R^f0Okd()igH;?xE*+bYK)`KZ{XBlx7}ZUNBdr8)-iFn7jLseXc{T) zuB+a`d|83(d^QY2Z2n>6^os&&B+vD+#*mw87Dy!DALu&IjhhbDt&iO~9RN6xNM$LP zZbmGiLV_0_t*A}p*DDj4HG6CtogYi(P+Tn7UJx6Jm~{II>JytIWV+u>WHxj_Vvr)1 z!6$kZGx)5&?=S9%KaMwc6cjiUj4k{eGjU&jrTtxq96@xltXO@4G?j2k_!)5MrQ-qE zG_0AUSpa#`QQpinNJ=T|h)$w?F%y}W<=Wk^wvuhso1|F@&3I%#Rzz{d>5e+f z>{@k~Jd-0KiB`2z5jN+b{_9cLi6fmiT(`e#vO8I{Ck8jWbKiV*bZ?j|*iyKB2rK7E z)mm%`9@8>Rj*EvjWlp`2jkykE;MtiE9#Hi&7+np1fcuzEKvt`ILgo3=d1SPVD>>fY zTWd$RGEnCpc{Vvl$C;TUkYbL|>xc~#5xm~r45wqG=3aLPRun{{0gNjzU@8G$zr^BM`xl$YEti;fJ*X6wSVr<>w z7ty0rs!Fo+rHrig;=3G4i6F8VgV7;<4aUsp6yKe1!I4@IwY>?rwcnV+|9d_Hl!jua zkAS{8NHZ0jzH5f3Pi$$t_LoG;T1qli6}q(|D7)`a0F33eTQwe%vV@uT60=U-8Q#@= z*VwNH;y<2W{fvs-NH3GyF>nc&vZrtvm7uXX&DEadZ&QN;Aa-Ab{Wp3Yib==vNgMlz zt|L+){KL2NlSIq9d>+ztI`u_(+(XD zO5XJZ+=e7a!sW_BXT59uHU-BkW+mW`uiq7}Z)BJE1Sqb|OEbR52A4wWnrUMQNMo%q zG)WGZo-kj`eWN?N(cqN4QxIAHS@=Y5KbUkvTq?C~5)L#=5M>?0tOv_IU1AX=90Fc` z(;JjH!-7}k9)*VRo-n6W9#g9?GCZEuIW2Q70XGWkAA{pXaVrXO=pBJ=nPj4IG}<Ou)Y!+aRhhG5;kOl?PQ2O!LKe#Igh$gz zd6~)&x4NZ|%SM0 zZ`|`tCc<_Rv3m4LPZEKg8K_QHIJ~e?^WA%=(}(bq#vM_|+Rpq{wYu#rpkt6N#8{gT zRX$ot8fNkg?)MO4M4)Uhe3>PQy}@yJ2EkqQ<#`1g-+@@Y!f>LEMUSjnvVEZLVl$T` z1OZVTR(Fa#+_v(lj#$kiG9Ap-{*t)q@>Zr<4!N6S&&ao^lhuP<-5wtlCBrtgZ%lmp zMhJ99LFalRq zo+Z!gZsNHQ=f06?RZ|l;pQ%aP?Ba}>Yzi%S7V)37`P&=kY98B99iN<3dl)WPDIOgl zx_K&b$!2v0-kJy1@1pLxF&(WdnI&&~u>QDp_O$16eSNt$+kl%G)8hjWt=lBsSm#NN z>P;e~k0-^OZ%$1haNy{ma}>BLgL<>;D!3NOYkj@a)G8~?bcz{`0`(iX->sww)*aw| zYsy(@=iw(En#9-L>$Gi5efnYHsEjqG$${eqy@tc(epGp<)0A4|E&@M64`%8Uo?!e*srJ7WI#o@=RpPLMz>zD2_)@}G2F-Eaz z#$&uswvC4l)IT@2E2%Eblf>#hAv&nw#>RSnfrYeY9P6X0t;bR}k2*$V zS-Rgr%Jah)yizGk6yv$+J2Zkza~eBulGj|s66vv5=`V7=_cF}p`_d8h0B`PyM|zNY z^L%ZTH`*n2qwsy^C#6aT;9~dWwG`^oewXP(=k2&elryG2X+_?b#^Orv-p;|2)=*pC zGH@q$4TcV9W3@~5m z{D0x0ykZ~>kQGNX%Ufnfy_mQhY8uKf0Y*e7&;+K%pD2XhXWkZmx$`DzlxeSOBfoLe zt=n8cvB$B;TrPRzTe9B^A=H`d<9r~ubgk&I8h|$C-5HFeN89SxN3M6~RGQbx9#qyG z44))zjPJgbVPaf8YXZL1(#(HWg|$+q_XCJGa)m1caI#YBP99p1t{)!1(;iuZBS*K! zGEd*GMEMtXNhwK;o+d>}2snXnDn)=3sOH&6_7e#$b+s>3f8m+IrL1c5B7E&(~Rs`ihtg_=+IeZ!ji6gxKLO{Fu5GBi?wQ8Sa0%klXc{yw zf-{&F`RsM!BkEAN+1qZ|1^eYocGNZ@L4Ed7gc<1D3m{3^Aay4QtdhQ$%3SFz~LGR7i$lg4d5 zdrS~=B=x5`0rdzH#pW!OV9T*-KftP9(4A3ENpNrvEF_zl#Wa?+7ULU74TP|Ua&;EZ zg|ubC9jn702jGaW533Kqk7Z)0lqrs7M;kOsTf2FHRF(90P3v9$nU3cb;*DV=+HpMf z!s|C#dNPbqsJEw%R&Cjv{8_7-E)5q*(G;mg91VA)FiRY4hq#CoP#>(hWk{;t_y-)IC}DBe0Y>^g|L4s$pcGHFiH|!bdO~6?M;)q5hPwxl z%}3po(^|3=9KA&vB=t|#EvZ9S@Hx7dzi0QkJv7mBJ}ciAvu{PVFqg-S#@$;{PSI}* zx}od@R727JE@khVk4yie2wtWI(i6-rM2a;rtXu@cYdl%mI@USTHvEDt_d=_2WmbXa z5z&RcH-D|=7l5g{aW-D?-pk%4%CCv8Bk@j*2UHUi;wtr%0r;OL{fD|%n@LI9o~8mI zc{hsr>BfvHsun7}5IR?IxyRhM+RtdwM`2sE-+1}4SL z?fIwnFiZ{dIEQo3Me#rRaB=ffN5?A$uqe*gV2>`;`qO<&O8Zzf9-#UOm%jki8|&a> zd+(Q+jhU23Rb!V5j+f8EFC98hzm8s);M}XceUGbL$C=aq9DSf+v?ze1FHrg(yO+DC z`;c@_=mo40EvmM)Ej*u+i*U0lYfY-UR=?rFnLwmXKmK>&1U;vhG^;>@s*DYlR(bdH zOTo{6#j@j*T94|Ai521I+RT-%{^ac02IPsI_UF#q6C46ptAed^gl1}OVDMQyk=fH$ z*3h<>$Kgpkz>hK+1=?*10}Dxb-!*M#rl6EDe+#7(QHr1jNG_RzLJx8VoxS|iZbMnJ zq`i&uMe(h5Aq^af!$GdJ4paj&8?lWEpZW zFBM-neQ?eAAZ>C&B3e-g$eDh^6|w+}{ZohT@<_ge#qR2GFQoVl6u1Mc`7v(OXdceq zP6!Tjyz!xUdWC_|eHz_irqKROfohTe13%Sj^7!(pgYf6LFVzgbLVDmA)jTKFoo9U9 z_hqWHRtIZZD_VWVmYQc2~DWNmn|O7Vmf}_JcY!cXvMB>BhYp$=dTSN>EWk z#OfW)QGT%Ep<3{2R_EsfzdFgMLOBkT381>gsbGOnbEmvV0=|!t6=G}xtFSkJ^+n>~ zURRA8@llb|gsE-#GFkqP(!!L~?r^3JWv{?oP#ybZM(*aIG1-oS&3thznept^Pe>Ry zV&i~CgO^R<@L)bvkP z#gk;Z^9PF+=6ZTJi^%Wb&cv?fDSY( zfC~FuBDZ?4@6RFP%`}Sx$Thb9vKa@mfzxl`;@jiy0A(sQck50!k8-^Y#n*2Ew&VpA zPBPfD^-Puc+bzE3um{p6OnsE|)2GGA?HpyLcfOkcD6P_wpDJ&GJ*Ob+@% zxW#!@xbM8Mk^j`gi^L|){DT8uvA1b;J719qqA-ysJ7=`|k`b?<66NKI?8^$`WcnRS>>}6K; z%rTXy1%Fnk^GiD_Vi$nDRSvT{PP8g!B=QeC{Qh9j>q!aE5xsYuO`8xd(uBMu-Luu? z76g(%5-AAO5WF?H=(kki*DdDR>4dnOu})pb0#?h?&mEd)S#eugM1<@Vp%AF(1E;@S zMNf4WSL#VEky87Brue!y{MEI-@(*>q(KDNu`EE5S>L1nG(fPnXCz`s5%+8;epseL2 z7WQFK3R2w;(yqeXC~{lQqYOD+D&+~*D-oukRwO~&3mXbU9M?p))8Ub-jBQ`B`N4k=8OYMkpYqH}NG>4%m_xST$51<8DkxC+l)k$nE+g<2Ln!T_j(+8ZjIr=cvh`c0Wycf|$5?-RfaX1}Cc!I>xlRPl>`Ewwg?t#|C)bKI&3 z?x!Un%6FbLHAZ46Lt)N=rrfo+&{ZZl;v>&}4{2R9K7NqiAN)+5a`qzJG76Cb*XY9H zv?k!YF-vl(RB<1#!JC1oRh+A+V=rQQgL#_L;ALH8TT;>xP_7%G(Ou%H)^O1?pn7>W zfI-~hm486M%=;uIe_2@8lc=jRsv7$km)bgXfZIh{OrpNO$Cd?AY?Mqxm;L;nT>H-c z4L(4E%28~-z7qGylqGEWj*GC zFkj?IEb(#P@oVK*Iq z`PfRgZu#=pQdfw3^EmszQOve(ygfavBLTTncx5S3O zfb%m03x6)c)`o=EYtGp;6un1~oHOQVd^brkNseY=`mpIL=4t&U_1_ z)b*D>R@a2(>^{*tkWy|{4Ux60{eJFZTc@$-^(}3!D$KXqjd1K4V#BZ?4K9U70pkJt zOF_tO_E?mu_B&EU%1My)jg{V9qw4Fgy5@rKN){u&`Ml;18vl7HfL&b<1ADr&N%*g$ z#19Meh!^M4)?vR@L;|kd#7}0SscE9i!?+iQWnq3g4A>e)SfytOir|Ms*rYPl1Sy2= zl960nAI0x9US_!5AsK1(8H=b)u908<>%ywKf=`DQ#*dJph%s4l?-;#K<}E9aNb&H( z7U<)7%k`07TIyw*_gO54gsZR#m@w+;_GhuK=<>k&0W^a(|8@*fYqOwlz8R5U9vZP zy=Y!wR^VdztjlhP7G9goLA)9LM)-Ov!P~30Jw)1B?maZsm92H@Kd(r_o!!#&xPaq*7nv;gk}X%6qaEQoE3K zQf6FGg<7{X?I?J@Y)7%Fk{K#S&q4o%jeoX9hyNvsgvl;8z>*RjydVk)n#k;f|chu`NWRh)*F*=-mtn@-_*ukq!BY(A9tn!t~D(Cda+lYZ#2_G zU_Ew@T=2})t1i-I%=SsVux?qewR=j|R!`FinW1M;J!j8H`*WTrBzoK~h75&|c9roA z6H>B}9_^Ho+x;EaVZGw;$J=WmX}5~cJFj%4yZ~6r5c|u$Th|-ubxZUu!l!p|VhPb( zwVi=>wV5wx;$upKj_%k}22x+@6%UdvJK>r;uMQlBMdU)0^3_)SXK=m$N7{SGWBI=S zy&5Q*POrE;2OpXmaTNY1> z)7PTc&hE8ieCJQ*A+BZYln|rd8pQ#d9Wr)VYuG0wR+e+{*kPrF;^NR6-`8>b#KDVB zvT^$&pWu6qhH)cKWjZXn8~wualTV;>Wj3>H?GIck7yT%L(95k23Z^C{*`YBDcUj3D zDA1Of^km&AW)bcd+@EInF=#?>0NqAidjxpZbVjSe={M~7NA!CtsImDPZHu5F)O-hf zkz<3-$gKOkVAG>@0+hDUtw?`i)XwyRhuxkZ?~h~|V6f#+iHbD#Ji>0;!5NjSQFhrI zZN{8yo5&$r{^TMx{?T@#S-APVKKr(KJ@`y#|Di~OFY?)iyZiv=SDJA7edN{l2O(c;ZN$Q z{mzmc|LauLrpBB_S@6fGk)U(v4$?br?tF>p1ygbKdFQ#_^FAYXLu|MG41#bot^J5x zH}ixS9t?dgsj?r$cVN0nrq?U#DX;sLh4A9TM_hqvm1VRA&`>8xRJt^-P$e3?`z=Ay zA1Ex`-Zs*WnCs64qwH2vvx_2eGU4^Cnmd;^mRi5spQ_?|xB5!(g+&^e7A6u6b^to4#N4Bo*)9K~;oF?$B8Ao8?b}mjWud zC$p%WOn=8G%_0z`zj@o>P{Tq0o{pgZ?YnC3k7EqT3Zq(I^#JL(Q}*H#RSN#K{!V`L zn{ns$FRZ_D@VqlLiMB@=m3bEn@hnk~m-!VWU756ND^==Nn3~nujAB}5@F}tRd}1|g zt^s$fQKdZ(u*5dSJv)_{JQlLG<&%{s&IQzep=%~)3^fH35So+3Cbi$nnL1?$=p4q& z(~2+8%Y=sq7HB7_qvOue-(bP8a>^uhHm{tuAef5PmF_2IA#<8?3TF_Upa@kq57o1h zo}Z`_6|8Em{%85P!}1v{S`Pis@}a^Z!4qPxtvy24R5^8dJ<0bLYlzG9;U+8%8QDiV z_0P=1V|AF)VEt-8RhMyof10Vr3sfZu)+q({Xp!>eX8ImVuCk#w(_u?#F;w_0SYf`k zvUX3r^XP<;g|0K-^+gV;wgNeqhzauwi5g{&4reHE`HIt zX9$JpQq8WDqq>IS>)Bx6Y53a3ekVY4?5Xk&$wtMeO~-H?J?UzFIms%Gu1uCrM4vY% z-=?Kn*JyO3S+pM5mt!8~&ui~4@M_(s#4-o8;;Lw_HLO`Nf}iT zs7o&V`n|M)T-EW!nB3P`)HFZuPb!WN*NHvzKW8ma5a8+u&C~gfkMN9^&~t^E6jy24 zJR6Q5RGQ^~ovXMTzHVhDqlRWO@=5BEx8As# zwj%irLwC`)#x+ao=qYXyHHwqpx1ME8f_60t_Er+Y6s8m<{8mh zDzzW!H7rT?xz^z*Vtxu0mS^n&*CeW~$sMe+*G1>qzWa&dHux5tysH1wjqUAfiTr5e zP~N8G=?9a+i=(!$_$O!6?ZTXE!sGg6PGWn5%LIQL=0w~>xunm7I!Nqa^^-^_y)lG% zKvJO7pwj4>RK+Cql0>5E_ix8S?}oAlo|=g&)_?H0m>iSu@$*v5sfqGXYryC#OfHIdt}rpWxbAUDRYYnheV}t`^gYp!Md^BHnZLj~GLDg$m~JA4Zk)~mbkz6j zk~JG5v1m7nfNArjJFZV&*@kx3#mF@C{UC9RNO$@jc|FAA5Qcq`s{8?eJmLt56dn>7 zaR?Xj8Z+9*IYM+FWkgrch(|az$=%N)XO2xIfL^-m6=~-=TH?f-VpWu={i5X<$7|h5 zn(>&(UZU8iOHE?wtXRc}i7wZUn|e(o|3FXN%5OIKiYB{3nY1H#im5fO)k^4LVNoZZ zJs)B=zSS9GNFkgidwR zj>VE?q$}`PX>MVp1~XzGLg z(^tAus_DgvfR3AUBoUOj+JtAzILTG|{84@xU-KJjn`hjU{sJ*)gyJl~)%*`uZkef)DI ztgIZ1=kU&~()ONoy|{{b>b?GMRMW()+h=^#u{>HXmbKzZymOws6~n4avG|tQ7WyXv zzA+@Z_;mDWi|+TBc8_*pC)-{D(DZaNv$IN7j(xkB-nP`}+v>YVc$5@3gG8EY z8hE{82hZ;@;CmdmP z`2MV!U4&{A{qf?YZfPB%Ygs_WMGr-9ozu%~_sxmoUk;izo=zN}_YV);;HDZeyoH;_ za+Q^IkU^abPK%j>co)j<3k>ls*W!1b?wBdQQ(AoO=b5?Wg^F`=PcldpZZC{ynntZl z61ldY^}D-K=keJeWh65E+ijPSjy$#qk4IVRoLa6wt}Tx4k<0A1B=ouUF33ggRnm0~ zSpli@7t6Al5n$fyrVr4ZE>GGn_^FdlBFSLynpGm4z`Z}Yx2^}_)jN*L9qSM}nooKK1i)DlAm*3S{IxhvEGWmTT_^+8Yu)PSk zMh{o2;q*uy0=lT+@e3;YVj>Q z>OhN5kgZi3ZMWPrQw&2Fw>r1r{RNL$WwQNR7ezFw%;b5V2=|r?;rCm(Q-vC@K3L_? zhA9pGct$%YxkE9{j6YUg_paM4^lakN3x(Z#o!^3Q3av}k^H%0No=Mg~U9wL7s)f4J z*{Oe*ZGY8yRW#_y?8=gye6r!X*_BSwZAg~{Io?`HeQI`G(1FiaX;hT1V`uqh^RBWd z+l3~{ZrSFygl;PF7aHCUFHQ+t;5OB{R?-$UG6HW&l=Nr}?)B1LP0{`+>uS^4J2MT- zY6@Rtlw`>02bayznEn$t>BsnYHW%7<>s{=m$b5sXQ|s>!m84I5nWx5{&im~eRLqzW z-#`>*%|cc)O1^vN?|d4veZ>-jd(iMRC?=t#!#~Ps>%IDlY3&`QHv6Lc==Rnbra9Q! zwj|0m0Un8tq-4*#(d1tjRT6T*BspY-MQZQEbqYDislqyOhVx>NAmN&(pgYGy`M zW?2l45^HI=t*fBSPX0vd*O%Otyzq=Weo6--khvdO#P_xSTMSl=$MjIXcqksP1%#9gx zMc(`c)N??-7ORyn^|_=DpB``T{K1iGu*2JPT(&cyAwo7snVm65Xz15_NefDoOQ4o> zbsNf?5A;FvFMHSL0&vK9`v)?*aglc-s`ih_lv`JTd?XO0RQ{^m{NRuqISjHl^{|uZ zFCc1YW10?bx^GAAaUJ9v`}_N8F(z)a&1RGFM*|T#_A#Ipa7TarVbV{RJImZJ4T5;w zVMytU4~PzC9rAH9?eiSkqy7os|L4mfgLG4dnOW379rgF;`aNiwovpt+LmK+a3 zx+0un96rRy44|gm09+xbpGa@by!HT%CL1yM!R*}!^awRhLxeKpsh`lbzl6w&o4HEe z9`U;lvT(1}AJYYiyS z-lN1;?(Z(F`%ANx6yM=`dVa*TemIi|bs zMt21W?rbW&_Z3Y7R=-pUll9gj;7YuDgF!)z&;`U*gLpiQTji6qfPdkka>9dv@Sv#{ zwN6>Tv&q1}=!%AM4jMmyqWc-iv#GM{;m`lt5*GMRo$JtxBV$m)z^aItx-)-ZK#(0o zGB+QLP&__F>PO5wfbhmBdJ))sjw8Tr;Jo3-sef*3y4ilMK2Un~W#tf7+-|VAHu4&u z;a~dMu<4`}{TjSedUClqq%V8&>vW+^&T@iwre1KM#D1^-rI-v3@v1%R5 zAi^kY1O!k%Rz-zCxA|a4DXU2<+yM<*!%>L-F`TVH)CnEUPIFfixf z_h$|+zyHS95L8n@X4hI_`E>aqbN&Z;cD#rp@Mz)3R4k&Gs65ddAKn-MTpV$E1Dk)pw z>KTK@^gd9|xYf7i`CZjFNQ#rcMbDUARC*<@(+^4iqNpKT_a4^S7*Zm~Ny5ruDkQ!= z#CC|C#vz*$cqwhaLwje)VWT;m|_%ISp6;V*aUSmO_aJ z3|a$_=Z>%@ZGLpArn+kE-1oYb(3O1Ea=SaGni?2nrYqy6e{|>q34+HM*zRqjhL2?4 z8x1t(THKSaKwY{`WVf^wr6?#~2(Kl;za724$)M7DZ_p+q&8nvT&X?Sf*e}*u+1)1K zF_)^>s|1-9>d8gELVu|_Je(9cd^ae|Y;_5v^?{|a9^8Bkc4K6{S`=~H{L>wY_IZL6 zcMT6ZoPQ?UY?6p;@|0_H`r++xl@lgdhUzIeB+A-%Cm7L%ELs;+AL*YR07E;Fcd8@;7ZPxkGCyUl||{60x2k84lL2WvCFM1KTP)}_~oOuOQ>+27++HO zaty#s4#TAQq*c$Az^#6OJ$WgC0(Ra~bWa;6LUXtTiR@Y*kE{+z1-cF79~0B`8qqpe=@Uz*kS zt{Cj3=hI$$;!?@BSVHIu3W@0mQswG2IkhpcJ@t8&7l5)}AhHcg^s2V{#v}^cI_nIZ zUFXA;wg+&&1g&rW#gbiw-NX>Hv(+NAN8z>P%j5^dC>Op>&A^hhsie{AI(f~AVgwX+ zOA{7<>TIT(ThSNO$s>hDfgUUKcnH*_BRxoui6)ug3d^dJh{@ zbEPGKcQVVJ5=db~>f3qqjG819NE_Aov;$sD!z$7-6EEm~0Bg??NJ3)*4NBfsRi71h zIkf)&`S5OPU{Bgkr{fOo5ke|R$V1d_Mj4w#^zGa>L<1kpJ>t7dR+`;nL>d0IotR0a;vW_f%ac~HPK;H6^Ps@ zxDrrn#V&ypub%qi=#N70h(nbty9{>AJTIpx!S?4dxbebPYF}<=zo`dmHF9zsO-RgC zB$Z)+{2KN=*cGIq&MDsao1G48()<6%{ZVXylw|@6g3sjroX5XDICzQV0L@jOm#6Q& zv{>sH;|D|#o!&Yg@Wl#tEC=zY*71NnlzI=Y&?bu;GqME}!a#n^3JO6CL%@I30L)hy z?LdE86ES2@Q59-*M$ee5=55_IYdDGhb}VSBSU3=Y3?;x6wTY0+oe}d~%Qht?d|X&? z9&%oxSW|G4n^!iL0%aKBo0dKN!Z`$vk`@UvE9s@zvb6o>Pl&T4d)~<``hVQup`hlK z9J1$`U7$F;=fO^>O&au$GWHgpz8p`8Di?hc8W_QHg+S)mOkb9u{a=g$+P}rIAkqvCZCg&Awz#>4@7HBtwaKlW9;>tb|L*y(!0I}6@;wLZKjw@Wc`sbeI_h){ zhbpWVIWl>HSn0K%Vh|$6%Comh`%4wRKRL9#{@$r-g8-Z%l7bF9eB8Pv5A#GX z#E7X?V1C#ikC5D11@l(E&jE$;Ga>7+Ri{st?QOKkTpfFkCkw1mUdZ-kh#JVZJgKgR z5U`EGo10=k$+JT|{e(?;5OyoxIrS8~knmWzV@ix3%Az*{)@Q6EV6go-lRXN(Bo+i=LpBG(FcRPm@_eXh^VP(( zd8*`pA6+XlxT&Vv&SXzuv*zpt_1 zSA~ec*y8Y_Z7F^u=>EG1g-#$LNnrF1%>Vv-zpt9vA~zZCr3)OeUY|Db$DNjMTs!y= zT>bYy?cgtMLYk=#y;v}viu2S0E#Faf>>*dC!2?%0^qdX#4>`C)K9G`*1fK8v(vt4bJumu^^Xv1><=^O+ zLqqxJr)%$P!=QkRgyzr_d(OfGd#v8Z*&KS}p?fIlRN>W>B6FP%f64{06C35`i9?_C z@UIKmAhS@c=TLXZmeP@ciQ9|naKQA>yCTo5D?3d$*hhG4PIcvVm`1C&+(jCN*oY!K- z4-QE~A2B4`J_DhHSN{%H|BmehVBQ9owW>NsenKFg4b>)gnux_8i`5B%Bhe_8;1pp)*}!?uHK%`6i6=Bm6SHx6Ds zyhy`k4?$P{o^PSM$Xa7CwD{Be&OU>sFL}E62}o|LH3szv|Z6OLxd* ze0*TtpNfrOIrQxgkJT&^`I2os!{Y}{#w-DuRV|)++rLNfFZ)AAUAqCR%6g~QU;N<7 zrPh)at_t^+SRKea|7%iVgGPRpO9Mah(EPa}sEwySrxX8Rh8p{b)$BXpB04xKAt_{T zq&`1){nHozf8?zWf0;uQ8x;d{(`LAiITTP?sDhd3cZ=HnX^qDqQ{Qp>obJK-i(NuS zvB6XF@Zi;deI}tRFslJ-@0SkUBP$4gaQ2wu#J}!7I72=}ituKBueFE|9+rJ(kqq5z z`s??ZfB3+mG~kq8DGuI0_RX1BMR0%Av`F-2yg?rymY|H%dBU7(?@;3Y&xG zb@-O>+A@gTtc|Wcjr(2g`tLN<`XO1y`m1k_9lZMQpBzKx-RQ0f=b_2FkHlS~s{u|6 z$dN8IyYm0`PO`i{fJ0ANd+08O;8iok!VagW>DZCY9S1{OS>SFLQlP_}oa8D?dsZuUwpMBrvKOht zAK-{+4lQ64=QDgeu3k?9GJo;+kc#$w=lD!MdNaW$J+3}f$61Ka!d>>phiVtFc;@S|$UiFV*jO+s+y{-uiB`@8F8NO9sM?mB|9jQQ1XaOaKV z)@;VLX}79nIAR4LGD5#AEy?>k){nh_50;oS!BI{-YVL{&V~P0*=v1d8-u z=k3_&#c@Eb-5aSr)YAi+aOrbtweuw9bH8)YPuk`qGY_LBLDIeHcaDQlnYkF`<8)8W zI3Un>^JweAVjFXSZfo^>eZyrU< zLt5|TqD#%Tu|5X`cDqtuEF1cSwI=CbL+hwUD zCo%Rn=n$!KJP9I0C0)pqNW)9hBb(8CZc=WyIcr4yf zsj07A`8agWL$KQesW*7r7WVuBQ{b zD7$%hwEB8KWUtS^9{38m<9brj;ZGMnJoVn07z<*1a?9PTSnJ!HV_Jx`Vhj6N(0Z27 z*6Sw`)SRm8&Ux-%^S8~hMvD!BY?Ch?Jja7MBZVB8@fCj!*>{V6M2e*#&v%PHz-u4z z4Y7751A_r$jga!AI{}(0)Zf8b5rT|^&dH?3LS%LDL78<|?21ptmlxIM?_H*3KdZLN zOYeg>@;gRrw~xpC4=L^s#hBM7CojV z8?^7*rwco;SiIc{7@TC}i<`TTao(!AK8Lo9{tfKNM+=sjDHab9RwggV7>{uTTX& zG&Dl9bo>!>YFn)AO`Pa_0wxbfSv~~Fg^$O(tie@C@gUh@uS<^@{1l*|WWNCz zfyB8-ZR#B2*9>gZ@`1A7pA2&Kn%7mK`O#3xpjF-rD4G+VJ%wI%2~9_~fcANie~Hcq zjhR(Y5?cRC8~ZRr0P({287~qIe+GSlUV%Z)@33+yNWu6MP|xgW3OtEj}&Qgs4y+BDJzB6pz?gs*a<|02O2T**}^A9o1?;~ zGh}vcZU;^-BK1&xr>2us@kmgF+F5Ea2Q61JNJL+c+g$=0?sSXQG~nx0scj&~??4*h zY+g_ky->>f&5vQ?+H*S?@sRhS~TUtu{rvYU{nWvoWa?WKye_WEIqm>ny>&kbz3d z_QRBtlpUt`Sz5<1fNluwK zFJ8+C+E6dR^Q1jciD%cyWzu&RR>&XS{pr#mwLTp6lK{`s8^we>Y!wNhi1#m$WMZQ?oZ4t91qhDy6R7ABUJZp~SQ=V zL9#2v+Rh>W!atB{j^-U`I5bF(EI;wOxCk52!~D?2xd%$+AfWYvo&0s+%e)cLSL!jZ zmLy+c9=u)AxhWv4pep^l%3``RPP;bKExmqX)DVs3ezPO6-F~f_(jMyljvyHsebJz# zye9LSf=F7ltCB|h`i-yTXS%c`PI=Lm-{Q{| zEMFTJJ>v90cu;2iD&BL#H{^t+?_6%VuUaXealQiJAL7%m(#~AMA5@H@5KU3Vd!VT_ z`YUnKgY&KC$ES@hH*_l)>1B{uAh|+_^Iy^3!9Yq#3(lXXwjXnGE+ZI$Nhch0LaH5& zTj$0eK#-Z7Zi`z4$EMW{`o)uUjAA4Ed+UJ!QD-6YNY{+VaHtm% z`l6!Ny9>joNgdGg5}_?e@FayAqwuU+d~rt%g(@#Gqg^3td-kit8!aLM<<4wXbR~W` zXQMir`ZpBnR?wZLk3Qi}jEd->suvMpYx#08}Dq6s2Q*2>eE`E7JP`W9|;*wYaQo9CbFt!=}Z$ zsF#*`!ui!utlSRne;pe32_MHF3O%SM>8o;#DCMy>HhPaGxhN^EvA4t&WQ;mOKb?P> zt9u6%66$D4YkT%2e^%s5E5l_`KcW5Z!-x`6e!IUoU3q>@KH-&vK$GjR`l=N=WZbJB zmw0^=LByfboiwAu37*PAuz%+^lix)@c^PGQG!O#dZocH(bU!M10bRlUhPvrnAIakF zAT)WoaSdHX+<=u+)NE~#WJFiW-oEm4{x>MajPFY7@aN5LQ zMR2-YHBfaVDM|nJDeb4hI=T7c4Y6891p&o_qb|8m&JRNtH3&(KPIJ{NpvmeV{a z=3GfRQ&|i7)Y1_1K89If@UPMAw62k|z@kh{iGM#QO1Cbt`pIGg)`Tv2u~Ast{;51p z0o!7TeeD)h-)q*I@F}*H4}lr~ZT)b#7c%)+CO$D8`l>~>qFSu(Lix+kyR#GVGoA=O zKD$Qj5Mq6pesW|U$k1N>M2sss29j9ud-TiovS*!I|ljyQ;8Q0|*S`GnD zy(S9IhMou1cxz3;UwftJXjfT3aP?+&heoBXv3E;vK8~v6W(Xa}yP;ktHlW{hv~%WV z$`ne{3Fn>Q-0nBx+MrfF-QJX;rua8zyeYYN|E_yO;)DpZ#r+j;58awkLRf0*8 zfPY%O+39)&=3dpv%Qu%WGZ$0O&54bDrLCe%6MFV8>+2^@g|RDoNo6_uHC`#YuBu{M zCD&|vMY=;!3SIKiHC*|boL#h1@2*U*?9xcBuM)>}v`JAmIq*-fI6Gahz)Y+qmYp|= zzDlj~Ho*(O;1oM{E(Ch$oklTdhEZIA{ytGU(LmwRsRMGl)E2$ zw7*``yh9+S>gRTbcj?GFcMP|KNE}FSl4m|t)U#-sm(1TX4Y`F`a%WW2ts?Unt7&bN1iAFe z$FXPD*kA9?45S~YmAZMQWq`{c6{Pf>15MO2$s08Q3X2e5PB~h2t;jj&+E7XpC`?jF zQKja0HOR^+rO}zAh+WC6ENK$kL-LOt)jmNlwPZ;>Tcqns^hvd~2kd9@FFntkin-VP zt`>pY{*@wi$^N!M@^ds&?x~Jl?%KOo^nO8a*>eSDadSWRIMI4ayyLHICN8$hZ@!w2 zDQS8#QpBUASs(9VzRGabUlKYJuw!#Y0zYM!zE}pC6p1~lY)V@Vx~DNV!u*xljWeL1rZms?LVjFV1_e5)fuB00ZIC1RGt=dMGU(kiH^WyG8h zq`f8{Tsjs&{~**axDhqruN>GNOCldsXX^RrElJCT*-7*q()dU9*=aMxE&O)PH5&{` zZ133-4hzaNixfM{I4(A6;P=TANscNDc#F5u$LwcT+I+JyW9H?2J3-09UnfaqsMc&T z8$s}7z@6|BU!zbW$+Fh>2LPie!CSauf>T0;T@@xv>yIw{$|~1B&R?l*nWy2@mW+WG z^Q8v8P0%%+#N3;oEL>M>#oeyxPj*Y0JeOfeo7dOy%gq}_=sJE`+OyYGvO!(t=lTrO z;3-eJ??FMS_Gx7nkn+k+wjbz}QyJ$yCOF)GebSd8>OuW6*6a}4Ik}|5r@0}dhQd@X zDx#w;YhKyZ*hZ^YgTLOOJ=#4GXp$RcpS0Xd1_1#ny))LY=36MvJ0mCM5^TFK!Sn8R zR6ht|EAuK`cvjU$J~p}dxMIDeFn9Svf7=pkREObbXTj|^k%po*M%bZ0)d7S zqopc}6B-*PKFS7^MxewmgcH694GAuTb6myKwzsHRb(AwN1nDU*7QUKA2?=Mlk>C}2 z{VPgCv|QWd7~7lK?{IDdhVj}t6m+w`e!<5ZJ#b?3m~Y5Zaa2R{-F9w0ljh+sv`)K$7;)=8nptl+fWE;Zx>x;0=To-Nb`}^IWdAh3nR%>Pg!WMsWGsrt#lpj< zA%i#{OOj-E*O05~BNE5;IicK1EnQEEjsrW;YP>5EFQ)Qz=+xOK`qAe53MjO+!6ROd7Z!Int->S0MXU&g--Yx-~B)-5wB#p~zXMK>yXT zPE;c$af&sI;p%^;YMA=jK*5CkC#rF`8grn(JO2C+l< z_X!)V&dVh*Xa*~4pECzSr#0~EKIA!Iz4Jf>WwC1r!PQMD7ZvhbinHA)QB@QNL~RXN`(Xvc?A4YE9r z!Ep^X5vT{Kb2lZ&V&mBeIqK(r2s~;S^0=Fh6V|Kx)Z^@TC1^P}GnDVeVok+86%lBwq3dxgIGg>pbU@LDY(#s=UFHsjYwW~@(N_BDL8-0 zuWC`G5M;Wk8Y%I7UYnYK}hNLWm9wio^sS@y?;b%o)$}Da#2xYcmeXlk~d{iWpV$r&i zu>id%Y;ag7%_801nU-1XCsT^hKVAw@c)fKqiA&q-4NQANjaDw*T?hdrxx~r2N8hy6%E9Ki!}t z`|bzS(t4rKyKe=v|5T_05-*ChhG%i^)FE;;OMB}zGIn{@TXQ~WfjNb9zxxCaJfr+Gvq(#eNwqaiV zP2;QI#UDSd2cf_b$`6o#m8bsVH{+8vCAMxw{mYNb>$qb)pj8b&PA3-TzPiNM6y4b; zb1%7e`M;~dZH@kg$&9&F12mrQnMmN)O`FwHXtuWWqr|xH9DTR*Pb~~?G-FJ&4 z=x$3=U8;@bf1G)F5Zzy^FURMOdin7jX1pzlXV6u*&F%*CQ^y1zR*6hI$LHBrY#W|D_r2$Dfd8!v|V*8&05zHCrM6I zPU3par~THJ>@!=Z8OEoTeJyDN;oH9^~N|i zYJ{ka#({bOqkkiKa^R>otJ5P91qwxd07&B|$&Opv9RJ+Lrp-xq!e}`A{5`J~PS=KP zJVw){LY?)>hXkP^0u@}Y%9RXLe{%u2wDns)MWMUK2DNCKsH15yWjo4KL^IH_MW!Pb zF3`lL^eeoJJJ;ic0}hf39nl6IB58b(0BcG<(K<~AR2w{ElYi`c#O%FImRHu z(T{A};D;ny8189IDIU+eQoJs9F#&by+a`||B^4iV2k(Gw##BCPObf%YJK7-G3)+N{ zB^}ihQi1@#6?9B%e-JVnEY0}Sa&NT*msy*k)@<4_ZSet%YfnmdY^NgvE8dU19j8bGejxNu+knH`oT#jNo#Z@x=|ogWG^6W=K&s%aLio?|$OnDv(~!ubPbtfp#m>=YBerRp#yPFsRd0j>G;($C95l$=$smyF`8 zD8BV^9Cv$tZ!N5hLG5ITmp#|W4Y%lr^aq@}Qx_5Q_F8hx{65Zet zBxQ~cxlYbnF{*G1ywjbEKz#-Hbf0vRbYYW~Pxo>uv`ct8VQa`b#q%H1j<7%HD>~iE zMrOwoxG)(J=q+Xfge(d;q$!h;$e_WkDwQzdb4BIQNl#0|<`<{rhgb)m!{bB@u1nyVD*xY=JURW=%`k{{_ZxnXbv3z8O0Qb z7gPEv)BZf8$s3KF28CC(PGi(x6yv$sak_oT95t1>=U{j=&`a6N|4oO z(VXTTm*`3rBtjE`Xl+oHM$`ik;EY1Q9K5%O^w5|u+;8B>*ss;v(}4;`~=RyyAa`n?<{voo2y?nRmPMa;v;#7-RKiuTco2 zO9(H-k1G_%Elxn{|HWAq?#ECH);1~3JuA|5qCOGY&7`N|tKSt1cRI6l7Tfe(_TDZ^ z-p!fv63DZTm%c!Jb%sn|LeNmq4^=f^3Y#x;jKho0_f|kl-Q}*|C(to9@*I0@qyr9v zgqrgf$eDiE;E!i|d^poLJp4SN-mZ$OM;4s^>pC82_4ECthIIzQv~2ULOpld|u_AMUhgM zxk}@qAocDma;){vlvu~=C^Wyo(f+^|=K7{7$E_*rRI*SP7VWs2vhzmD3~9G+ruv~E z*F;^eofZBP{ z-0SRLP7b9-Wy5;W)4!4N`f<}0;nSI~p1jVbS7CU>$+*!?fJu4|+-Wq$NYZS7W-u`(pAy_K=nYHhOu$Y4RFm^V= zbB}{X>xIgnuE%ymM{3b+R&WrfF-q-^9;0loHrM^Sq`*<7wgS+F9PAU9XAiEr=^*_n zhL2!`3a1wEC|y<0w(oa6^(s!j76>J}>UQ<7KQ!W)lRShQI3hHDucH{76V~sdfL;ND zmzW7KMB9+*$HG+*`S1l(5r%N3*aKAI%ka;oCpx7jQ!Fj+(D--Ns(r*&015!mGWni0 znQ#21EqdpcHFB)XMpN|lky4ztV_BKJ$IQ|RIpd*qC}6#1)Wh;!ahu?ddH91C?RVmt zTwKMM8-9@*T_<`mcLznk-q&rah*}rI81VeCgqfTC0UZok-6@_0H#EN9;)LcBi<3_( zfsX_!4?24_kc!T`LpR@#uGC$q%jQ$2viRi$@+zKt#Xb2_1M#&rd(j#_`$(EE%Y!f( zDf?g`_{k*(CWto@uDf+B!^e4Z!n+Z)hvE1l@JkT7_aVF45myApzrB>uJo?mYmF>h@ zQ5SHR8D0J9y^Qn4-bNN9|9<4-Ez#qyTY3Y2G6&rc;xp{eYh4E}Jr zYzab^QiZ>$BUJOcE#o3l5iRT!(CXF2%2lWP@om3};W^pXE9=ddj=P%q^(R8#ZP{X0 zMv~gpHnh?Wxgb4TB-cNuN&9HXqGNI>uGVo0b~H-e1E|2&q|32E_LN%Alx)aqog%TY zhAA_J#;x1s7s^B^^Dy4 zSx2`mG~VJ0S-E{ttB<2I3)yCSN0k%f;^kG>0gF@PdC+BD zo;SZvj_HNcLuh(9r+Xw4`fQO)u?p2&P%L;rQ+dut!H)6Q-`SkiljZMIeKQG%yga5t$q{=1Nooih>!jGz!OK*NED5*jsGus0fj{t7B?@| zU_~-f7PmM;C)YQ{GH^@{D8suHL{+PIbDUCT41sMW@bYWT2h6xKD^SQgBh66S&h3?i z7a-jkAm(&BR#5!c7mI8QCszK(w$H^({`BT=`>v`Fbs4Gvsa$nLN&Ma#kLLIu(oQ>` zY7+e(@&lAeNDjB2W%+npZ+d*vF(_)ePnzE8dLcRIuLdN<8&_}$irVON6|+p=G)q__ zf#x~A5xdRMktg+#@;x)&c+c4bxXlSCxwTZTwUk+>#Bw(h^~~vy1l>p_ml{qrj#Xad z*}Ot`d}1!e-2RivEg1yyf$Ms^5CUWVc@T$S(aO1+!MzB;AW(|;2={`6_!GLjuH{~d z&Yy{N$WLa5aPf8MTurWOl|OlX_{*(VVRF=qsq#QM;9UmPwjDh-@ekH~$UI(1Fjl3e zZsnZly>M$0fz@qH33^|bT=9OFda~&li3g#9a zV*r~GT02(W8I*Lp9->Ja040Qw$0(?oZ;reoOYLle=CaDyKVMxERLIkvMfcPo_zeX9 zGE41wZaIdgYSxeIm+DH_rr4TVvL=0fE87CAz{%)e@#C(rg5{_q{btVc_>YYu-LEu2 z)yDH+3~T6w^e}dl3kS0UY8g0ex|Q zjfo_0YB+~(e@A-mVu4poZuQc$;v<{v>vWr}8YM4#|8l0TYD`m)pUb4(z1sFBe)NbX zHZ@91%`S04@9Ool(TNM){#ix+~ogts^bB|i5m ze~NM1Yo>RwE#E=Pvs(fm>>df}Oh#|b`*^t&D@=a$LtuAuS6=!53x;+O59?zBPPj+? zc|%BcLZgM88^DY-qcVFnZ8ZG6X5^XFqTXoWhz`7ZDt$UdGO( zsEbX01CIK1fFX_aifYl=V9jl%+OXQ0daybZQLpHrGBtKv(k+w7$u*C>YW@FX@4e%x z{@*{~lIpbWCW$g5GK$QiVP}s}8ahT&$dQo}IVH*pnOT`BBfCVTL`I2F*(6yB(S2Qh z<(&F_`rMDl{m1>+_dlJ}dB0!tn$PQbX_r^}sF`_0Zx?K5?fZJzL#lLbA?-rirK;9m zBZx%`)i7sx_)Ib|_{)MNBto4v+ZE3B*3)nooSJ-;%`R)HNonPvRHl%hZi8C3KjRu?^KX~=XPba_}gRtc0{10wWd2lYv#jcTXVj3Bx3XFJsx5# z;?ht@PorV;YGmJ*bW>%mfIfo-*kJoN_iofCnGbuehgmraUi>` zuhZtj5Lbu$s&O8(l!vj##WIXXxJ!g-Z`O-_R0dA#utR`OJkyX9_n+umEI=Ua=iCr0 zu;2?j`(v%eCGHPB_Fqw!zx=SE{6g-L+U3669c`mr4Wj35dPL?=Ydj+`^mI$= zO|L5trBwCUWSv5|{EKaugna4nSLceRXDlT6eA{F9xYX1iOs+~_;b*&mE2SguB*2`O zT`~MpqcMJ>p2<{Zugn+rC$YOcqZUTgmn(?$4MF|tGFxKUs23fF;JKSKt)uZfe8>rD zLw;V5>-oo5S<^%>`Y8N)Q&SHRzjnx1T$;D=PE{L(`T!U8ZO;X4 zUL>s8rc6-$B7Xn1q2-oU##=VO`kD* zpgH(X_H=wYn?QejTi=+?g;#td8g(D?!`n7Mnpiz=aUy4v(0H;qg4RRcjoI}62lOur znSB=V+;L7MGS~z>5ZZLpl3`fo%0+`KOBAER;W9JVmH-I+64!g13-Wiizo$jm{zcuC zvfpbvemAo|Al%*Ap)jxZKtZeDZNhH0Am_)NYB`u@TqW|XgZ za^C_Y(0PkWG!Jv;9@BWU_I4@#=eu-p4QfKu+BeZOTdNDLd$xHC%S z5KBH(wj}KS;Q3$Kg7*Y{^&^z(%GM*Ah~*x+;g7{0}z=&7K4ug`_z`SCgH zM2ZWs{`HN5&wnBQ%@y->X&kf z!>5e-t^zHaH-CX_%;Fizw?Ll6#$tFfTIhIXfZAiJ-|JZBiYwd?;L^pWIxV9vr*s#_ zyQVS}_K?;|{XM_wgc9@t5?OT35x8e=(th5vn?z?q2^v;J}M z0twW^eTvn!?a4APd}#Byg!I8%uPIr!Z3CJ>U$S!wQ>8wA<)KGJ`jf6O85!{V1MVm#%o~g1q@lJfi%{b%CjK@8O-h+32Y zyj*#%#a{2>*lVK&m+0eIZA&-rPjtl@xl*+YBc^lxK` z;--a|JL9#z9PUGV;7xA<|MvtuyQXcIAU$O9tzw@H!)LI*``$rrgH=sxsMMmkXb8*{ zPxLn2Ee)<)q86$HW0Rv9&s1p{bIDX0~FG1VJWIXSUm?u$k zmMTaJ3OV-7W{LGCX+jU2?FcX=S~%spmY~T z-oO_%VfUzK%q52BB5zXQyTWET0IQA{cidDify9>n5l3M5WQC)3-y(7aEiV?ZJcK6X zC4;Wx`899e=!HiDuMx70v0zqy^Q~vxhzU3i;fSu5d(c$V6SnsO@T~aCOrB(5?3@OV zpBwGe15zW;O=q?vrPzdaBami4fnfXk>mYkhgOK7DrsoL5kQ_Rqv*Gil=Yc%K3;y@6 zchK7D1H$IXmXI@Ef>EL;Kscdarq}imh+m$dHP7bueTZpCH~l=o=AAim$46Yr#HTNY zjdo`T|N5=7lu8JVJ_JNNywlDr7u|CO-o3C@mjT?jc>^#2%zs5cQRTUl*c%tDmVf0Q zohtF)Mb;g>tUbfxV!s`bS=ErSW&h!e^lQj|-B4{pIR7bQpW;Aklq3HnfCeL&4OsFf3C7YAe<*;3jeAaRIt zpzj^G%#io#!NT!)$D~VTPZ5ngOB#gu`rZdS1I6iCHytuG^WI{p2DEl=%S-`oO+yo< z<~gq$R*L{UJ4Vc(b`(#j&hqHFcF`cO~_$uypDJ5U8En(iJU*J|lh1k1klr zT8^828%sF*`q#K3=fkH;?XLrZd?av(_g1O%Cw)O%g7%=_}_fqHhHpLvwj z8CGSNO)noa4R2mP^RGpR?Wm1y4Fpd72J>KyfKQj0ma&|^Prv4xUpGMKRcO{py?TFx zYrTmLFooR9JP!tU!tn>gxlp+vN{S^tH)_2ZbS+fU-eMLVuI^=UB4o>VBqq9YScrBT z`fc`XtE9Oj9L=(PdCZ}?)&A#7wxoVYbs4{rsRY?fhBXR8A5R+om3mM&0_>Sk+cI0GIVsb&Lj4nL6e z36gfWAp6vTHU6vaOX--H^n+Kk5?Hd1$S}7;&mRxaOb-}dz4u=1EA{ru6p#Q`;-Vx|Syu@+v@z*xDAE&|7jI*9`>C=i_ zij`|w)lY$6CQKh7NKo6yz?jjtxkLWK1F+mX-_K8%+4{WfrqNra>OC8toTX>Gc7Kz8 zjNosCm2-mDJp-ldr^c}Rze!i*0rb!PDlp}-85UuAwjbgpz5(x#)Zx=XX`$lQh7TdX z{RBAR4v`*wD1qJPLiMP#!7-l%sGg*03=WV!e3++vDDb)C^!vrK1mrnk&i;JE>#PTF zs$i+S-4j#dm6J125v1+)CGpa^O;$kgy1aO@A-(o%0IyaF6wxsS9U6wFe{DycnC*Xj z^P(jTM0>I*^@y<>bFyEtlUI!O6f9gDr?Lhktu~qF=Ddp+=ytDQpU=CR zeLhXJ$0OfrXSZ(0!4v2FTdZ=QTc%yTeYWdGh)B2CxQyGkg7lEGVf!KVln9ZNHBle8 zr`{`B+6#jH`J1XsQdN52dD+O_cOqj@@DhOsM?i2PNoff;ErE_*?!vtJG(Z1v@1v*d zxEqlx#PI8r`7}P8*(>VyKNv7tzdNc>KBAGq5{itJGpcm01R4rTlf*MDsvuAhitL)B z5SNH;T$vPCD^+n8M0h;VEfrd=OP<_tref2C6KaEPMc>S12HT3=RxS!$Q7lPh>v((k z(u!JOUebNL8Or{M#GabyVns&dEuNP==D!S=A zLf|f5J)wF%u-R8ppL;`$=&Ir6YlPTaAmywY;d2#vth{cM*I$&n?7=xV!=HadIW43m zC7nBU?b_Vr<)oJphU-T@O=f#Con-6q7Dy!zq%HN6=(@$}Wx!Fx!2bmAP+2NhIryDB z2B1u(7mmH9=El{9PGd^+79m1Mc9YUce%%nGRR`e0sa6xdbd#y-}VPb zuU&Y7UA;m5#(ajkuM(B#%SYth*4@}pK?B>JQP==MwwhBnQL7GQ)~TuPmcqE7A@H`2 zeATD-lfWt|4;M0Q6XRG$Q#F?A#T;;g13%oi3-zACIRFX9#|0TC6g}Dv#XEG{K|!d7UW?AUN?5Mwcfc<}Y}433&QsHBI8W0OqYEkDSR9n| zOJFgty0s*8Q;h*kzX_YTb%vRh-PSkY(v9I&N^uZ3b3cI>h^ccjt18lAb+AmtULEj`2E=Mmgp7N!)Z`OV7&Fl~wjLi>7 zyHdNxGV;_@UTUTIX_1PPFG^wEvmszgMv_lG{NQPa#B=FBsZY|tu+4-z)$Y7+Ge}yt z*q6K)f+*%#@G){+Zy^a|;G>wya*X@Oh%d;kA`pg0=jG{94k^1IE$KUfP#+>^zL11O zqIPh`f+R7V*92wUb#SYK`%U494x8A*70!u;7RgM(ox**KSFs&3S{zE}4ZvS~aXbE@JWWp1L#tu+w{DYX$B0_WZZRuD2moRe00ya;?1xivB zbz~x-Xbj9{2MbNTLw0(8+}SV5gU%r9$a*=Bx54JB1KeR`&JzB0cDjDtla{<1Ok)^U zTFFwDyPHa0|KEA2aiO^=)nY!NN;$)X@9J`X-EJ%|3H6t8y=geJD0QJ*grBB;9*$>pP@N4`QA&gSBzilMBqqU zCqP-oqFVg1y1VK**x0vA;rG5J| z#F_(?QXEDBch_|yqf+zxXG4Cd^*iMR?I&vCHs3Y@IUov^X9;M+mFb!bq>Aditp<{` z2pK@mRVF=qdGvBz(2O{jW#e8&j}Mr`lzJ(A^l2=*Hoi811FLRs${KUAw(Dn^yD2}H z=pyXmGM*$Veb;jagr*?(R~niu0lMT~thVk2xqE<~<%&SmiBMv^gPXR;MXWX(&IOS! zyJEd~N-ECEcaO>GteOw96;(R;kQ*!8}*8u8J0yhUz(NKZ7G zUFdhQ+0vPj6^P z(x0cePLRDqWWdvDPGPXiMNPw*8Q3vGJD-M?ZYP|rk=NQ~cQRBPpfKy;AxVZ?F>-pe zB(uwr*eyQ&4C8_;I<98xvk(re2o0GQ=U3i`v~U8auhjkfe39y^ehCwMzzpAGa+y~* z*CJWLky|%2>CjqBaG6!%u-G|)c|MYTx=cw?cm{;22&;YlL2LV7wmho|IeO+&? zvpoK(F@t0uO;}O|EC;qM~tXUBYaDela?GhtM6P!O!eUIyK826j3c zfrTWqEdNl*Q3Q@*1;jFV-xe1KB;WbF1x}lF~DF+S2EBOzMeQwz$4Z#=iyif3j z<#1Opu5tmlM?z{8+>!*7LZ{BdH8+(74Zg1CHotAV*CdtuC6o!*6mT58ouh+wobSY& zHUPUb5h2IPx#y|Y6;D4zO)pAWzkjGm5teenO9;buYg4Z;q1%a)5YbUgkG(J*nTl5B zmnW;#f!bGS1I++S&nNb3kOd*om;GkB?N4QtDG?7L^3>(8OT~4O1@>(bn8S`j*-yyD zUOZ44eq0h<>0#1$$gU2?VryWDFBoBqMb$*oiMTJ%&rMI)1lI1bg$(4W)xbk=ZBSBf z_+#jg0zkXOZ|;zxx&p?V;0iD&O~Msm`UVR$LgviqyR!SRA+6-DinGvgI}R$+1y&J3 zqpHzM^`GqB?`Qt8)SHObb96ZJYywkX?;oMua|p59T*0^vOgHIT z2!({TjR8(0*ytq)&aL54zn?n;u}u}Ec$XPpMKw8`|9`45czYCiAwTdgVT^94JIeR=Wlr zz0OID1@$7NSvg&2ALWS59&Nj5xR$Fw_JvX%bY1Wk4C8Ds;YUdaqWCXL4Y{D_FA3VJ z4h~Jt$L^=ur|G-i!mEeL(jcv$9~+Qd*O3b~!L_jb{!>%1*?|~SaV`SiAfBFcZ^uYa zzD-+^f1%dGKNlkl4zF>4@;Rz2XbAFy_*PK>|EqS09N1qUMUE;)Bt$szfhpzEJ2N$? zjuh*mLPtuD(O~ad5GIa>V6BF}>p$sd4qjC+cmmH|6pN8|Mdk;POx)C4M!x#$&c1}8 zl0CW6Zoi*~dG3OYaJ#n~vQmjMAfRVgU%&Gdo)Eb)g0`m-@W$K_MbpIgH1<%+gQBT3 z`8PQC#k)>Vst$#m6e8Bfj)KgJU(Dvn-U2pWZ?qSilBx5MqN@W0Kh(f5I}27?Ze*C_h1k!nqFz){MuHF*Jg-BhzXvCL+5686l8^F4@wm|eawIq)q^ardX?{8|>9^ z$wH9L|6SXgqOVz_K)RCgX-=e=23_UH>_$n&Wsx_a-03HSSSyhchLPDm@oM%frE_OFuB>o7xnP)xuCiC&vdP z5oUVd#VTCv@S_W80>%TYi_i*I$;^T`ub*L6p{T>B#!QG?$LotF@USi!o{bR~aaKYr zj*zbanu*D0lD~tFv6nMw?}!b1L&5BOK9w4-aJn0O>&hHBh1GUYA)E7BTbgQ-@n8ro z1Y3`HUal(TuFD03hhn!RSq)vns0Rzp7KUM=ac(o@L3XX!C{s|ScWs>*ABKD?tdWO> z$>^+3kp2*tZV`BZ2DKpNf=&R*RAsY&_`Zi+x}Uwjs9PD>!_b1Po7Q)bKrfAuci9vS z?Ikx{L=xppkOe{0WzVp0iyb_#bCwr<05adIpL6VlA!@^9WT}`74N7W(&#FOF#GdL% zqX2%S4I@@rc$16jbGtmakO}^Mez-4rO7EeGjmbJ`C%ex@si&1wN*;h^5Dx@G0y)!A zt)l07ft(Qz0#NI1sl*?9QlkcY;&73uMztpixF<{R%qpg+U9{NcJriUZO8f1_p8?nT;z%$o zK9|>Nj!_2wAz1#kyt?_`49%9tK)W(gFdV6W#Qds2c7=RMVjJA=5f(l4Fa71zN6*3m zj0ZrWj4T^}_d7s25&npl)$#)9T%m9yBeE7a&;-SKlM@em7Q_?+z!XI%C`!9tX|MH`+?`& z{FTq2&T-9rnD@#kk_SaTxD(MjJh7Vgr5b|4|PNkbO|t86le9w*GiZUb%n zmNK$b)$@8}ZgRBOAIWVtSm=WjZ)6d3 zT~2lBwY4H#K5WvGfXX)Ng;3P94_W#?C*D7D=XD();05DPjXYyAV{twWi1oL~ZgeSY zdjXd~rY!Jm(@5I&Y@eD}U@G{PukFr=Yec4=1-n@X>dsQ#=GpCk4kHrCPuw!M$Z}DZ zsN-Ji4btXmAFho(z?;1`4}^)PCBL`!N_Jf?2}nuT0{L4@r3JMboZBZ+P~^l#A8%3} zxKn7kvz*wrsYZ+jj7Agkk0vcV%htKe?4E=n znXEfb9a<-H zLIs0hbsSf>*6N4UG=C_B)0(Z?zITBHiGc84s?>EbOm@J%OeQhD z`C|)V++sWsR=nhYqJr{OpB$XNm0Yj5MI#=85q)dXigooJPpSb=0F*`3i3f~3%b>?X zAV!AnTY%uLejJ(j4PaHZ@HV~Ht5H?pHfuo~4Cx2awzCacDf|6PCY;6KH`qU`4w7Pr zOiZD318<2y`9?Qq#BHCQhJ0=JhAyIdbIcQOM(%i!N!%?U{UoHc>Z>6jMT9wGBPK1h zX0)_}%L#qjPS%k7?FDJ80_LSf9`KxKjv56t=o$&khBE;jyfuky*WL>~=xC!W4&3eX zq+<0*8Q#fOumozMX_oP8-whJmSt0JlOe&v+VOh}K#!?@B@t~UhmP4U_6 z+(bEDKhIl_CTy=@X9KmuNCm}^NpmMuPHfpBAS>&ImW;e!Ym$c)^p63N-`4)n$l3S} zNH1jrX^3D4B#$~nq>TtXiCYI10kF{Xs?*-~3?L~IKtN_bd~qbG@`4KOISvi&0EoZD zV_-SmQLCO=KH_Vpk2yx}q*}pIO6y4~Ylr+*2)1zG8V5F>xJ)o{gX}SnLv`gJsZoIHlV%q)OVw4_SFV|4iy~( zbk8@?^7Uc2kb;GVwgdbBaq0fkHLAb%2%??-m$=F)q!Cd zmT4>h&lvz0kyK0jCjrW3Ac!)9OzQhUmQy7lJ_@}8zVb;dtt)e56@Yj??^BT{%SB=# zb|79>DZj^a`2iR)n;|jTI_2V7==H>`I;^XeQT7_!Ya!^s4i0iWBHIf#Mn_?mvfvaX zan{pkPLyqPy@4S!*ugu%xVSnFly?}^-IFT@^&;nu2NR9%n01Q_2qBT%-O&GBc zR@-gRyG8GDc$&bN3KS!~pp&cLWHh`*52$*2&p$UA1Bxv+pM9t{Id*eJyPjOsqJI|D9NZ!G0LtZ&K)*rk_tZE7w zcQ6ueDyob)4oQe%jM$GrvLjW@X|(6rQ!y}_3zn+CdIqBJwm4X_&JuP#HC)ZX*n_PX zN*V=1yN+JVI-?Vb=27~6Em28myQfKeh0M@wjTyX&?YeEex`WT6Az*sv=iH9pil4X@x|n2WIR#fP z7EwE$?S<#Z)#&|*CT3+}->%1`6wgc&8}A*NxKDx%KuI1XyU6jKLulqcz7rF(y@D}1 z3JvJ8RPD7Ty!;8LhXJP*i}Y4jSs-h=b(~{3vR7VZz7V4V^+LpsiW|ho3s=8@PQ;Xf z{*tM#AX7i@7~e}ZyOfId9dc1z3m2_od$;)t1OKy9i*2)4PXe$`b+BJ;AMedh;5;U3 zl3!;w9^?ES8UM(Slt%{Q z`HIyuO#wRJ&}MsoL$q|YU!)Zs@Juezk)Y; z0HS!-6Q2OM7lciXhV!!gg?M)>gwuC;Tc?{%CCA(bZ-)q=pRIxklWUrz6bXquwuJ!m zO28Tn#fD>Poh$y4IiF9{!Ug8Bb-jrKMVW|U?tXq?eX>_ zcWJg(+vMw<+VwUC2U}&KK}{_(oI10P2Lnuhl z3;nErS%;0oiq3)o+R37Qypu^ylC$D0G<=DLWJ-av7Ht4WqP77_Judz&*ul{sxZk!F z-9pad;fz}k5X%z|)<$mHnZStqHyEjo#{Y$a+)qLFw%6gzw#}6D^qzmdJe%wS8Zo{v zV72hfh826TJ*cQv69E4n^Dkb15H53+OT$77(ydx7Xv zpdXEYj1_eCza$J}_Zww2c;33D#GGyS*&%MQuovW`GBU=!@hzSQi_0R)o&OP0f(y@vkuPDVZCrEnuBid(wnBPZrYLA3GGoVK^57Zw3vg$M z#nWG*$xW6n`Ed0u;iI+S72if4R<41Mxm}MV;GYEt=uTW(A-+FjpbiKQe#BurPz;u+ z>b85Y%!eqRV>PJ1&^;oyY@I;0ctR5LOLYhlO6RP}1n)i0w*6^m|F>@N8I*@s9E4pS z0f1wtUlruHZ%$ovTM4;PyBhh$acfW9+Jr%MiBd!!1&pghpd0gWVHi{;;1@4E`(E418SNChyJ%1G%@e5Z1ap-JZ$+(Tq=wz7){p8)Pvw`|8 z3HPy`+jG2!j(mgXAZ4h#0DS^Y4b{*RvAV3HZEpxOB>l|K9X?o2=?Bp=d{!tL2Tu zeAxqJW^ZyW-~}36ErIH#DtVB}CC3h3`8v4Ftubd`$)s!qgxJUJ8;|P5f+u+IK=`tM z-nj_$%+{W>q4<9_J#hAXW|n=Kw%;UVQJ+|lS_iR-=8xm0Nx~3%Jl%u=cgVfAnS~{O z2eesOvoz*1;s5YAV{i~7KD>RXpY9j!x+FDJtN*MELcz*dIV$1#G4|YGD?$_wTw1&; z;?w$F{1uFYlaOPmgCJdmCj{@`k|i@PzCwcoamk`!T{G>m99qM_2-^m#epck+*JacE zBX|rO;A8@3PIvbs0_7{w7?6jYFY|2DjNDhreiuSi1uu>CkgO=??aTP2FjEN4>gt2Q zRp|;Oq3mKxey*K%N+iq0?sz^V#<`{8au8qK5+(u{gfcdent3YYGHKUo88#{n3E1y5 zYxX@%hZ|3PbYVV;|323WqueVs+E(**0|+xnoh5LpOefQpN}~PJkTR$tAAIGa+L9S= z_KFeNW#(Yg^oYA-n0LiG(L`s{+vQ95EuHg#fBhk654N6mxzrkp8R)(jUGL1bbNr?X-i776-0gs!{pJ<5Z^HPy5vx?4HblcEMkBhARgcwu(BjG$%N)kB-rx-PnXF zZ-~AHPktQ;3xZyPqK;qQX9A{A^|dZ#ZGJsMt{T!#qbbEX6l36|Hq3f&IH^tbf}Afw zB~+BRI0sIt^swtT%C-0Wf4+ORmQ1<+?k~Z+=sl!fNR`R@_1`hV#tIu%|9JBx zEoGVh#bKwMTgXrSzocZS%=@1&61@j!eSvzBIwg!&a|sq)`pV#+8NZ(c*9eEN8zi>v zr6et*T0wyIxp=y4{Iyz?N#ZA&MsUYkjL z2|0AG>nl~(a{v2F?80CsIS0>E&`0xWFip?AW;S+CF?Z(1CI=7vHXF?R`B4oc&OG{a z_+JLq0AK4!OE02C?4nNL%pELT*8F8q=tSK)6G3H@LpBr=r;61N{_>Jwc!|A4sto0z z$Th%m)}Cfs%l?;_@PLch^%6FKyEnxPyX%J`_Di{kkZ6 zjM^Oua-oEx-TOcs+%1w2=Ae2C)q(Fh0+)&{VqQAc>5YQ-u8%C*sY8@;=|Fx^YYXF%HB?Wb`n3jzD;h*r@1-EEqHf>{60=<> z+eAHef=b{8_G)cmBDL+$4QI=4d*WxRRi(bBUtuN|ZYy2p&ppW9kO}sr%s}J>WvJ96 z{I9qe^|DfavrZ3I)3&=cm?Bzx4xmD*A3yc)??_aFuaj=GT;iBJ;u_<4Z)D44W^+vc zoJ|uTDCw4M06G@QMQhHPAz!A zjcZ$};tq0g@RT^uv;RI3_Al@f-$=^p&Zm(^5CvmjE7k3!eua(zoQj6Jqo*nB*QX2X zcPinv*I)F=K0J+l-4awoh*yNuXgDhMFTr!1nLRJOB)G2c4rLwx1FV6j@h@4{&Nj^bDSlxI;+apFFAfF`|ZH`l4!v1C}gN_!1qZV%i&89+UD^|JgK z)%dmc8VT?M<6Rm5i9(>f>(_Aqr}C)QDf~mf?y9yuW2%V<}5>tI$e-pkIs0zxU)F&iv1fyj# zMA?*L_Wja_v$jw;)yJ^KZ57uhlOWkV9P=3iD z{6ymp+FFvfo)k1x)Kj!ZooQA?{`*WMO<^V@s$*2y$wvY3lX$Dxh3=k=jsS_N`!>`b z<~$A|joS!|;<6Vc(0z-1^w72)GyNe>2-PLQQhR-sb_W z!1FT-DVy2oXd$FGhzRF^(#VroN?Utj{(>gwuK-n18#1+w(@QtOx(%y=Y^sIAxz+f= z+*U{o$WYLma=u_djecWVGta$`u@S)u5Ty-W{t4ct3Wcr4{*tR{os`}q^dA9~>%=Uy zS5_5iM@l@n#>rO+!${_Y zC3)6EQ&5QY-41X{ELBEQF9ADD1m^q7=qPB}R#O#J(^v^ln7x-|~L8~(HHg6a@gzCaji`=*bLCuqNd zoH>CNYHDh@{6C zI1K-wHG!IDa|^WycsE57Zf6Dtc$1@5{$QiM|2}ryzj;%rzOirkLnh0KSGa zm5eyUF+ebR9YN?D6Mvh+TL?hcVbspKHNq{Aqv9-3hsPlza~0=qF$9}v0p9BQ5f=a; z_Cj=C6-nQ64Xa^ELb3rca$ohf_9D`C*_m&cBoWKq*z6z;;9&_NJ1is@A~OsET>;|* zJ^#grD4U7b+av|r0?@)wumXM6vIIMI&mxgq8Uh?gv}Bcvi(pHIu0y? zDo4w&t73_|i7{XH9X_QOk7cGl`2zwX_mDk2HXixtA4=<#zg#(7DsG&i(}6!q^6_$ZgJodL3Mz*QAi8H^n39o) zBdMZ4N+4X4?97&5l~X5_{#f8v6D8l7d~{hP+?D(S6Tnl9^ldz@xJ%8f(+`pdV(Awc z_~SFR%@hMLw<3_&6T_P=5!%GC$;a_CB%k(Ut3X3I+9MVMT2sz?nTYN&kwBc8`Y&{k zk&6$zda`JzPop7UiNryU(`QTR_XUiT{RstDm`#S``%DKrm9={E37TbvAo%gkzA!?9 z=(Y^LYT%ijKI8&9n9c^9&>Uia-UBGZq|vqFWa)&!`Sa+A?ADEL`9nM2<)0g5YTI6? zA`)2D%-G@W^>Ih;tG(;vFy3uli7?Un8v{=(=l=6(Dj$pF1&-hT2{L?-@gpMWsDz&#&EOyhh6L^jofrD>5!0Jjn4$W3BTn0C|dIGsEMn--2RN z0J$&WteIP>OzUeFc!waw%wMH2MUX5@;yY-jv$i=TuAo-!$j0JVgsMz!!Q$`3c97ic zFv^fNu+n1bgySxFN#cpuDs=?3r=@@Az9^T`sr|x;*6AaZTh+dmk3iJ-inZG}ulfKf z*8_q4ge=iCgfr?Es7rf>n=etzl)-kL|k5EhPG@iXXs= z_ogwmKVpz_si1x9Czr32rGy`vFwRv)60x8O7yN?dnTn3lJPQ`DRM9iG*U1Ca)odm_ zM$$`(<4~<8)I@uyxx~h6Z=ZM?BnUv>rh#LNdznDM0z{3kRLNCt;xqR%eH zvn`=9O#DBX-XPqUP1%;U9FPZ6Wqr~I&6<;tL?g0X7LxDkt>Sklbd|C5=gNAf6~Tbo z=8}(tvSo#N35^lFt*rB}VKuN#uFkbBx{~BUK`7oXxcT}ApN3`tL6$kWlF9zM^)e|S zFD5C5f15^pPcOE2W^Di1i#0!9Pi3H3B_`?Fkh$!Xfg~81VfCs5icqrou?16bl)@y9 zkAq?*QmB(nGPq|xhX!9?L;~n(zz-Yw(baCx>9w_}eFJd5?m)sqv{GeCjp|@R^i|7v z_U6apN`}E7kf=7&MUxuMEYotbbVi=qK|?2*&t*ycuhfqp=A==8{-HmD zHx7{5)khjGk%e_VH^rn)^vOYuy!MoD#&kUxJ%KsyR~vjj?jQkaQ@noXU6MC5lp%%_ z(iFYhN&w4y6S2BX^P_m^$!{S|ekLE1+A?oc2V?gPrx+7%mq4hQ< z9L_tOzkMl?)afjQl`7%LzIgR?J?7gt2k5;m{v+C~;S27@*v{l4?>WCoZVUvT_Kyu~ zH@OS0ZUm%D9T4mtD(Z$>ICVgU7?D_w6cqPw%HGOX36)NvDIAPrc+3RUQ?6+lAQD#; zAZ+*hAfK;}7*i4}H>x)$fVEWS5w>AF;t3~2oM43%&`t2f7YsE#!?p@$`EfC&K}H!X z^a9}K{$j!?>#sbT@`b@@2XoxSt%aneA$Mi>p2WKNXPY7rR`Q57 zGD=pA>Va)NZ=@RbE=-iDx$-p@=}VksbUS~9Vatpz63Y~X8xLu~-Nkyzm2_pV9g&{u zRX8OxHG5T05wET+P_|gK9A4HHSRs60@HmxA)!#w82%s>lV zOFkM#TUPm7jh_?lLp9=A00+lnb#Gux=GqS4iwnyZAkjTC0H9LFHsgvl(LD4gkj8EJ zI9wmJq!CKWlFsjYQEH1~!tDa6a3L`#AeY4WYNG=K(2$k%Jgd_B9iQn};4<6U0^l-I zSpqyPY4xU|R$Qkll0OaZFZ3sff{=XoIp#5I*5ZjOn|P>w z6G;U)jD&NYZgckMS>Li`U&acMv%hN4IH3><91w1zkJ#%9LH?9`yZr~oDzAtC;Uh?* zRBL}WMx+S9Bz^D^$lT>M1Us)s(4Xighe};5!+fvV5*EN_32q!nVz0hJ&smEix=o9A zJ307ipA5Z}#a#uScDN>jHf0V+GFo&4?k*V?ZPWaOv{YDjP&tDrXs$t)4qjs3r_H)j z$Ov)v;bs$tWQj5d>x?*Uqb(PC=vAPJvreeh!0YcJmBn6_%(p{xEPI{2SRE>oHOtzb z_Pn}dWU<`<$y$Q-^2oqMjwmfx4>Gx5zn5FLG*pv>L4`-|3q~rXKz7)YZFrUTU6eW^ z4OoJAW$2V#hvq{uyZ*py)?jXAg>aP&rP@KR0aUGaOTZdB_s`5cy7avjM%4ghVdC## ziUa-&&VAQapyc^^Is%1X9m`Kc4=TM>^IG&yS11vZ_$~ynk{G`9d)oo6(%lbe4Z+1X z$YEf3R`btieq(!W@ahjTM}^k@(HFwHdRXjyMq`WXstf@mt0&@d!^nVuvT%nbam(Gx z?xW4wX3DAAyUhZtnYz(!e6C~9=k}m%x~p7&1%HX@!H?sPfXxb0HS14lOd0?uyXr_r zs6UV+=rQ_XE^=$~PynLGggKWBmC;bHH*F95ng-xb}u%l?npRUf8PUvf8gQ<6uC zh_2@gU-N_m0tDEopb1dKVFi5I3oTMhUmMOs`OgDd?Ic4|?{#+dl$#9Ai=gj`t#BTt~u8Wet6e`78q19ve zL%3w;(0N3W)*|TA%yqU&2U`V{xdlf0q{f(8roL99&2xp~s_tfhjkeW7Y^Bw(?pYsT zy}CfR@Kohwho%haG1I@406v@HRB+mMDki4gXKJn}TPlm5dnlBG@!P07uqA&ht(2yp zc?)vC4xDd;Y@!X2R^-68b=A}Zs>~nV{rlVg0B}Yf#02m0cozx=!o3f&WOvghgx1lt z@X>9$SQ#i|)^JmwbSJA;N^$RNF>4QwbtEB zziKnhs)I4p@{3sm5Yu>H)kDMq1lRB+KzUVA3RLzhvKVZh2Ai{L(+$Ga(rg7NV&NYw zKXC5}pEC!Q$>a7zYu|%c^FJvEDjv1dDYJ=A3l?n>C!2%JVVbY=f%kWc?}70 z4Sj^37u}#zjCc*(Zm*$tKSd9wRBKV z7175)q_I*)pd08ykrzUH$fwIO7{&C1Q~9{Tr)1_s$oa?wh-rmH&JxzD=fL6jcJn;# zS#q0Sd@q_F0c3{cs8W6GW69NK^3Eo+9g4?qJkg;)BMG3|guW4QJ{mA+)twDXdam`N zK#3$qAF=!SaG#jszMo%fKHOq5iQ%06XY%00N;CNIwME5F+{joAJ=W0ze{7c{U zyteKl5_YDK0}3X-9Dx~cW?u~2Z7?DG9Xx0jmI2kuDG%-b0I{vW9Jxl_z)?z|Slb7} z+zl$1-RXKv+#63=pwBd1i^b=U38XRy+ieA3c9Y+$1T=c~L-@ocU$_0) zD%UY}k9THbVYhNBQQRgBwU-Bf2>)o}aaIs4AKf-Fz&~!-nS99D0#w*b`P<(-gH4=x z6$uGEQ2teQB(}@wqRt``Ioq0*bCe}I`npF*Q{NkDiY1HsQ9~KdW|pYYQ!01f6|R4u zxuDAucZVgVeY?u~IEUWzC8ylf8@i>*4W=gaq|y+-DkPtBiZS}iXQ&ySxA*#n5Iu7e z@DWrFF>wp0!A;NR4h0$@avxVY!MIdc0X6N}TX!C=<&Qu_Ij^pp0g$0y?GtP^6fmEKk`wcU*|@8;B$W7d3A}|5BDs=x zsJ=eElz9lK*!X8GizKy&P8PdPpLuT%-Ue@yq4d)rWBSsyP$5RP&Nt-CC~SfI6Bbi! zwmz@YK?}gEEM~w-WJI2oKcWB z0$&@*!huE??I)M5zxRZ28msO}FUzm9hM8sEZnUsKCPwt261+>l+M{*os_s$6afs!^ zE$p&bmThX=5-|)&)Q&bst1KkFiUn)y!YLpVc-icsNOyoL5i*;07MEr5$wUF}X!G0aXX;5y#6 zZ~F`S$r@mfna|p}sGehtDJI2xdH)1C&PIZp0M&T6C0FDOb7vZ^axmzIDn5TizBC4lQtydx+Of)HU z*9hSXiZsXs%&p*Wf5Zc@#@r$A~%4xX=!R!n*|4|wIa|Koa1gNg2Zm^xQHlw%TA-=E9 zQs8;aS3HS+-tDYLIM70d{ z2*50?N*tstumZP3qE9tsT8jhlbd_uvIYqY~J#AMt()qgvJ zb8iga1~Zw6ccMB+hb!SHTH>{o%S<_Uu+r;rOCEE*>!wPaGr)WKLI_W&XH5Cge-f8c zR*-6*a)*;Z7Q~Yea8gZF5~&~k(878dNJt z_3Iuy;Gb`PWuy9<4=yL4*zJFx$UOISc**zW)X!J~&xp_%rwT?=PbAR-zD|l@yF^hW z8ac3j_PerVD9o;uV*+EBL^#DkiE64lBqRVosf&5zZVpyRvwMQnA71qTjmJHnW_oJe z#_&Uu7HXDMy=M~ZLcc=z}K7gf6`lF9``B8%igAm)g8TtriD}sP;(zn z&~rfxsuS|-sqpwHcX-)4$6*&q%DS_GQ0$d=PN!VKxeJXi>O-0Nk|fMWS@$uZ(9;?e z`9v)gsbA6p3oyVnLcLJoD1Vk*$)oyjRM*>m5}o7piBU1iB3R(L);&?V^Di@LhRx0M zX}U^THM&H!EFPVv7~)i~fcfqQl{858(f?G^|5VaH&*T48(*GYS>4)k0an>#7Iy3XX z*X~}T*sDljSM(EHx}TmvAdAlbP(x4W9o5Lt%TADp-oUFFdte*)ZaJX~Q5Ogd3S^G` z2Wbc!zG&=OGFE=pt?29t^K%dK--d*rJ0UZE`&ip}_;}%9VWj!jRTbm!nsc*uP-R)F zK$sEZ|El_UK{_fKP?syzd<9u%ZED6yWo}T55O+|P%e7xjQ{)z*eh&yPHuB^@j~0I7 zo(-aon0zLbO7jJQ<|Bq^uH~5%%D?@w9Lqs84xFb}16bnJuzbGFz@0W|nD9RQ-$Mi-%$mbEi%zD%M#cX;@Qw8q6snImP!FU z@&h|$`I5gDO!0%$m#LX`Es!$tDfmSupgI3yuJ?ggt;PMD?Ja~1Li25NL*^dx+aHn$ z++<9$x=xu!C6t0{6@{*$E`phS|B}>0SgkW>WmjV)tH_ zD?b|DAQY4@EerUbIAGIDXdZj`1)vlOz{6G4Y!2}uORR+Edjrj^LV@>ITVf-UN9qJN}RgE;>7c%yc+CQ?FmYpqKyw zxNt8TgtLQIe?!~_<_J%XG(r}o7Ap1Y2AmEdOr{R9D6InzFppvkanQj2*~A4 zsYZ3|@GK|}7)`WIE6cOwZ#xi%6*N8q7_DMtJwWe}^eVrqc_B?5!x~vvXXNZ7>!f`~ zG)IeMR5f-}K%${|b?1+axosgQLhqVZ%K}0W`EJvl(~~!nWe`>i*N<$Q`B`xQupE)EfQUS^)AE95Uz*%GJj&;}r$l3$jl6Ky&8@LKoA+&r5o1)Z0 zsI(@16GruTb(<%#9(~XhnYEzf)Geet`kv6UIr~vQphaqdq~Oq@VM>(k|BmT@4xBM@ z#qbM&$p*T06e9a-pZzb^WI9nnChhL{Wl#+BkaVBZVHY72wo+K%RhLNo^ zlQ76`z->Bh>sMP`l4__Pvy+mBnE-MY$u%Ud+ylI5+{`I%ra|As2d(yv!eVz0 zTwyUdb_0_Q$oUYR@S)SPZheRMz(bBTLx9hVYmB!7qN9N^Ru>n#v)64QKQ)C=KqW|8 z4)))u?7lRFq#K%6zT%|ej!L*_`+H#!)V{0Qikptjl-2t(tI&$VPVy9~KN=G-3HOm1Yuh!Lu1mtVf{58)Rj z1q!0`?&TX4Db<7MI<=(i+?Ba<)_&Z(35dvI+ef<)TVDwtMbe*HHvIHy$TfbxAE$2Z z*A1LNv*?J<31ovbhJ1A3h&wF_vr%@y@zt&I49IA2P2GYB`bf4MQVyF)#O7#JGpbA7 z$YJNxU3Yi+`}Rv)g7i5CAa{hIH|1BRuQ)n{pj#zUti%DpZky@#N9tA*OxD=Q6f@8= zf-|Apk1I(6D5nltkPuh=@yyKHWO{38oWM)Ngi-6@>W`Z*N@jE(e8r(aFQ0_Xt{|_Z z6DVBTE$oS0^#~y@8)$J|`4ky2s^(u$bP*o^xDY@D=b8{L0yIoj@|XR|Gfe~Ca3%wa z*GpF=N61HjoReY&`UoP(R%PfedqO?E-$B6DrhR;ep~qMdcsvQu;9Y}sSvGOkLK(}7;q)rp$2(?n4GCU3<+}B=wEE`gd zqi|xng!l3!NIGl6S!*~X-gx*@rL)=bPyny$zMKLy>uD9}G{r8Q$`T!f{1(lXo9SEM zLN;y0IeyI9Y7_QijYTG=wrsfl@r`VEbHsu4b%P_14CM2EL|ocIUlF1UBD$;=Xm3Jw zOT`o)7M(PQ6?8~T%M~+@60cxPE(U52 zdKGVR0QqND@+Eh)6S7Nft%hck#O(X*H4^B7ni^mR(4SawV!F&UBTMUAv_pRkVQsiw z?SV3Dz}cE8Wf)ciC`>b#<*`2^3B3f&t~a=pikoEs=n)RP*;u%~HMj2lyQdWA@$Ej? zAaIe1UMLhqGk>rp0E%>KGcPI(9Zun5n%2&F?5HSPX0cT}xQKi$HF$+ z^;jA*^ILQ;3M1e}KJVlY=Ph)Cgp-4$qGSBz#u08{&c|ML-_sgvxwF3#kNI^2$W2K!(flVD^RLa*R`(lqc<}kp)#x+W&oJ8_y z^2BOu#06$-(aAKMO2bYKWh_Tt0dYwXkbJv!wCmF+oXn6^PjS%9M7lR0Xw`z5uZdbn zNrgj4mzLvkLGY)vVo&@@P$3W5j7|d#+BP>5;W^XLvv@!D5*XS)v({zx2y4ol|EIlc z52rHS;>e^alxf>aLym4PBg!S0t#(Ogicqqdt%S;@=*pB$MUB*!%S>)#+|rTlp4>x8 zl%zJf4pQxsv5hWnxlDD|+RgNRm3^Lbp7ZbcYd@do{l4#A@B6K_-nD+~x1QcU*SKz; z=a$}8mCCQKI%ns$*8|=^9`mz)mPe2w&L=Rs)T3?ke{j&=|FFUU-9XFD8p2b`&jaIPWZT*qyR_aK z^yG3G%IT5F9KS^p-||MmlGd$`)erSI_iL#EVzs^5SI7BBw(W%y14{t}x$%!dOsfvct!8*%T9Q2OCZ2$Q7K%Z#>`Zt z*t=I71yh}Zm9=#2avm?_u)Jcagj2W z2;(JPfP;=4bi9fZlJDfoDU7W{AhsmDJy3zI7vh39lJj+ z8M_Aw$~k~qd*@2cw`^H=^mc?KHby^3CjU1adz$B967%lkQIPhE+dO!4Xd z8_7~F04RID0l~Zt-f!nV3`9eBsQ zzFM96_7E^K*)9zMo?Yme0^$T+sy<#-yRx7kC~m$*mQ(fUjFYsJ!|eW2Wjo5dDV(B_ zUd!W#zDQIV+57{mv~~EM9LF_$Nu`I()$ib-GSG5xczLKznt+0?pam^zX-K_&=KU@6 z7H6~?eWuPNA-m-I@}pKMj*md!Pk~k`0mo(xQ3027j(xm-6%YyDhvakIRUqK$IRetVb9nORpvmJpFFZOtx=uV)++7{O(~uU+C`3pcce4 zegQJe%Y9JZV35_}HGE6;iDJ48D93l{#rn5$>v zO-Rg7obmh~DxO|mm*^R6bM6BNX=8}w0H|UKgDryqYwA9HbGHCueC?U;-p=Bs8K(iP zF#{REEoLvVsLKc)YPtQD**8DhmZo)CaB`HmSfhfqP#dCU+Vz3|Q>~|2qTqZY92O>! zcebubQm@9^GN;YOz4C`Ie+5)3wvWk3-DH40e*~n~3_GX5T3v|;U+@7bB!7$Qno~Bg zp^LW{NI4&D*9%d9<(F^gw1iR2&%&kys*J5{>O<~m!fwJd7id>QX_|P}@xiu!Td{ad&3=s1VW122jGCd3?tzDwa7zow?}mWHUgItx z%*Om!@7Vp7%5evQ1}x>_o9BlOD4QO%g5&e+BCRId@E%0Fv;#x3+BOfwih&235obG} z5)jH`X4VfvqX^wZY1sMkI+f~-<*@*y)tixnpzpAv(LI25tFb>N+jH!DITij&JhxA~ zZN4w~g=Z#@V((z8;;E!jX(v<6*0S8L8~pIcHl`-i32+Qjrq3Db0FNjV2>T-}LI0HtHS ztj3xdG7c(CP?SJYyvoNn7mwnrusSLQKb30!%I1F1t`=}At6Rbl z9m||&AuI{$-@cR7L{-wOoj7LRO_O#WK5rMuaci8uRQ9#kIG6Q>PqHG?CXZveThXd{ zoIV6h7wxwPo81VZhL*l3uO==54QmeDe8*)l@TtOb-^U%c;=@%c29ErL_|aXaWve|Jn(iCjLRlF!CVRptlN|xg4gzK#8D92{eur>!I`R}_d z)d+oW!XZ=>n_O9Xuwk`a00@fxf`_cIMe%(DKOKvsJZ$W$bTO5~<7$`l(tFU( z;3h@=APHvt-+V=$;oa#O*&9GpxhOVbS(9yUn&KnSSwCAqS6aWc20)SB2LCA%p_%-D z{0qV^f|g#;@5f|YHZ~)xvzM;suWqmaKEo{vQD^o5>dFD@RyJqe9E83-sTjFf+M@^l z`?JHQt4v`P`mc26{gxbjahkTNR_e4rs?uq>?f2lIZ%>Q5p(!xtVf`GotS@g(=5#Lz zf~E2Xiy2``mP6We(34rv4^nQ}n1c8>cXThYf{+EczX3h_T&8t{b6^aJ>6-p#M*b>JHsDdcktkwem{m zUo-jNJU^{0B`!412uI4tr8{VR&V_*}n*#?_PSA3_Tc8haxbipJS=5ZDaS&+1ra0-H zRHyhhWscrU>yq=&9ziWl&FUcj9i)AfUa@6+@RK%YHAbdtJG8@VgtF-S5HMq#8NWSC zH_tqn2Q+ZrV`UDodyZ85v!?I!p6k|pThaITA48!qC0$+G_bbjn!&9fFU=30)7=`{` z-8WYlL)M*NpD(a`thRjz&LMJQL&qIBc8$fWvlY%feZzE_TG;_nnRyD>nqVZp&NxFFM^gl>+sDD_Rc&itoip$&61WQ35_{ ztBw-NrH2$%G(l_Pch^rqp(QPFgNd z{u&6W-Q2z0jtBvGBHf{0ijE9%iFg4hW{!qaTKPhgAQ$%)jELaOIYm0!orDpFoVJUk9MXr|!H+k{dzpBy zl(Z!{n1(oNJWOo04|@)Ocp~y)s;LescBz4Ix)Y|_J11X4w@kRX9tY zh2u+9UVL~u{)k}0D>rqMVTPW_I9HgWyNnPXX^yjEFm}@WG0gBJOk?iZ1lP%5DoF#C z&*jX;1Y9y{2xgI@DU70~!U~03@EI%HRiP9$>tGsFt5ivIGePL%!a4_HFMqTRvk(lt zp?Nu}K)4@u&&mRw*^^J4a}Ks)yplI5L|5UDx~HmJ7^R>%h{}R<*?^>bKF?v0J{_fc zM29bytLP&n>BWJ^22s26iA$vAr6(PR5nY~sq-oNhz+1@+#TdFF#*nHJ=R|x8Zb)T8 z)l7O!T>5BJy@3Vf?@K3Fp^PKms-s4Myfuh1^-i$93XJ`Y1n|@fA%;IuDz(V-CBCTt zl)50qM?3*6)HRsqc=b~+pbm*gxIt`*jD++r0x#FJ!pci1e{xbN8X&d1|Cfq~Tsj)+-_Ru!)$C4z?*j zGwMLtKVnV5NOXg?R(0KWmP967ifiW^csGn}eu#%mg_YNKTt1WZZCFXb91WHDLSV4% zX7CE-e0M$KCQQWG*{JP`BQ6n(0)6gwg4|8k^_!CZy#-9>7AO75;V`0N$Y<+I>~ep) zHf-8h;Z(hdxZE6l>k;wT{4CrHQ7u)(CDI(}jx5+*7j5s68(m3)Hgweziux`@Q+Vfc zED6whAA}omb?wwoAq9Uv$pn!5+D*JJQi$s_LqnRRNPs*{Lw;5&Nluby(3A;f49iEx zFm)R;=sO=l-xE#u%_pCDk_9Y=_lYLLnu>}|0Sh~KRx}jSkQK#W8|FQC^ZD9m#4MBi z;3nM}LNVXx@XOu$5l`=V7@@#C(kKKTij>lMv=DR!)4sRe)f-=H@VNBI8%dJ|&(vBoP%w$qDH zR}pJLTP+OKlAPSrRzc10v)gGQVLuG9DCk_eXEt$(q-T`sHNoH8&O%k)JjPG$NN?-ARfX(2YS+^Urf;PCmj7 zdJH8Ls-@m0Y=zrgxD=%t88Er0U10_0Lozb|H8DcT3i-UV9)Ajp`%9XB;Ep}nL-Gm0 c@p(J*b^t|+J9F1M5%^ngYOywZjpK=b12a|^H2?qr diff --git a/docs/RFPs/Open/img/grants_page.png b/docs/RFPs/Open/img/grants_page.png deleted file mode 100644 index c376cd444b61dd3e93e398b62eeefa5210110b10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 336802 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 z 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

|;jW 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

T^I+~ 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

IrCU{%|+PW9P; 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 Ob5mCFYN5<+zyAdynS5jb diff --git a/docs/RFPs/Under Development/grant_management_webapp.md b/docs/RFPs/Under Development/grant_management_webapp.md index f627fa715c4..918d8d73d0d 100644 --- a/docs/RFPs/Under Development/grant_management_webapp.md +++ b/docs/RFPs/Under Development/grant_management_webapp.md @@ -50,7 +50,9 @@ Also, these are just an option, and the RFP doesn't require building from these. For example: -![screenshot_grants_page](./img/grants_page.png) +![screenshot_grants_page](https://github.com/keeganquigley/Grants-Program/assets/1389409/0eda6f0b-071d-4d44-9835-196167479c07) + + ### Grants details @@ -61,7 +63,8 @@ For example: - All documents related to the grant and links to their pull requests (application, deliveries and evaluations) For example: -![screenshot_grants_details](./img/grants_details.png) +![screenshot_grants_details](https://github.com/keeganquigley/Grants-Program/assets/1389409/098962a3-249f-4fa5-8c03-9d0dbc7f32eb) + ### Teams From 60f74d9aee1e5d3f071d2a265c862b6d4aec39cc Mon Sep 17 00:00:00 2001 From: Roman <133760597+fidiroman@users.noreply.github.com> Date: Wed, 7 Jun 2023 13:47:06 -0500 Subject: [PATCH 464/578] FiDi DotSight Analytics Proposal (#1748) * FiDi Dotsight Analytics Grant Proposal Submission * FiDi DotSight: additional technical details * FiDi DotSight: user authentication & SQL UI clarified --- applications/fidi-dotsight-analytics.md | 325 ++++++++++++++++++++++++ 1 file changed, 325 insertions(+) create mode 100644 applications/fidi-dotsight-analytics.md diff --git a/applications/fidi-dotsight-analytics.md b/applications/fidi-dotsight-analytics.md new file mode 100644 index 00000000000..dc4ebeaeb57 --- /dev/null +++ b/applications/fidi-dotsight-analytics.md @@ -0,0 +1,325 @@ + + + +# FiDi DotSight: Analytics Data Platform for DotSama + +- **Team Name:** FiDi +- **Payment Address:** 14fptYf88mjarGJ3gAjhd8YH3Cefdgx4C8Jb6chvJXFszb2i (USDT / Polkadot) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +This project is a response to Keegan Quigley’s [RFP #1539](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/analysis-website-and-data-platform.md) inspired by Rob Habermeier’s Polkadot forum [post](https://forum.polkadot.network/t/dune-analytics-style-data-service-for-polkadot-kusama/271). + +### Overview + +We propose the development of FiDi DotSight, a platform designed to facilitate interactive on-chain analysis in the Polkadot and Kusama ecosystems. Think Dune for DotSama. FiDi will achieve this by providing a scalable platform that enables users to query on-chain metrics, integrate new protocols, and build beautiful custom dashboards with the power of Subsquid’s data archives. To accomplish this, FiDi, with Subsquid’s support, will offer a SQL-like interface for developers to associate existing and newly developed squids with a dashboard of their choice, along with a suite of default ready-to-use analytical dashboards for users to visualize on-chain data. + +The ultimate goal of FiDi is to advance on-chain and portfolio analytics and accelerate data insights coverage across the Polkadot ecosystem. By creating a user-friendly platform that streamlines the process of building custom dashboards, FiDi aims to simplify the process of sharing powerful data visualizations with the community. FiDi is best positioned to deliver this level of data precision and analytics since the proposed scope is an organic extension of its portfolio tracking capabilities, and the upstream on-chain data is largely available as a result of the ongoing partnership and collaborative [expansion](https://medium.com/subsquid/subsquid-and-fidi-join-forces-to-bring-advanced-data-insights-to-web3-users-763094773676) with Subsquid. + +DotSight will support other non-Polka L0s, too. Since FiDi and its upstream data are cross-chain from day one, DotSama users will be able to build analytical dashboards spanning data from multiple ecosystems, e.g., Ethereum + Polkadot or Avalanche + Polkadot et al. With Subsquid’s data and FiDi’s analytics, we aim to enable analysts and power users to interactively query high-quality data, create custom charts, and share metrics with others, further accelerating DotSama’s on-chain activity and the breadth of nuanced insights uncovered by its users. We aim to provide the Polkadot and Kusama ecosystems with a powerful tool for on-chain analysis that will serve the community for years to come. + +### Project Details + +#### Background #### + +[FiDi](https://fidi.tech/) is a portfolio tracker offering high-precision data for 100+ chains and 2k+ protocols. It’s a non-custodial and lightweight presentation layer on top of on-chain data. [Subsquid](https://subsquid.io/) is a full-stack blockchain indexing SDK and specialized data lakes (Archives) optimized for the extraction of large volumes of historical on-chain data. We’ve been [joining forces](https://twitter.com/subsquid/status/1628827848621555712) for a while to deliver the highest quality analytics to DotSama. + +#### High-Level Architecture #### + +![FiDi DotSight Data Architecture](https://storage.googleapis.com/fidi-tech-static1/w3f/FiDi%20Data%20Interface%20Global.png "FiDi DotSight Architercture") + +The key components include, i.e., from the user side to the data provider: +- Basic Analytical Primitives + - Functionality: a collection of default views available for data visualization + - Audience: blockchain analyst + - Technology Choice: modular React widgets that we will evolve towards a SaaS approach: more lightweight, embeddable, thematically customizable by data streams, and sharable externally widget; with optional web components. +- Custom User Views + - Functionality: a customizable view tied to a SQL query or a pre-defined set of basic views + - Audience: blockchain analyst + - Technology Choice: same as #1 +- Developer UI and Data Interface + - Functionality: an interface where the new view is created, and its metadata is specified + - Audience: blockchain analyst or developer + - Technology Choice: The UI’s basis is the same as #1; + - (i). The user-defined SQL, GraphQL, and dashboard metadata will initially live in a public Github with CI/CD and merging logic automated. We will opt for storing all metadata in a distributed cloud database, i.e., GCP CloudSQL (PGSQL backend) or BigQuery, as the project evolves post-Milsetone 3. + - (ii). The Data Interface will manifest as a typical stateless GCP microservice mimicking the rest of our data infrastructure, i.e., a Node.js service in the Google App Engine for the execution layer; and CloudSQL (PGSQL) and BQ for the data persistence and caching layers, respectively. + - (iii). The Data Interface will have an external endpoint queryable by users willing to build on top of it and FiDI itself. +- Data Mixer + - Functionality: provides a source of truth for any served data point regardless of the upstream provider; processes the queries + - Audience: FiDi devs + - Technology Choice: similar to the data interface and query engine, the mixer is a dedicated Node.js service running in GCP’s App Engine; it currently caches recent raw data (but not aggregates) in CloudSQL, and we’ll evolve the data layer into both caching (BQ) and historical data (CloudSQL) layers covering aggregates and raw data. +- Query Engine + - Functionality: sanitizes and runs the user-specified queries and handles views production + - Audience: FiDi and Subsquid devs + - Technology Choice: same as #4; + - (i). We will enable querying via SQL with blockchain-optimized syntax, e.g., by relying on TrinoSQL or Dune’s harmonizer; and in later releases - via a JavaScript native code and no-code options. + - (ii). A typical Data Interface’s query passed to the engine will include a triplet of desired (UI Widget, Mapper, Data Source) +- Aggregates, Views, and Squids Databases + - Functionality: persistent distributed storage for user-created and internal non-materialized views + - Audience: FiDi and Subsquid devs + - Technology Choice: data layer same as #4; +- GiantSquid [API](https://docs.subsquid.io/giant-squid-api/) + - Functionality: direct access to the data lake via GraphQL + - Audience: FiDi and Subsquid devs, and blockchain devs + +**Technical Stack Overview** +- Frontend (Web): we currently rely on [React](https://react.dev/) and [Typescript](https://www.typescriptlang.org/) and will look into transitioning to [Next.js](https://nextjs.org/) as a part of this proposal +- Backend: we currently leverage Typescript, Express, and [PostgreSQL](https://www.postgresql.org/). By Milestone 4, we'll also consider leveraging [Nest](https://nestjs.com/) if it fits the project's needs +- Data Layer: [GraphQL](https://graphql.org/) and RPC for upstream providers, PostgreSQL elsewhere +- Application Layer: [App Engine](https://cloud.google.com/appengine) +- Database Layer: GCP [CloudSQL](https://cloud.google.com/sql) and [BQ](https://cloud.google.com/bigquery) +- Serving layer: rest of GCP stack, i.e., CDN and Cloud Load Balancing +- For more, see also in-line comments above in the components overview + + +#### Analytical Primitives (Default Views) #### + +We will provide a versatile suite of analytical dashboards for users, including default, advanced, and customizable views. The following analytical primitives will be surfaced to developers as a part of this proposal: +- Default dashboard: Pie Chart +``` +Sample Metrics: >, precision: int> +``` +- Default dashboard: Single Metric +``` +Sample Metrics: +``` +- Default dashboard: Assets List +``` +Sample Metrics: >, precision: int> +``` +- Advanced dashboard: Staking Rewards +``` +Sample Metrics: see below +``` +- Customized dashboard: On-Chain Metrics +``` +Sample Metrics: see below +``` +Default Dashboards: Pie Chart, List, and Metrics![FiDi Analytical Primitives](https://storage.googleapis.com/fidi-tech-static1/w3f/FiDi%20Analytical%20Primitives%20Default.png "FiDi Analytical Primitives") +Advanced Dashboard: Staking Rewards +![FiDi DotSight Advanced Staking Example](https://storage.googleapis.com/fidi-tech-static1/w3f/FiDi%20Advanced%20Staking.png "FiDi DotSight Advanced Staking Example") + + + +#### Data Interface #### + +We will design and implement the data interface with a developer flow that will include the following steps: +* specifying an upstream data source, i.e., a Squid URI +* specification of metrics to stream +* aggregation logic +* schema mapping and morphing logic +* any external sources or other parameters + +Developers will be able to deploy their new data schemas via git pull requests at the initial stages and, later, in a fully automated fashion, with the new dashboards going live after deployment. + +Additionally, developers will be able to extend the existing dashboards’ queries and augment them with any new data sources they’d see fit: first, as a Github-based form and purely through the UI at the later milestones. + +![FiDi DotSight Data Interface](https://storage.googleapis.com/fidi-tech-static1/w3f/FiDi%20Data%20Interface.png "FiDi DotSight Data Interface") + + +#### User authentication/authorization #### + +To ensure the security and privacy of our users, we will implement wallet-signed authentication as the initial method for contributors to engage with DotSight (See Tier 1). This approach will enable analytics developers to access new dashboards and protocol submissions, which will be reviewed by our team. Data querying and existing dashboard usage will remain public and will not require authentication. + +This approach is incremental to our existing connect-the-wallet functionality, does not require any user authentication data stored on FiDi, and overall balances the privacy/security concerns with the user experience best. + +In the future milestones and outside of the scope of this proposal, we plan to expand authentication methods to support a more diverse user population and role separation. Our roadmap includes Github OAuth (Tier 2) for dashboards and protocol deployment and other OAuth or verified email (Tier 3) for social functionality. +![FiDi DotSight Auth Protocol](https://storage.googleapis.com/fidi-tech-static1/w3f/FiDi%20DotSight%20Auth%20Protocol.png "FiDi DotSight Auth Protocol") + + #### From 0 to 1 #### + +We’ll rely on two parachains with sufficiently different key community metrics as our lighthouse use cases (see 4.a-c, Milestone 1). These will serve as a catalyst and feasibility demonstration for the analytics functionality. FiDi will later continue scaling to all other parachains in the DotSama ecosystem and, with Subsquid’s collaboration, incentivize both developers and users to contribute. + +The success would be a blockchain-level customized analytics dashboard with advanced analytics delivered to the community. The scope will include data interface development, specifying squid queries, data mapping, dashboard logic, and integration. We believe this will help us test developer flow, deliver analytics immediately useful to several sufficiently large parachains, spark the community interest toward building more custom views, and accelerate our future milestones. + + +As the initial candidates for the advanced metrics, we’ve so far selected Astar and Moonbeam; however, we are open to the foundation’s feedback on whether an alternative approach is preferred. You can follow our current progress in the beta analytics [sample wallet](https://beta.app.fidi.tech/portfolio?wallet_id=WGGvXmacJdPLw5abykehBb8MjsvQGomiHA79W9niHAWpDUB). + +Advanced Dashboard: Customized On-Chain Metrics +![FiDi DotSight Advanced dApp Staking Astar Example](https://storage.googleapis.com/fidi-tech-static1/w3f/FiDi%20DotSight%20dApp%20Staking%20Astar%20Wallet.png "FiDi DotSight Advanced dApp Staking Astar Example") + +**Metrics Breakdown** (Milestones 1-2) +| Wallet-level metrics | dApp-level metrics | +| ----------- | ----------- | +| Balances, Rewards, Values | UAW | +| Free tokens | Historical new wallets per dAapp | +| Vesting | Historical Transactions Number| +| EVM Deposits | Historical Volume | +| dApp names | Historical balance per dApp | + +**Language Agnostic Analytics** +Since DotSight aims to be a combination of presentation and querying layer on top of the higher-level metrics above, it will abstract away the smart contracts implementation details and functionality, i.e., EVM, non-EVM, Vyper, WASM, or others will be supported. + +### Ecosystem Fit + +As on-chain analysis becomes an increasingly important field, there is a growing need for a platform that enables users to access and query high-quality data easily. Our proposed project is an optimal fit for the Polkadot and Kusama ecosystems. The current options for querying data via GraphQL are limited to backend services such as Subquery and Subsquid; however, our proposed data interface will provide a user- and developer-friendly way to surface customized analytics, similar to Dune Analytics in the Ethereum community; however, with more flexibility, customization, and at a higher level of abstraction. + +Our decentralized platform will enable analysts and power users to interactively query and visualize high-quality data, creating custom charts and visualizations to share metrics with others. By easing the process of building dashboards, sharing data visualizations, and integrating data providers, we will encourage projects to create custom dashboards to share data with the Polkadot & Kusama community. + + +## Team :busts_in_silhouette: + +### Team members + +* Roman Dovgopol — CTO, Architect +* Shaun Saylor — CEO, Product +* Anton Ryabov — Eng Lead, Developer +* Kirill Suvorov — Frontend Lead, Web/Mobile +* Finn Marten — Design Lead + +### Contact + +- **Contact Name:** Roman Dovgopol +- **Contact Email:** founders@fidi.tech +- **Website:** https://fidi.tech + +### Legal Structure + +**Registered Address:** 400 NW 7th Ave, #14310, Ft. Lauderdale, FL 33311, USA + +**Registered Legal Entity:** FiDi Tech, Inc + +### Team's experience + +FiDi brings together a team of builders and venture-backed operators with expertise in distributed systems, web3, data analytics, science, and infrastructure engineering at the internet scale. + +Anton leads FiDi’s engineering, particularly the data and backend infrastructure. Most recently, he has been an Engineering Manager supporting marketplace teams at Yandex. Anton’s key expertise is in data and distributed systems at scale. + +Kirill leads FiDi’s mobile and NFT data development. Most recently, he has been a Senior SWE at Yandex, focusing on the front end. Kirill’s key expertise is in cross-platform mobile and web development at scale. + +Roman is a venture-backed founder and engineering leader passionate about building great products. He previously led the data organization at Twitter, particularly Data Engineering, Science, ML, and Analytics – scaling the core of their ad tech and analytics at scale. + +Shaun is a seasoned operator and engineering leadership recruiter. He previously supported product teams at Google, Twitter, and Meta, among others. Both Shaun and Roman are founders in the past. + +Finn leads the design at FiDi and brings in his experience supporting creative work at Riot Games and Porsche Design. He also runs his own design agency, 0xsphere, where he challenges the boundaries of visual user experience in web3. + +We all came together to found FiDi in 2022 with a mission to democratize access to data in web3, [initially](https://twitter.com/cryptofidi/status/1605927633728012288) as a portfolio tracker and, more recently, as a fully-fledged high-precision analytics platform. Our strengths lie in the ability to tackle complex technical challenges and deliver high-quality products for our users + +### Team Code Repos +- [https://github.com/fidi-tech](https://github.com/fidi-tech) + +### Team LinkedIn Profiles +- [https://www.linkedin.com/in/romandovgopol/](https://www.linkedin.com/in/romandovgopol/) +- [https://www.linkedin.com/in/shaun-fidi-2a973324a/](https://www.linkedin.com/in/shaun-fidi-2a973324a/) +- [https://www.linkedin.com/in/anton-ryabov-ab98241aa/](https://www.linkedin.com/in/anton-ryabov-ab98241aa/) +- [https://www.linkedin.com/in/finn-marten-16b792208](https://www.linkedin.com/in/finn-marten-16b792208) +- [https://www.linkedin.com/in/kirill-suvorov-93597863](https://www.linkedin.com/in/kirill-suvorov-93597863) + +## Development Status :open_book: + +The basis for the project has been established. FiDi today offers four default dashboards available for the community (one metric, three metrics, a pie chart, and an asset list) and a fully customizable [advanced analytics dashboard](https://beta.app.fidi.tech/portfolio?wallet_id=Zo7ZR8xMMSCmp7gWgp5gmmzRTwg1iaEXeghJVMeE6PRWCFz) currently under development and in open beta with ambassadors and core teams of several parachains. Subquid’s recent release of [GiantSquid API](https://docs.subsquid.io/giant-squid-api/overview/) makes surfacing metrics and deploying new squids intuitive for developers and L1 operators. + +This proposal aims at delivering (a) a data interface connecting the squids’ query code and customized dashboards and (b) both streamlining and decentralizing the productionization of new analytics queries for the community by community. + +All infrastructure deliverables belong to the teams’ domains of expertise and serve as a continuation of our previous track record. + +## Development Roadmap :nut_and_bolt: +### Overview + +- **Total Estimated Duration:** 4.5mos (~3.5mos left) +- **Full-Time Equivalent (FTE):** 3.5 FTE +- **Total Costs:** 25,000 USD + +### Milestone 1 — Data Interface API + +- **Estimated duration:** 1mo +- **FTE:** 4 +- **Costs:** 7,500 USD + +- Summary: This milestone covers a complete data interface connected to GiantSquid and FiDi dashboards. It also includes fully productionized custom Squids and FiDi views for Astar staking dApp analytics. +- Success: an open-sourced data interface as well as fully operational dashboards for two selected parachains + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 +| **0b.** | Documentation | We will provide documentation on every supported metrics class and an educational tutorial explaining the typical way to interpret the data, deploy a data interface configuration, and select the desired dashboard. | +| **0c.** | Testing | Core functions will be fully covered by a unit and integration tests suite to ensure robustness, deployment, and serving times. | +| **1a.** | GiantSquid data funneling | We will extend the existing data streaming infrastructure to support an arbitrary query to GS and user-built squids. | +| **1b.** | Data Aggregation module | We will provide support for user-specified (GraphQL or SQL) aggregation logic that would be inputed via the data interface and invoked at the streaming stage. | +| **1c.** | Off-chain sourced addresses support | We will provide rudimentary support for additional data materialization parameters, e.g., pricing via liquidity pool addresses. This will be extended to any off-chain data in an oracle-like fashion in future milestones. | +| **2a.** | Data Interface for developers | We will provide a configuration-based interface (initially via git pull requests, then automated in Milestone 2) with key specifications for the new views. We will leverage React and Typescript on the frontend and Typescript with Nest and PGSQL on the backend. +| **2b.** | Schema mapping and morphing | We will provide a configuration-based paradigm for specifying: the desired metrics mapping, aggregation logic, upstream GiantSquid URI, and desired materialized view.| +| **2c.** | Data interface: view construction | We will provide developers with the ability to select a desired analytical dashboard from the pre-selected collection (see five views explained in the architecture section; fully customizable views will make it to future milestones). These UI components will also be implemented via React and Typescript.| +| **2d.** | Data interface: Deployment | We will provide developers with the ability to schedule their customer view’s deployment (automatically at recurring times in the future milestones). The deployment action will be a UI module, and the propagation/consensus will occur via GitHub at first and via a PGSQL query in future milestones.| +| **3a.** | Dashboards: Default Analytical Views | We will integrate the default views, i.e., pie chat, 1/3-metrics view, and list of assets, with the data interface and make it available for the ad-hoc developer deployment. For 3a-c UI components, we will similarly rely on React + Typescript.| +| **3b.** | Dashboards: Advanced Staking View | We will integrate the advanced staking view, e.g., the dApps names, nominator TVLs, balances, rewards, and ranks, with the data interface and make it available for ad-hoc developer deployment. | +| **4a.** | Lighthouse use cases: Squids for Wallet-specific metrics | We will implement new squids in GraphQL surfacing wallet-specific metrics for two parachains with the following metrics that need to be surfaced via GiantSquid: Free tokens, Vesting, EVM Deposits, and dApp names. | +| **4b.** | Lighthouse use cases: Squids for dApp-specific metrics | We will implement new squids in GraphQL surfacing wallet-specific metrics for two parachains with wallet-specific metrics for dApps: TVL change per dApp, Active (UAW) and net new wallets per dApp (x2), historical Transactions / Volume / Balance per dApp (x3). | +| **4c.** | Lighthouse use cases: customized dApp views | As the first two use-cases, a feasibility proof and an accelerator, we will provide the community with a fully integrated customized dApp analytics dashboard leveraging the data interface (2a-2c), the advanced staking view (3b), and the data aggregation module (1a-1c). | + + +### Milestone 2 — Views with Network- and dApp-level Metrics + +- **Estimated Duration:** 1mo +- **FTE:** 2.5 +- **Costs:** 5,000 USD + +- Summary: This milestone covers support for essential metrics at the parachain and dApp level under each chain. Many would require custom squids built as a part of this scope. +- Success: developer UI supports views with newly sourced metrics. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 +| **0b.** | Documentation | We will provide documentation on every supported metrics class and an educational tutorial explaining the typical way to interpret the data, navigate the developer UI, specify the required metadata, deploy a data interface configuration, and select the desired dashboard. | +| **0c.** | Testing | Core functions will be fully covered by a unit and integration tests suite to ensure robustness, deployment, and serving times. | +| **1a.** | dApp-level signals: collator metrics | We will generalize prior work from Milestone 1 to span collator/nominator activity and make metrics such as uptime, block production rate, block processing time, rank/nominator rank, name, and value locked available in the views. For 1a-2a, the respective in GraphQL squid query and GiantSquid's code are also in scope; the UI components will be written in React + Typescript and the backend code in Typescript + Nest + PGSQL.| +| **1b.** | dApp-level signals: user activity | Additionally, the dApp-specific user activity metrics will be surfaced, e.g., UAW, net new wallets, historical transactions, volume, and balance per dApp. Respective squid query and GS code are also in scope. | +| **2a.** | Network-level signals | We will generalize prior work from Milestone 1 to span L1-level metrics and activity made available in the developer UI, e.g., UAW per network, number of new wallets, adoption rates, unstaked tokens currently in wallets, tokens in circulation, and tokens staked or locked. Respective squid query and GS code are also in scope. | + + +### Milestone 3 — Developer UI & Automated View Deployment + +- **Estimated Duration:** 1mo +- **FTE:** 2.5 +- **Costs:** 5,000 USD + +- Summary: This milestone covers a no-code option for developers to productionize new views on FiDi via specific squids on GiantSquid. +- Success: developer UI launched, and new users are able to productionize new views without any code. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 +| **0b.** | Documentation | We will provide documentation on every supported metrics class and an educational tutorial explaining the typical way to interpret the data, navigate the developer UI, specify the required metadata, deploy a data interface configuration, and select the desired dashboard. | +| **0c.** | Testing | Core functions will be fully covered by a unit and integration tests suite to ensure robustness, deployment, and serving times. | +| **1a.** | dApp-level signals: collator metrics | We will provide an intuitive web interface for specifying the desired metrics mapping, aggregation logic, upstream GiantSquid URI, and desired materialized view. The UI will be an extension of the one built in M2 and also leverage Typescript + React; and Nest + CloudSQL (PGSQL) + Typescript on the backend. | +| **1b.** | Online testing & deployment | We will provide an intuitive web interface for querying the new view for deployment and validating its configuration. The UI's part technology choices is same as 1a.| +| **2a.** | Deployment validation & View status | We will implement testing and validation layers to ensure the user-inputted configurations for newly spun-up views and GS queries are performant. We will surface the view “status,” e.g., up, down, missing data, and similar. | +| **2a.** | Automated and ad-hoc deployment | We will decouple the existing infrastructure to support ad-hoc and scheduled deployments for newly created views. The CI/CD and automation for 2a-b will rely on schedule App Engine workers. | + +### Milestone 4 — Interactive SQL Query Engine for Views + +- **Estimated Duration:** 1.5mos +- **FTE:** 4 +- **Costs:** 7,500 USD + +- Summary: This milestone covers a SQL editor as a new option for developers/users to productionize views on FiDi via specific squids on GiantSquid. +- Success: developer UI supports FiDi SQL-powered views. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 +| **0b.** | Documentation | We will provide documentation on querying methodology, e.g., functions, operators, data types, and statement reference; as well as an educational tutorial explaining the typical way to run the queries, associate them with the views, interpret the data, navigate the developer UI, and share the views. | +| **0c.** | Testing | Core functions will be fully covered by a unit and integration tests suite to ensure robustness, deployment, and serving times. | +| **0e.** | Article | We will publish an announcement article capturing the work completed in the grant along with the educational guides and success stories, enabling users to further leverage and expand DotSight’s functionality. | +| **1.** | FiDi SQL implementation | We will provide a query engine for blockchain data. Initially forked from [TrinoSQL](https://trino.io/) and/or [harmonizer](https://github.com/duneanalytics/harmonizer), we will extend the functionality to support variable views and embed GraphQL upstream queries. We'll simialrly rely on Typescript + Nest + CloudSQL (PGSQL) for the query engine's implementation. ![FiDi SQL Engine UI Example](https://storage.googleapis.com/fidi-tech-static1/w3f/FiDi%20SQL%20Engine.png "FiDi SQL Engine UI Example")| +| **2.** | SQL Editor View UI | We will augment the no-code view developed in Milestone 2 with SQL functionality allowing users to rehash the existing views as well as create new ones. The Editor UI will include the runner log, a tree of dependencies and suggested resources, and the editor interface itself. See the UI direction in the following wireframe:| +| **3.** | Advanced Querying Documentation | We will provide a comprehensive guide for optimizing the queries, both language- and database-specific, along with real-world examples | + + +## Future Plans +DotSight will provide a scalable, incentivized platform for developers to contribute to the Polkadot ecosystem's growth by integrating new protocols and on-chain metrics. We aim to continue extending the number of parachains with advanced analytics supported on FiDi, the breadth and depth of analytical dashboards, and the pre-developed squids available. + +For further development, we will also streamline the user/developer funnel to the point where simple SQL/GraphQL or no-code user flows suffice to seamlessly productionize and share new dashboards matching user needs. For the further go-to-market, we plan to attract content creators and crypto influencers by offering customizable portfolio views, analytical dashboards, and reward-based contributions to extend coverage and analytics on the platform. + + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** +Via Subsquid founders - Marcel & Dmitry and the W3F staff - Sebastian & David. + +**Follow Our Socials** +- Twitter: [https://twitter.com/cryptofidi](https://twitter.com/cryptofidi "FiDi's Twitter") +- Medium: [https://blog.fidi.tech/](https://blog.fidi.tech/ "FiDi's Medium") +- Telegram: [https://t.me/+vxA51osvNrw5NGUx](https://t.me/+vxA51osvNrw5NGUx "FiDi's Telegram") +- Discord: [https://discord.gg/fhaRzWZa2r](https://discord.gg/fhaRzWZa2r "FiDi's Discord") +- Github [https://github.com/fidi-tech](https://github.com/fidi-tech "FiDi's GitHub") +- LinkedIn: [https://www.linkedin.com/company/cryptofidi/](https://www.linkedin.com/company/cryptofidi/ "FiDi's LinkedIn") \ No newline at end of file From afedc65d40e3c2a3d11e0890daea96cecba42e58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 7 Jun 2023 21:17:55 +0200 Subject: [PATCH 465/578] Update index.md Add FiDi DotSight and fix table layout --- applications/index.md | 63 ++++++++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/applications/index.md b/applications/index.md index 1a51398fdb5..cc523da80a7 100644 --- a/applications/index.md +++ b/applications/index.md @@ -40,34 +40,35 @@ Use this page for an overview of all public grants and their status. Use the sid ### 🏄‍♀️ Wave 18 - Q2 2023 -| Team | Project | Link | Terminated | First Delivery | Completed | -| :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------------------------------- | :--------- | :------------: | :--------: | -| [Interstellar](https://www.interstellar.gg/) | [Interstellar - Wallet Phase 2](./Interstellar-network2.md) | [GitHub](https://github.com/Interstellar-Network) | ☐ | ☐ | ☐ | -| [Valletech AB](https://valletech.eu/) | [DINFRA](./DINFRA.md) | [GitHub](https://gitlab.com/polkawatch) | ☐ | ☐ | ☐ | -| [DAuth](https://github.com/DAuth-Network) | [DAuth](./dauth_network.md) | [GitHub](https://github.com/DAuth-Network) | ☐ | ☐ | ☐ | -| [Galaxy.Do](https://galaxy.do) | [Galaxy: Three-dimensional Web for Polkadot Users](./galaxy.md) | [GitHub](https://github.com/7flash) | ☐ | ☒ | ☐ | -| [Web3 Labs Ltd](https://www.web3labs.com/) | [Sirato (Epirus) Substrate Explorer - Phase III](./sirato_substrate_phase3.md) | [GitHub](https://github.com/web3labs) | ☐ | ☐ | ☐ | -| [Collective Intelligence Labs](https://collectiveintelligence.dev/) | [Omnichain Infrastructure](./CILA-omnichain-infrastructure.md) | [GitHub](https://github.com/Collective-Intelligence-Labs) | ☐ | ☐ | ☐ | -| [TradeLink](https://tradelink.pro/) | [Sandox](./sandox.md) | [GitHub](https://github.com/BEARlogin) | ☐ | ☐ | ☐ | -| [Wunderbar Network](https://wunderbar.network/) | [Vue.js + TypeScript Substrate Front-End Template](./vue-typescript-substrate-frontend-template.md) | [GitHub](https://github.com/WunderbarNetwork) | ☐ | ☐ | ☐ | -| [Profond.ai](https://www.profond.ai/) | [Profond](./Profond.md) | [GitHub](https://github.com/emarai) | ☐ | ☐ | ☐ | -| [727.ventures](https://727.ventures) | [Patron](./patron.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | -| [Supercomputing Systems AG](https://www.scs.ch) | [SARP - A Static Analysis Tool for Runtime Pallets](./sarp-basic-functionality.md) | [GitHub](https://github.com/scs) | ☐ | ☐ | ☐ | -| [Ed Anderson](https://github.com/eca20) | [Blockchainia](./blockchainia.md) | [GitHub](https://github.com/eca20) | ☐ | ☐ | ☐ | -| [CoinFabrik](https://www.coinfabrik.com/) | [ScoutCoinFabrik: Milestone 2](ScoutCoinFabrik_2.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | -| [Polytope Labs](https://research.polytope.technology/) | [Interoperable State Machine Protocol](ismp.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | -| [Talentica Software](https://www.talentica.com/) | [Implementation Benchmarking Milestone 3](ink-pallet-benchmarking-phase-2.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | -| [Deep Ink Ventures GmbH](https://github.com/deep-ink-ventures) | [Stylograph](Stylograph.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☐ | ☐ | -| [Zeeve](https://www.zeeve.io) | [Ink Playground IDE Improvements](ink-playground-ide-improvements.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | -| [Scio Labs](https://scio.xyz/) | [XCM Domain Name Service](xcm-domain-service.md) | [GitHub](https://github.com/scio-labs) | ☐ | ☐ | ☐ | -| [Gloslab](https://github.com/smiasojed) | [Contracts performance measurement tool proposal](contracts-tool.md) | [GitHub](https://github.com/smiasojed) | ☐ | ☐ | ☐ | -| [Nikita Orlov PR](https://github.com/stringnick) | [Faucet chat based bot](faucet-bot.md) | [GitHub](https://github.com/stringnick) | ☐ | ☐ | ☐ | -| [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal Saas Pricing](societal_saas_pricing.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☐ | ☐ | -| [MASTER UNION LLC.](https://github.com/TheDotflow) | [Dotflow](Dotflow.md) | [GitHub](https://github.com/TheDotflow) | ☐ | ☐ | ☐ | -| [Antier Solutions](https://www.antiersolutions.com/) | [RFP/securityMarketPlace](Security_Marketplace.md) | [GitHub](https://github.com/ParthChaudhary31) | ☐ | ☐ | ☐ | -| [SO/DA zone](https://github.com/mfornos) | [Ocelloids Monitoring SDK grant application](ocelloids_monitoring_sdk.md) | [GitHub](https://github.com/mfornos) | ☐ | ☐ | ☐ | -| [Antier Solutions Pvt. Ltd.](https://github.com/kulwindersingh-ant) | [Grants webapp](Grant_management_webapp.md) | [GitHub](https://github.com/kulwindersingh-ant) | ☐ | ☐ | ☐ | -| [Zaniyar Jahany](https://github.com/Zaniyar/plant2earn/) | [Grantmaster](grantmaster.md) | [GitHub](https://github.com/Zaniyar/plant2earn/) | ☐ | ☐ | ☐ | +| Team | Project | Link | Terminated | First Delivery | Completed | +| :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------| :--------- | :------------: | :--------: | +| [Interstellar](https://www.interstellar.gg/) | [Interstellar - Wallet Phase 2](./Interstellar-network2.md) | [GitHub](https://github.com/Interstellar-Network) | ☐ | ☐ | ☐ | +| [Valletech AB](https://valletech.eu/) | [DINFRA](./DINFRA.md) | [GitHub](https://gitlab.com/polkawatch) | ☐ | ☐ | ☐ | +| [DAuth](https://github.com/DAuth-Network) | [DAuth](./dauth_network.md) | [GitHub](https://github.com/DAuth-Network) | ☐ | ☐ | ☐ | +| [Galaxy.Do](https://galaxy.do) | [Galaxy: Three-dimensional Web for Polkadot Users](./galaxy.md) | [GitHub](https://github.com/7flash) | ☐ | ☒ | ☐ | +| [Web3 Labs Ltd](https://www.web3labs.com/) | [Sirato (Epirus) Substrate Explorer - Phase III](./sirato_substrate_phase3.md) | [GitHub](https://github.com/web3labs) | ☐ | ☐ | ☐ | +| [Collective Intelligence Labs](https://collectiveintelligence.dev/)| [Omnichain Infrastructure](./CILA-omnichain-infrastructure.md) | [GitHub](https://github.com/Collective-Intelligence-Labs) | ☐ | ☐ | ☐ | +| [TradeLink](https://tradelink.pro/) | [Sandox](./sandox.md) | [GitHub](https://github.com/BEARlogin) | ☐ | ☐ | ☐ | +| [Wunderbar Network](https://wunderbar.network/) | [Vue.js + TypeScript Substrate Front-End Template](./vue-typescript-substrate-frontend-template.md) | [GitHub](https://github.com/WunderbarNetwork) | ☐ | ☐ | ☐ | +| [Profond.ai](https://www.profond.ai/) | [Profond](./Profond.md) | [GitHub](https://github.com/emarai) | ☐ | ☐ | ☐ | +| [727.ventures](https://727.ventures) | [Patron](./patron.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | +| [Supercomputing Systems AG](https://www.scs.ch) | [SARP - A Static Analysis Tool for Runtime Pallets](./sarp-basic-functionality.md) | [GitHub](https://github.com/scs) | ☐ | ☐ | ☐ | +| [Ed Anderson](https://github.com/eca20) | [Blockchainia](./blockchainia.md) | [GitHub](https://github.com/eca20) | ☐ | ☐ | ☐ | +| [CoinFabrik](https://www.coinfabrik.com/) | [ScoutCoinFabrik: Milestone 2](ScoutCoinFabrik_2.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | +| [Polytope Labs](https://research.polytope.technology/) | [Interoperable State Machine Protocol](ismp.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | +| [Talentica Software](https://www.talentica.com/) | [Implementation Benchmarking Milestone 3](ink-pallet-benchmarking-phase-2.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | +| [Deep Ink Ventures GmbH](https://github.com/deep-ink-ventures) | [Stylograph](Stylograph.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☐ | ☐ | +| [Zeeve](https://www.zeeve.io) | [Ink Playground IDE Improvements](ink-playground-ide-improvements.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | +| [Scio Labs](https://scio.xyz/) | [XCM Domain Name Service](xcm-domain-service.md) | [GitHub](https://github.com/scio-labs) | ☐ | ☐ | ☐ | +| [Gloslab](https://github.com/smiasojed) | [Contracts performance measurement tool proposal](contracts-tool.md) | [GitHub](https://github.com/smiasojed) | ☐ | ☐ | ☐ | +| [Nikita Orlov PR](https://github.com/stringnick) | [Faucet chat based bot](faucet-bot.md) | [GitHub](https://github.com/stringnick) | ☐ | ☐ | ☐ | +| [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal Saas Pricing](societal_saas_pricing.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☐ | ☐ | +| [MASTER UNION LLC.](https://github.com/TheDotflow) | [Dotflow](Dotflow.md) | [GitHub](https://github.com/TheDotflow) | ☐ | ☐ | ☐ | +| [Antier Solutions](https://www.antiersolutions.com/) | [RFP/securityMarketPlace](Security_Marketplace.md) | [GitHub](https://github.com/ParthChaudhary31) | ☐ | ☐ | ☐ | +| [SO/DA zone](https://github.com/mfornos) | [Ocelloids Monitoring SDK grant application](ocelloids_monitoring_sdk.md) | [GitHub](https://github.com/mfornos) | ☐ | ☐ | ☐ | +| [Antier Solutions Pvt. Ltd.](https://github.com/kulwindersingh-ant)| [Grants webapp](Grant_management_webapp.md) | [GitHub](https://github.com/kulwindersingh-ant) | ☐ | ☐ | ☐ | +| [Zaniyar Jahany](https://github.com/Zaniyar/) | [Grantmaster](grantmaster.md) | [GitHub](https://github.com/Zaniyar/plant2earn/) | ☐ | ☐ | ☐ | +| [FiDi Tech](https://fidi.tech/) | [FiDi DotSight: Analytics Data Platform for DotSama](fidi-dotsight-analytics.md)| [GitHub](https://github.com/fidi-tech) | ☐ | ☐ | ☐ | [🔝](#menu) @@ -77,12 +78,12 @@ Use this page for an overview of all public grants and their status. Use the sid | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------------------------------- | :--------- | :------------: | :--------: | | [Deep Ink Ventures GmbH](http://deep-ink.ventures/) | [GenesisDAO](GenesisDAO.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☒ | ☐ | | [ArtZero](https://artzero.io/) | [ArtZero & InkWhale](ArtZero_InkWhale.md) | [GitHub](https://github.com/artzero-io) | ☐ | ☒ | ☐ | -| [EightFish](https://github.com/eightfish-org/eightfish) | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☒ | ☒ | +| [EightFish](https://github.com/eightfish-org/eightfish) | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☒ | ☒ | | [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☒ | ☒ | | [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☒ | ☐ | | [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | | [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☒ | ☐ | -| [Blockcoders](http://blockcoders.io/) | [Kuma Cross-chain Wallet](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☐ | +| [Blockcoders](http://blockcoders.io/) | [Kuma Cross-chain Wallet](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☐ | | [OmniBTC](https://omnibtc.finance/) | [Polkadot Smart Chain](psc.md) | [GitHub](https://github.com/OmniBTC/PSC) | ☐ | ☒ | ☒ | | [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☒ | ☒ | | [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | @@ -98,7 +99,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☒ | ☐ | | [Zeeve](https://www.zeeve.io) | [Parachain deployment zoombienet testing automation](Zeeve_Parachain_deployment_zoombienet_testing_automation.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | | [Polytope Labs](https://research.polytope.technology/) | [Trie Verifier Implementation](solidity-trie-verifier.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☒ | ☒ | -| [Off-Narrative Labs](https://github.com/Off-Narrative-Labs) | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☒ | ☒ | +| [Off-Narrative Labs](https://github.com/Off-Narrative-Labs) | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☒ | ☒ | | [FuzzLand](https://fuzz.land/) | [FuzzLand](FuzzLand.md) | [GitHub](https://github.com/fuzzland) | ☐ | ☐ | ☐ | | [Fuu](https://github.com/ff13dfly/) | [Anchor, On-chain Linked List pallet and Name Service](Anchor.md) | [GitHub](https://github.com/ff13dfly/Anchor) | ☐ | ☒ | ☒ | | [hack-ink](https://hack.ink/) | [Slothunter](slothunter.md) | [GitHub](https://github.com/hack-ink) | ☐ | ☐ | ☐ | From 8a0021368a54949cb12b2882bfe87924ef462ce2 Mon Sep 17 00:00:00 2001 From: Tony Riemer Date: Mon, 12 Jun 2023 12:51:02 -0300 Subject: [PATCH 466/578] Submit Cryptex Proposal (#1660) * add cryptex proposal * update proposal * update cryptex proposal: etf w/ IBE * update proposal * address feedback * remove q file --- applications/cryptex.md | 295 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 295 insertions(+) create mode 100644 applications/cryptex.md diff --git a/applications/cryptex.md b/applications/cryptex.md new file mode 100644 index 00000000000..1e1da2fe8e4 --- /dev/null +++ b/applications/cryptex.md @@ -0,0 +1,295 @@ +# Cryptex: EtF Network with Aura + +- **Team Name:** Ideal Labs +- **Payment Address:** 0x2CDA3C7D6e21Cc4f43C170c0dFf2e9F3B3B5E889 (USDC) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +This is an EtF (encryption-to-the-future) network based on Aura. This proposal adds identity based encryption (IBE) in conjunction with a modified version of Aura to enable an EtF network, wherein messages can be encrypted to a slot in the future. + +### Overview + +This proposal presents a blockchain that uses a modified Aura in which blocks are sealed . We then implement an encryption-to-the-future (EtF) scheme, where messages can be encrypted for arbitrary slots and epochs in the future. Our proposal consists of a runtime, which modifies Aura and introduces a new pallet to enable the identity based cryptosystem (IBC), a light client, and an SDK which handles synchronization with the blockchain, slot scheduling, and offchain encryption and decryption functionality. In essence, this presents a simplified flavor of 'timelock encryption', though sacrifices full-decentralization for ease of implementation and feasibility (for the time being). + +Being the first EtF network in the ecosystem, Cryptex introduces several new cryptographic primitives which would be useful to others as well. This proposal lays the foundation for a more robust system later on, using a proof of stake consensus (Sassafras) and more sophisticated cryptographic primitives for EtF, such as [McFly](http://fc23.ifca.ai/preproceedings/189.pdf) or based on [commitment witness encryption](https://eprint.iacr.org/2021/1423.pdf). An EtF network can enable randomness beacons, sealed-bid auctions, non-interactive secret sharing, and many other use cases. + +We want to build more extensive and secure decentralized data tools, for which this proposal lays the foundation. We believe that the internet is a better place when it's more fair for all. + +### Project Details + +The major pieces: +1. [IBE Block Seals](#ibe-block-seal-in-aura) +2. [Encryption-to-Future](#encryption-to-future-slots) + +For a more in-depth (informal) look at the mathematics behind this, look at [etf_aura.pdf](https://github.com/ideal-lab5/Grants-Program/blob/ibe/applications/etf_aura.pdf) + +#### What this is not +- For the scope of the proposal, we are assuming a static, well defined validator set using PoA consensus based on Aura. +- the proposal does not highlight any specific privacy preserving tools nor does it use threshold signatures or any specific MPC protocols +- most of that is scoped for the future though + +#### Notation and Terminology + +For the following, assume that we are using curve BLS12-381. As such, we will refer to its scalar field using $\mathbb{Z}_p$. Similarly, we have the pairing friendly elliptic curve groups $\mathbb{G}_1$ and $\mathbb{G}_2$. + +#### Background + +**Threshold Secret Sharing** + Threshold secret sharing (TSS) was first introduced by [Shamir in 1979](https://web.mit.edu/6.857/OldStuff/Fall03/ref/Shamir-HowToShareASecret.pdf). Our protocol uses a TSS scheme with a semi-trusted coordinator to obtain (*not derive) a shared session secret key and shared session public key among the session validator set. We explain this below, and more in depth in [etf_aura.pdf](https://github.com/ideal-lab5/Grants-Program/blob/ibe/applications/etf_aura.pdf). + +**Identity Based Cryptography** + Identity Based Cryptography (IBC) was first introduced by [Shamir in 1984](https://link.springer.com/content/pdf/10.1007/3-540-39568-7_5.pdf). Since then, there has been significant research into identity based cryptosystems, I present an overview to the reader [here](https://csrc.nist.gov/csrc/media/Presentations/2023/stppa5-ibe/images-media/20230209-stppa5-Dan-Boneh--IBE.pdf). A complete IBC consists of six algorithms: `Setup, Keygen, Encrypt, Decrypt, Sign, Verify`. Our network will leverage the sign and verify functionalities to seal and verify blocks, and will use the encrypt and decrypt functionalities to enable encryption-to-future-slots. + + We will use the [Boneh-Franklin identity based encryption scheme](https://crypto.stanford.edu/~dabo/papers/bfibe.pdf) (BF IBE) in this proposal in order to encrypt messages to future slots. + +#### Block Seals in Aura + +The goal of this is to introduce an IBE-BLS block seal in Aura, where each slot has a unique role associated with it that we can encrypt to. In the future, we intend to migrate to [Sassafras](https://eprint.iacr.org/2023/031.pdf). This is the first step to building encryption to the future. We will do this by creating a fork of Aura where we create a DLEQ proof of a BLS signature, which is then used to sign the block using a Fiat-Shamir transform. + +Assume there is a static set of validators defined on network genesis. In Aura, each validator defined in the validator set authors a block in sequential (round robin) order. More concretely, let $A = \{A_1, ..., A_n\}$ be the well defined set of authorites. For now, we'll assume that this set is static. In Aura slots are divided into discrete slots of $t$ seconds each. For any slot $s$, the winner of the slot is determined by A[s % |A|], where $A$ is the set of authorities defined on genesis. Note that this implies, in most cases, that a validator will author more than one block during an epoch. + +**Implementation** + +We provide an overview of how the IBC can be used in the context of our blockchain using Aura. We will attempt to make this a technical treatment while omitting some of the mathematical details. For details, we again refer the reader to [etf_aura.pdf](https://github.com/ideal-lab5/Grants-Program/blob/ibe/applications/etf_aura.pdf) + +Our implementation makes use of the [SessionManager](https://paritytech.github.io/substrate/master/pallet_session/trait.SessionManager.html) trait to perform session shared public/secret key setup within a new pallet, which facilitates the identity based cryptosystem. + +**Genesis/Setup** + + Each validator generates a private key and public key for the underlying signature scheme of the blockchain. Theoretically this could be implemented on any scheme, but we use BLS12-381. Each $A_i \in A$ generates keys $(sk_i, pk_i)$, storing the secret key $sk_i$ securely (in their [keystore](https://paritytech.github.io/substrate/master/sp_keystore/trait.Keystore.html)), with the public keys used to define the initial validators. This is just standard setup. + + On genesis, each authority must have a known secret available. To make this as simple as possible, we will simply hardcode the genesis secrets within the genesis block. This is the only time the secrets will be encoded in plaintext. + + + Before a new session starts and after the initial session, a semi trusted node, the *coordinator*, is responsible for facilitating the threshold secret sharing. It does this by generating a secret polynomial and secret shares, encrypting them, and distributing them to upcoming session validators prior to the session start. To make things even simpler, the coordinator will also derive public keys for each of the authorities based on the secret shares, and publish the public keys along with the encrypted secrets. + + The coordinator also chooses system parameters for the IBC, a generator $P \in \mathbb{G}_1$, then calculates $P_{pub} = sP$, where $s$ is the secret created the the TSS scheme. Then publish $(P, P_{pub}, (k_1, Q_1), ..., (k_n, Q_n))$ on-chain, where $k_1, ..., k_n$ and $Q_i$ are the public keys. are the encrypted secrets. This will happen at the end of a session during the `new-session` function. + +**Keygen and Identity** + Each slot in any given epoch has a unique role associated with it, which is calculated from the slot schedule. For any given address, epoch, and slot number, we calculate a unique role by hashing the address, epoch, and slot number. Later on when encrypting, we will use this value to verify signatures. That is, the public key is $\hat{Q}_i = H(ID_i = (A_i || e_k || sl_r))$. + +**Block Sealing** + The winner of a slot $s$ calculates a secret key corresponding to the slot seed and uses it to sign the block. This operation aligns with the extract phase of the IBE. We implement this within the Aura client code. This works by computing a DLEQ proof $\pi = (c, r)$ where $r$ is randomly selected from the scalar field and $c = H(R_1, R_2, \hat{Q}_i, S_{slot}, b)$ where $R_1 = r G_1$, $R_2 = r G_2$ (for $G_1$, $G_2$ generators of $\mathbb{G}_1$, $\mathbb{G}_2$ resp.), and $b$ is the block hash. We then use the output to produce a proof of knowledge $pok = c s_i + r$. + +**Validation** + When other nodes import the block, they validate it by obtaining the ID for the slot and calculating the public key $Q_i$ and verifying the signature. We verify the signature by using the DLEQ proof to verify that the secret key used to seal the block was constructed by the proper slot winner. + +#### Encryption-to-Future-Slots + +##### Overview + +We propose an Encryption-to-Future (EtF) scheme on top of the modified Aura consensus proposed above. We enable two flavors of EtF, one which allows for encryption to specific slots in the future (but which relies on a single authority for decryption, who could release the key early or not at all), and another which allows for encryption to specific epochs and requires a threshold of authorities to seal blocks to enable decryption. + +The high level idea for encrypting to a specific slot is that given a duration of time, $t$, we can identify a 'slot seed', a role to which we can encrypt a message such that it will be decryptable after time $t$ passes, when the corresponding secret will be published. We accomplish this by: + - Given a duration $t$ from the current slot, calculate a future epoch and slot which will be active when that time occurs. Then, based on the order of the authorities, we calculate the slot seed. + - Encryption and Decryption: both encryption and decryption happen offchain "for free". We intend to use a symmetric flavor of encryption to accomplish this once the slow seed is known. We would also like to explore using the same approach taken in [Boneh-Franklin IBE](https://crypto.stanford.edu/~dabo/papers/bfibe.pdf) for both encryption and decryption. + +As can be seen, it will be paramount that all participants agree on the same 'time'. + +The second type of EtF that we enable uses the threshold scheme setup in the IBE Block seal section to decrypt data. We build this off of the previous result (encryption to a slot). Here, we aggregate the public keys $\hat{Q}$ derived from each authority's identity and use the same BF IBE scheme to encrypt a message for the aggregated public key. Subsequently, using the same decryption approach as BF IBE, once at least at threshold of validators have release their key share, any messages encrypted for $\hat{Q}$ can be decrypted. + +##### Implementation Details + +Since all of this functionality should happen outside the context of a runtime, we implement this as a specialized light client based on [smoldot](https://github.com/smol-dot/smoldot). + +###### Slot Scheduling + + As mentioned above, the idea is that we can take some arbitrary time in the future, $t_{fut}$, and identify a slot and epoch when that future time is expected to occur (assuming persistent liveness of the network). Very roughly, our approach will be similar to the following: + + If we assume that the current slot index is $sl_{prev}$ and the epoch is $e_k$, then we allow slots to be schedule starting from the next slot in the queue, $sl_{curr}$. Given that each slot lasts a static amount of time, say $t_{slot} \; sec/slot$, we can calculate the slot number $t$ seconds in the future with $sl_{fut} = ((t / t_{slot}) \% s) +1$ where $s$ is the number of slots per epoch. We can then identify the slot winner by calculating $A[{fut}\; \% \; |A|]$, and thus the ID. The authority slot assignments will be provided to the user from a light client, with calculations of slot seeds occuring within the SDK. + +###### Encryption-to-future-slots (EtF) + + Assuming that we have found an ID for a future slot $sl_{fut}$, we now want to encrypt for that slot. We will use the Boneh-Franklin IBE scheme to encrypt the message for the slot. We have a basic implementation of the BF IBE scheme[here](https://github.com/driemworks/BasicIdent). + + The ciphertext can be stored offchain with a reference to it published on-chain (in a pallet or contract) by calculating its sha256 hash, for example. In the future, we will replace this flavor of encryption with a more elegant solution (e.g. some type of witness encryption). + +###### Decryption + +When a slot winner's slot is active, they derive a secret key which they then use to seal the block. Additionally, the derived secret key can also be used to decrypt any messages that were encrypted for this slot. When the slot winner publishes a block, it also publishes its newly derived secret key. Offchain decryption will be possible with the BF IBE decryption mechanism. + +#### High Level Architecture + +We propose the architecture of the system at a high level. It consist of three pieces: +- **blockchain**: The PoA blockchain with modified block sealing as above. It is a substrate based runtime with a new pallet that enables the identity based cryptosystem along with our modifications to Aura. +- **user-agent: sdk & client**: A user-agent which handles slot scheduling, encryption, and decryption, as well as synchronization with the blockchain. +- **application + storage layer**: Could be anything, we will use IPFS in conjunction with a smart contract or a pallet to builds apps on the network. + +![high-level-architecture](https://github.com/ideal-lab5/Grants-Program/blob/951b2794708ec62b012b8c6a3d40e98ba4c17d65/applications/etf.drawio.png?raw=true) + +### Ecosystem Fit + +Help us locate your project in the Polkadot/Substrate/Kusama landscape and what problems it tries to solve by answering each of these questions: + +- Where and how does your project fit into the ecosystem? + - to date, there is no EtF network in the ecosystem + - our project tried to take a rigorous academic approach + - our proposal brings new primitives and capabilities to the ecosystem +- Who is your target audience (parachain/dapp/wallet/UI developers, designers, your own user base, some dapp's userbase, yourself)? + - parachain + dapp developers: we provide primitives that can allow other chains to use EtF as well. Additionally, using XCM we can explore cross-chain EtF capabilities. + - users: We don't expect standard users to use the core implementation directly, but we will build applications and other protocols on top of the EtF network which users will find interesting and valuable, such as sealed-bid auction, voting application, and secret sharing applications. +- What need(s) does your project meet? + - It provides a flavor of 'timelock encryption' within the ecosystem + - It lays the foundation for enhancements to the network in the future, which could enable more robust, decentralized, and secure use cases, such as a randomness beacon, decentralized secret sharing, lotteries, and more. +- Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem? + - [Ruby](https://www.ruby.xyz/), sponsored by a w3f grant, enables "cryptographic privacy and access control infrastructure" + - If so, how is your project different? + - Distinct from Ruby protocol, which leverages functional encryption and focuses on monetization of data, where functions can be evaluated over some encrypted data, our design enables encryption to the future 'for free', with monetization outside of the core implementation. + - Ruby incorporates zk proofs and other privacy preserving tools, which we intend to do in the future. + - If not, are there similar projects in related ecosystems? + - [Drand](https://drand.love/docs/timelock-encryption/#what-is-it): Drand, the distributed randomness beacon, uses a DKG and threshold BLS signatures in their 'league of entropy' in order to provide randomness as a service. They also enable flavors or timelock encryption described (here)[https://drand.love/docs/timelock-encryption/#the-math-bit-%F0%9F%A4%93]. + - [Lit Protocol](https://litprotocol.com/): LIT is a protocol that runs on a distributed network of mostly static nodes who each participate in a DKG to enable TSS *threshold signature scheme/threshold secret sharing. LIT, however, isn't a blockchain and it does not use IBE. + +## Team :busts_in_silhouette: + +### Team members + +- Tony Riemer +- Carlos Montoya + +### Contact + +- **Contact Name:** Tony Riemer +- **Contact Email:** driemworks@idealabs.network +- **Website:** https://idealabs.network + +### Legal Structure + +- **Registered Address:** TBD +- **Registered Legal Entity:** TBD + +### Team's experience + +Tony has worked on two, [here as "iridium"](https://github.com/w3f/Grants-Program/blob/master/applications/iris.md) and [here as "Ideal Labs"](https://github.com/w3f/Grants-Program/blob/master/applications/iris_followup.md). + +### Tony Riemer + +I am an engineer and math-lover with a passion for exploring new ideas. I studied mathematics at the University of Wisconsin and subsequently went to work at [Fannie Mae](https://en.wikipedia.org/wiki/Fannie_Mae) and then [Capital One](https://en.wikipedia.org/wiki/Capital_One), where I mainly worked on fintech products, like systems for loan servicing and efficient pricing algorithms. For the previous year and a half, I've been working exclusively in the web3 space, including having worked on two web3 foundation grants [here](https://github.com/w3f/Grants-Program/blob/master/applications/iris.md) and [here](https://github.com/w3f/Grants-Program/blob/master/applications/iris_followup.md) and as an independent consultant. Beyond the web3-sphere, I have dabbled in many open source projects as well as have built several of my own, ranging from computer vision, machine learning, to IoT and video games. Most recently, I attended the Polkadot Blockchain Academy in Buenos Aires, and this new proposal is an application of ideas I learned there applied to my previous grant. + +### Carlos Montoya +I have been doing software for more than 20 years, most recently in the startup world. +- **Blockchain Experience** +I am currently Engineering Manager at Parity's Ecosystem Development department. My passion for web3 started a couple of years ago during covid. I started my journey building smart contracts with solidity, and took part in some boot-camps and hackathons through 2021 and 2022. I built several apps, one of them a decentralized job-board protocol called [web3Jobs](https://ethglobal.com/showcase/web3jobsfevm-inz64) ([Repo](https://github.com/encode-g2-project)). Early this year I had the fortune to participate in the PBA hosted in Buenos Aires, and I have been in love with Substrate and Rust since then. Cryptex's idea emerged during my time in the academy. +- **Software Engineering Experience** + Since early 2021 I have been building [TeamClass](https://www.teamclass.com) as CTO and partner. TeamClass is a b2b marketplace for helping companies with their team-building initiatives through virtual events. We bootstrapped TeamClass ourselves and made sales by 3.8M in our first year. Previously, between 2016 and 2020 I was completely focused on building [StellarEmploy](https://www.stellaremploy.com) with my co-founders, where we had the opportunity to participate in NY ERA (Accelerator), and got institutional capital. StellarEmploy's technology was recently acquired by Learning Collider. Finally, between 2004 and 2015, I was CTO and Chief Architect at [MVM Software Engineering](https://www.mvm.com.co/?lang=en), a technology firm with a deep focus on energy solutions. During my time there I had the responsibility of defining the way of doing software for the entire company, leading very skilled people, building complex software products, and managing hundreds of initiatives for helping the company to expand its operations in Colombia, the Dominican Republic, and Mexico. +- **Carnegie Mellon University** Master of Science Information Technology, 2011 - 2013 +- **Tecnológico de Monterrey** Master in Information Technology Management, 2011 - 2013 +- **Universidad Pontificia Bolivariana** Innovation and Technology Management, 2009 - 2010 +- **Universidad Autónoma de Manizales** Systems Engineer, 1997 - 2002 + +### Team Code Repos + +The intended repos for this project are (but possibly subject to name change): + +- https://github.com/ideal-lab5/substrate +- https://github.com/ideal-lab5/cryptex-node +- https://github.com/ideal-lab5/cryptex-sdk +- https://github.com/ideal-lab5/contracts +- https://github.com/ideal-lab5/cryptex-client + +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. + +- https://github.com/driemworks +- https://github.com/carloskiron + +### Team LinkedIn Profiles + +- https://www.linkedin.com/in/tony-riemer/ +- https://www.linkedin.com/in/cmonvel/ + +## Development Status :open_book: +- This proposal is a result of the discussion here: https://github.com/w3f/Grants-Program/pull/1660 +- We have an implementation of BasicIdent over BLS12-381 here: [BasicIdent](https://github.com/driemworks/BasicIdent) +- There are many protocols that use some form of witness encryption to accomplish something similar, for example [time lock encryption](https://eprint.iacr.org/2015/482.pdf) or [commitment witness encryption](https://eprint.iacr.org/2021/1423). Our design is inspired by these ideas but uses a simpler approach (for now...). +- [BF IBE](https://crypto.stanford.edu/~dabo/papers/bfibe.pdf) +- [IBS Overview](https://homepage.ruhr-uni-bochum.de/eike.kiltz/papers/ibschapter.pdf) + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 3 months +- **Full-Time Equivalent (FTE):** 1.5 FTE +- **Total Costs:** 30,000 USD + + +### Common Deliverables + +It should be assumed that, unless specified otherwise, each deliverable also includes proper testing (e.g. deliverable (0c)) and documentation of the item, including manual testing, unit testing, and benchmarking. + +The following items are mandatory for each milestone: + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | GPLv3 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| **0e.** | Article | We will publish an **article**/workshop that explains [...] (what was done/achieved as part of the grant). (Content, language and medium should reflect your target audience described above.) | + +Additionally, outside the scope of the specified milestones, we also intend to formalize the ideas in this proposal within a whitepaper. + +### Milestone 1 — Block Seals + +- **Estimated duration:** 1 month +- **FTE:** 1.5 +- **Costs:** 10,000 USD + +Goal: Implement the IBE block seal in Aura. We do this by creating a new pallet to facilitate the identity based cryptosystem, as well as modifying the Aura pallet and client code. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 1. | Substrate module: IBE Pallet/IBC Setup | We create a new pallet responsible for storing parameters needed for the identity based cryptosystem as detailed above. This includes param generation and distribution of the msk to authorities. The outcome of the deliverable is the pallet capable of storing system params for the IBC, including the keygen phase managed by the SessionManager. | +| 2. | Substrate module: Aura Pallet | We modify the Aura pallet to be able to calculate epk's for each known session validator. Pubkeys will be calculated *on session planning* and encoded in runtime storage. | +| 3. | Substrate module: Aura Client | We modify the Aura client to sign blocks with its secret key generated with the identity based cryptosystem as detailed above. We also modify the signature validation phase of consensus to verify the signature/DLEQ proof. For the sake of ease, the block author will publish its secret along with the block. | +| 4. | Substrate Module: Validator Incentives | We ensure that validators are rewarded when they participate honestly within the protocol (i.e. publish a secret). We do this by making our token inflationary, where each block author is rewarded in additional tokens when they correctly output a secret. | + +### Milestone 2 — Encryption to Future Slots + +- **Estimated Duration:** 1 month +- **FTE:** 1.5 +- **Costs:** 10,000 USD + +Goal: We want to enable encryption to future slots, including slot scheduling, encryption, and decryption. The following items also necesitates the development of a basic user interface, which uses the light client and SDK which we develop. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 1. | Light Client | We implement a light client (based on smoldot) with the added functionality that it: a. can open connections to specific nodes b. ensure clocks are properly set, otherwise return an error. This is to ensure proper synchronization, so that slot scheduling can be reliable/accurate. | +| 2 | User Interface: setup | We introduce a user interface which will act as a testbed for integrations between the light client and the SDK. The user interface will be a React project, will connect to the network via the light client, and will interface with IPFS (for storage and retrieval of ciphertexts). This intention is to integrated both light client and SDK and also to ensure that interactions with the chain function as intended. | +| 3. | SDK: Slot Scheduling | We implement slot scheduling logic to identify a future slot based on some future 'time' and derive its inputs. | +| 4. | SDK: Encryption | Using the output of the slot scheduler, the user agent will be able to encrypt to a future slot or epoch. Ciphertexts will be stored offchain in IPFS, and we will refer to stored ciphertexts by their CID. | +| 5. | SDK: Decryption | After a block is authored for the specified future slot, we can decrypt the secret by fetching the secret published with the block (if encrypted to a slot) or a threshold of published secrets (encrypted to epoch) and using it to decrypt the ciphertext created previously. | + +### Milestone 3: Putting it all together - Sealed-Bid NFT Auction PoC + +- **Estimated Duration:** 1 month +- **FTE:** 1.5 +- **Costs:** 10,000 USD + +Goal: We want to put everything developed thus far into action by developing an application that runs on the EtF network. A simple use case is to create a sealed-bid auction platform, where bids are sealed until a certain slot in the future. This work will include the development of an auction contract along with a user interface. At the end of this milestone, we will have a small testnet hosted on google cloud as well as a dapp for sealed-bid NFT auctions. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 1. | Smart Contract: Auction Contract | We develop a smart contract (and host it on our blockchain) that enables an on-chain auction where participants can issue a sealed-bid which will unseal at some specific future slot. The sealed bid is stored in the contract. | +| 2. | UI/SDK: Auction Interface | We develop an interface based on the testbed created in the previous milestone. This interface will have functionality to make calls to contracts, storage, and the blockchain. We also use this milestone to 'batrtletest' our SDK and resolve any issues that could arise in a real-world use case. | +| 3. | UI + Testnet Deployment | We deploy validator nodes to google cloud and build our first testnet. We will setup telemetry and monitoring in order to gauge real-time performance. We will also host our UI production build on IPFS and setup proper certs. | + +## Future Plans + +- enhance the design to use privacy preserving mechanisms +- migrate to the new sassafras consensus instead of Aura +- investigate and implement more advanced approaches to EtF +- complete a whitepaper which details the design +- security audit should be performed +- explore and implement more use cases on the network such as: implement non-interactive rule-based secret sharing on the EtF network +- we aim to become a parachain + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Web3 Foundation Website / Medium / Twitter / Element / Announcement by another team / personal recommendation / etc. +- Tony initially heard about this a year ago via the substrate website. Collectively, we all learned about the grants program at the polkadot blockchain academy. + +Here you can also add any additional information that you think is relevant to this application but isn't part of it already, such as: + +- As stated previously, Tony has worked on two grants previous to this one. The items in this grant are very much inspired by the Iris grant, however, it is intended to fix all of the vulnerabilities and issues (i.e. lack of scalability) that Iris failed to do. From d7f176deb7013c8155e592d5ee08e2dba8052912 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 12 Jun 2023 17:53:35 +0200 Subject: [PATCH 467/578] Update index.md Add Cryptex --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index cc523da80a7..2af7782cd9c 100644 --- a/applications/index.md +++ b/applications/index.md @@ -69,6 +69,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Antier Solutions Pvt. Ltd.](https://github.com/kulwindersingh-ant)| [Grants webapp](Grant_management_webapp.md) | [GitHub](https://github.com/kulwindersingh-ant) | ☐ | ☐ | ☐ | | [Zaniyar Jahany](https://github.com/Zaniyar/) | [Grantmaster](grantmaster.md) | [GitHub](https://github.com/Zaniyar/plant2earn/) | ☐ | ☐ | ☐ | | [FiDi Tech](https://fidi.tech/) | [FiDi DotSight: Analytics Data Platform for DotSama](fidi-dotsight-analytics.md)| [GitHub](https://github.com/fidi-tech) | ☐ | ☐ | ☐ | +| [Ideal Labs](https://www.idealabs.network/) | [Cryptex](cryptex.md)| [GitHub](https://github.com/ideal-lab5) | ☐ | ☐ | ☐ | [🔝](#menu) From 3c0402413c9d81c20459ae190ad53af4041a03f3 Mon Sep 17 00:00:00 2001 From: Xcavate Date: Mon, 12 Jun 2023 19:55:54 +0100 Subject: [PATCH 468/578] XcavateDeveloperLoandApp (#1649) * New Grant Proposal: Xcavate - the future of real estate finance & property investment * Update Project_Xcavate.md hosted images on our server * Update Project_Xcavate.md correction to image URLs * Delete XCAV-WEB-3-Grant-Application-Image-1.jpg hosted elsewhere * Delete XCAV-WEB-3-Grant-Application-Image-2.jpg hosted elsewhere * Delete XCAV-WEB-3-Grant-Application-Image-3.jpg hosted elsewhere * Delete XCAV-WEB-3-Grant-Application-Image-4.jpg hosted elsewhere * Update Project_Xcavate.md Reduced scope of work to focus on onboarding the project in to the Polkadot eco system * Updates to grant submission Hopefully addressing the questions / issues raised * move project file requested to move file to applications folder * Add files via upload * Delete Project_Xcavate.md old project submission * Rename Project_Xcavate_feb2023.md to Xcavate.md * Update Xcavate.md Revised W3F grant to only focus on building a PoC of the lending protocol dApp * Update Xcavate.md Revised application... more details and new dev team added * Update Xcavate.md Added new member of the team * Update Xcavate.md added another team member * Update Xcavate.md added current symbol to milestone fund request + moved the milestone deliverables inline with template. updated one team members linkedin and full name. * Update Xcavate.md Adapt grant application to focus on ink! contract use case * Update Xcavate.md * Update Xcavate.md * Update Xcavate.md * Update Xcavate.md * Update Xcavate.md --- applications/Xcavate.md | 175 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 175 insertions(+) create mode 100644 applications/Xcavate.md diff --git a/applications/Xcavate.md b/applications/Xcavate.md new file mode 100644 index 00000000000..c306efbafb0 --- /dev/null +++ b/applications/Xcavate.md @@ -0,0 +1,175 @@ +# Xcavate + +> We are building a real estate centric lending and asset minting protocol. + +- **Team Name:** Xcavate +- **Payment Address:** 5E28NSFGwYB9C39bYdRAQ79UKRsM6shxkJr3LG4hehycwfJc +- **Total Costs:** $10000 USDT (Polkadot - Statemint) +- **Level:** 1 + +## Project Overview + +Due to a combination of increased population and changing housing needs, there is global housing crisis. According to the UN, the global population is set to reach over 11.2 billion by the year 2100, therefore 2 billion new homes are required in the next 80 years. 20% of all housing is built by small to medium sized real estate developers but access to finance through traditional banks and other financial institutions is complex, time consuming and expensive. + +Xcavate is looking to solve this issue by developing a completely decentralised lending and NFT protocol governed by a DAO to help fund the building of real world real estate assets, as well as transact and manage fractions of each property as a route to a global real estate investor market. Our goal is to create a Decentralised Autonomous Organisation (DAO), which has a core Fellowship of real estate developers, investors and blockchain developers accountable to its wider community, so more houses can be built and invested in to help reach the growing demand. + +### Overview + +Xcavate will be a first-of-its-kind real-world land & property NFT platform that collateralises real world parcels of land to finance real estate development. +Xcavate facilitates digitising land and/or property title deeds through minting and bundling of NFTs, which are then linked to verifiable digital identities (DIDs) approved by government entities. +Xcavate is an ecosystem that allows real-world property developers access to finance parcels of physical land with planning permission for development. Once the land is at the final development stage, the developer will create NFTs for the individual properties to be sold/managed by a peer-to-peer marketplace (property owners, investors, trusts etc.). +The system will significantly reduce the time from real estate planning permission to build start. By simplifying the finance application process and speeding up the release of funds to the developer. Xcavate not only provides real-world property developers with a way to build quicker but, as a result, enables a more significant number of much-needed houses to be delivered to market. It also provides liquidity to static real-world assets at every stage of the property development process in a fair and risk-averse way. It will enable the real estate to be onboarded cleanly and efficiently, opening up opportunities throughout the broader Dotsama ecosystem. + +### Project Details + +We will initially build a POC of the real estate developer loan process to prove the concept. Building a simple polkadot.js wallet that allows verification of identity and creation of DIDS (through the KILT protocol). Once land ownership and build value has been identified (using Oracles) then the LAND NFT can be minted and placed in a multi-sig wallet along with the full loan amount (from the community loan pool). Each build tranche of money will be delivered to the real estate developer wallet, once real estate build evidence has been established and verified. + +![](https://xcavate.io/W3F/DeveloperLoanProcessPOCv2.jpg) + +Xcavate will adapt and build multiple Pallets to execute the functionalities. We will use the KILT SDK as well as the substrate framework and primary language Rust to create the pallets on the Polkadot ecosystem. +Token Pallet +Decentralised Identity Document pallet +User Management pallet +Loan Management pallet +Transaction management pallet +Staking pallet +Verification pallet + +This Architecture diagram shows the visual representation that maps out the physical implementation for components in the Polkadot ecosystem and how the scalability of the platform works. The diagram represents Microservices we are using to execute the functionality. API gateway will split the API calls to the respective microservices. We are using an s3 bucket to store the media files. We are using pallets to execute the functions on the Polkadot ecosystem. + +![](https://xcavate.io/W3F/XCAV-WEB-3-Grant-Application-Image-4.jpg) + +Token: +XCAV - Platforms Native Token to launch a para chain and participate in a crowd loan/slot auction. XCAV tokens are used to stake within the platform. We will create these tokens with the Transfer, Mint, Burn, Approve, and Allowance functions. +Liquidity Pool: +Xcavate creates a liquidity pool to store staked tokens, staked tokens will be queued and utilized for each loan application. XCAV tokens are swapped as GBPT through XCM and deposited on the Central Loan pool. +Central Loan Pool: +Xcavate Creates a central loan pool to manage Loan amounts and Loan repayment. The central lending pool will act as the heart of the platform to map all the transactions. + +### Technology Stack + +* React.js +* Node.js +* Express.js +* Rust +* Substrate Framework +* Polkadot + +### Third-Party + +* Kilt – SDK +* Chainlink +* AWS + +### Ecosystem Fit + +After many months of research, we initially met on a zoom with Ingo from Kilt, discussing our idea and talking through how the Kilt chain can be incorporated into the Xcavate system. A few weeks later, we contacted Acala and met with Robinson, who was very helpful and enthusiastic about us being involved in the ecosystem and our potential partnership. We also reached Centrifuge and spent many weeks looking through their docs with the initial idea of creating a dApp on their chain, but as there were some striking differences in how their chain operated, it was apparent that was not going to be the best fit for our project. Going forward, however, once the real estate has been built, there will be opportunities for us to introduce Centrifuge. + +We feel this is a great way to bring land & Property assets into the digital ecosystem to interact with the following potential partners: + +**Kilt (Identity & wallet)** +This is a crucial part of the initial process to verify; Real Estate Director, Company & Title Deed and create DID’s, which will be held in a polkadot.js wallet and used throughout the process. +**Statemint / Acala** +There are many stages of financing that will involve aUSD / USDT / GDPT… from the initial funding pool, a liquidity pool, as well as the need to exchange the locked loan value for each project in GBP stable coins (as our initial market is based in the UK). +**CRUST** +Our POC will use AWS to prove the concept, however going forward we will look to host our dApp and all the land and property related documents on the Crust network. +**Subwallet** +Integrate DID's and Real Estae NFTs in to the their wallet to improve the UI/UX + + +## Team :busts_in_silhouette: + +### Team members + +* Richard Houldsworth – CTO +* Alex Ward – COO +* Ganish Oli - Substrate Developer +* Rene Hürter - Substrate Developer +* Neeraj Choubisa - Full Stack Developer +* Victor Chukwonoso - UI/UX Designer + +### Contact + +- **Contact Name:** Richard Houldsworth +- **Contact Email:** richard@xcavate.io +- **Website:** xcavate.io + +### Legal Structure + +* H & W Investments Limited +* 17 College Road, Cheshunt EN8 9LS, United Kingdom + +### Team's experience + +Richard Houldsworth – 10 years in web 2.0 dev space – serial Entrepreneur +Alex Ward – 25 years in the global property market – serial Entrepreneur +Ganish Oli - ink! smart contract developer and substrate blockchain developer. +Rene Hürter - I am currently studying to become a blockchain developer. Alchemy University Ethereum Bootcamp 11/2022. Scaling Ethereum 2023 Hackathon 11/03/2023. Consensus 2023 Hackathon (Web3athon 2023) 17/04/2023. +Neeraj Choubisa - A Passionate Full Stack Blockchain Ethereum Based Web Developer, Third-Year student at Indian Institute of Information Technology, Dharwad + +### Team Code Repos + +https://github.com/xcavateblockchain +https://github.com/xcavate2022 +https://github.com/ganesh1233456 +https://github.com/Kali-Decoder +https://github.com/RecrafterH + +### Team LinkedIn Profiles + +https://www.linkedin.com/in/richard-houldsworth/ +https://www.linkedin.com/in/alex-ward-2350a036/ +https://www.linkedin.com/in/ganesh-oli-9285a4163/ +https://www.linkedin.com/in/neeraj-choubisa-a4952b202/ +https://www.linkedin.com/in/ren%C3%A9-h%C3%BCrter-36084b249 + +## Development Status :open_book: + +We have been heavily involved in learning all things associated with the Polkadot & Kusama Ecosystem. This has been coupled with the idea of bringing land and property from its current state into the web3 ecosystem. We have been meeting with top-level industry leads, government officials and developers. +Robin Ejsmond-Frey and Nico Morgan from Parity have been a tremendous help by supporting us with information about the W3F grant application process and recommendations to attend Hackathons and the Polkadot Decoded Event London. As well as as number of forums to help our substrate development knowledge. + +We have been taking time to play with Substrate to form initial local nodes. We feel we are now ready to build the initial POC for this project in the Rococco test environmenment. + + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 2 months +- **Full-Time Equivalent (FTE):** 4 +- **Total Costs:** $10000 USDT + +### Milestone 1 — Initial POC of lending protocol + +- **Estimated Duration:** 2 months +- **FTE:** 4 +- **Costs:** $10000 USDT + +We will build on the excellent work we have achieved developing the Real Estate NFT marketplace for the hackerearth.com hackerthon. + +In the first milestone, the features for the PoC will be implemented and tested by limited users. We will adapt FRAME pallets to create a unique structure of a central community loan pool that acts as a risk reducer to allow individual loan stakers to lock and unlock native XCAV coins quickly and easily, rather than being committed to the full term of a particular loan. This will provide an attractive low risk investment opportunity and increase community confidence in the network while eliminating any delay in providing the funds to the real estate development project, once all the necessary checks have been completed. This loan pool structure could be applied to many different chains in future projects. The execution of various stages of the dApp specific logic will built using ink! smart contracts. + +| Number | Deliverables | Specification +|:----------|:---------------------------|:------------------------ | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | The documentation will be provided to show the whole architecture of the Xcavate Network. | +| 0c. | Testing and Testing Guide | The testing guide will be provided to test each component. | +| 0d. | Docker | We will provide a dockerfile to demonstrate the full functionality of our chain | +| 0e. | Tutorial | We will write a tutorial about how to use Xcavate Network. | +| 0f. | Article | We will write an article published on media channels. | +| 1 | Xcavate Node Repo | We will create a customized chain node with Substrate 2.0 Framework. | +| 2 | Xcavate Loan App Repo | All smart contracts will be written in Ink! to handle all the on chain runtime events related pallet functions such as; 1) Assess loan application criteria 2) Creation and management of multisig wallet 3) Minting and transfer of LAND NFTs 4) Defining and executing the loan APR structure 5) Monitor and execute real estate build stage checks 5) Deliver tranches of loan amounts to wallets 6) Manage the loan repayment and NFT transfer. | +| 3. | Loan management pallet | * Manage loan application ** Land details' ** Registration * Manage loan interest percentage ** Based on land and experience * Approve/Reject request | +| 4. | Staking pallet | * User can stake native token * Calculate APR * Distribute payouts | +| 5. | Verification pallet | * Verification of user identity * Manage users identity * Manage loan request | +| 6. | DAO | The PoC will have a basic DAO structure that will be created using the OpenGov pallet to ensure rewards can be given to the real estate build stage checkers (As we progress in to the MVP stage this will be expanded to form a full governance structure). | +| 7. | Decentralized Developer Loan dApp / Front End Repo | It's a webpage working with Xcavate Network, it's implemented based on polkadot.js as planned. | + +## Future Plans + +We are talking to Subwallet about integrating the KILT protocol DIDs in to their wallet for a smoother and simpler user experience. Once we have built the initial POC then on to the MVP and GTM. We have already started the white paper as well as developed a pitch deck to demonstrate the potential of the system to; investors, partners and eventually XCAV coin holders. We have started a social media campaign in order to build a community now and through the dApp build & testing stages. + + +## Additional Information :heavy_plus_sign: + +We will be attending the 2023 Polkadot Decoded event. We are keen to network and expand our partnerships across the Dotsama Ecosystem, while helping to build much needed real estate investment opportunities to a global population. From 25896d05331c5831a7a6e1b75c7e4b7b3184121e Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 12 Jun 2023 20:58:38 +0200 Subject: [PATCH 469/578] Update index.md Add Xcavate --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 2af7782cd9c..f7a92b01a02 100644 --- a/applications/index.md +++ b/applications/index.md @@ -70,6 +70,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Zaniyar Jahany](https://github.com/Zaniyar/) | [Grantmaster](grantmaster.md) | [GitHub](https://github.com/Zaniyar/plant2earn/) | ☐ | ☐ | ☐ | | [FiDi Tech](https://fidi.tech/) | [FiDi DotSight: Analytics Data Platform for DotSama](fidi-dotsight-analytics.md)| [GitHub](https://github.com/fidi-tech) | ☐ | ☐ | ☐ | | [Ideal Labs](https://www.idealabs.network/) | [Cryptex](cryptex.md)| [GitHub](https://github.com/ideal-lab5) | ☐ | ☐ | ☐ | +| [Xcavate](https://xcavate.io/) | [Real estate centric lending and asset minting protocol](Xcavate.md)| [GitHub](https://github.com/xcavateblockchain) | ☐ | ☐ | ☐ | [🔝](#menu) From df6ace3ec1945618dbab34a00bd67f69596b005b Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Tue, 13 Jun 2023 08:30:11 +0200 Subject: [PATCH 470/578] Update applications/index.md Complete Liberland --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index f7a92b01a02..51876745e7b 100644 --- a/applications/index.md +++ b/applications/index.md @@ -180,7 +180,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [QRUCIAL OÜ](https://qrucial.io/) | [QRUCIAL DAO](./QRUCIAL_DAO.md) | [GitHub](https://github.com/Qrucial/QRUCIAL-DAO) | ☐ | ☒ | ☐ | | [Polkadot js plus](http://polkadotjs.plus/) | [Polkadot js plus / Social Recovery Wallet](./Plus-social-recovery-wallet.md) | [GitHub](https://github.com/Nick-1979/polkadot-Js-Plus-extension/wiki) | ☐ | ☒ | ☐ | | [Lee](https://github.com/rust-0x0) | [Hex Space Social Graph](./hex.md) | [GitHub](https://github.com/rust-0x0) | ☐ | ☒ | ☐ | -| [Liberland LLC](https://liberland.org/en/) | [Liberland Pallets](./liberland.md) | [GitHub](https://github.com/liberland/liberland_substrate) | ☐ | ☒ | ☐ | +| [Liberland LLC](https://liberland.org/en/) | [Liberland Pallets](./liberland.md) | [GitHub](https://github.com/liberland/liberland_substrate) | ☐ | ☒ | ☒ | | [Standard Protocol](https://standard.tech/) | [Signac - a monorepo plugin for developing multiple Parity ink! smart contracts](./signac.md) | [GitHub](https://github.com/standardweb3/signac) | ☐ | ☒ | ☒ | | [B-Datagray](https://www.b-datagray.com/) | [Datagen Project](./Datagen_Project.md) | [GitHub](https://github.com/Datagen-Project) | ☐ | ☒ | ☐ | | [Colorful Notion](https://polkaholic.io/#chains) | [Polkaholic.io's Multi-Chain Substrate Block Explorer](./Polkaholic.md) | [GitHub](https://github.com/colorfulnotion/polkaholic/) | ☐ | ☐ | ☐ | From 42b3fef6b2f60890ef8ee42215c267b11681e613 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Tue, 13 Jun 2023 11:48:44 +0200 Subject: [PATCH 471/578] Update help.md Fix image URLs --- docs/help.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/help.md b/docs/help.md index 8653fe7dc12..012e258b4d2 100644 --- a/docs/help.md +++ b/docs/help.md @@ -36,7 +36,7 @@ It is **not** a chance to pitch your project, especially since only a small subs
-| | | | | | +| | | | | | | :-: | :-: | :-: | :-: | :-: | | [W3F Website](https://web3.foundation) | [W3F Twitter](https://twitter.com/web3foundation) | [W3F Medium](https://medium.com/web3foundation) | [Polkadot Wiki](https://wiki.polkadot.network/en/) | [W3F YouTube](https://www.youtube.com/channel/UClnw_bcNg4CAzF772qEtq4g) | From e2845033c42c5f7b726a233811d6c33c49012581 Mon Sep 17 00:00:00 2001 From: ashWhiteHat Date: Wed, 14 Jun 2023 18:11:07 +0900 Subject: [PATCH 472/578] zkwasm rollup amend timeline (#1788) * amend timeline * update estimated duration --- applications/zkwasm-rollups-transfer.md | 31 ++++++++++++++++--------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/applications/zkwasm-rollups-transfer.md b/applications/zkwasm-rollups-transfer.md index 2465d830c58..b1d7b66e521 100644 --- a/applications/zkwasm-rollups-transfer.md +++ b/applications/zkwasm-rollups-transfer.md @@ -98,11 +98,11 @@ We are not on LinkedIn. We already implemented cryptographic primitives which are compatible with `parity-scale-codec`. -- [zero-crypto](https://github.com/zero-network/zero/tree/master/primitive/crypto) [![crates.io badge](https://img.shields.io/crates/v/zero-crypto.svg)](https://crates.io/crates/zero-crypto) -- [zero-jubjub](https://github.com/zero-network/zero/tree/master/primitive/jubjub) [![crates.io badge](https://img.shields.io/crates/v/zero-jubjub.svg)](https://crates.io/crates/zero-jubjub) -- [zero-bls12-381](https://github.com/zero-network/zero/tree/master/primitive/bls12_381) [![crates.io badge](https://img.shields.io/crates/v/zero-bls12-381.svg)](https://crates.io/crates/zero-bls12-381) -- [zero-elgamal](https://github.com/zero-network/zero/tree/master/primitive/elgamal) [![crates.io badge](https://img.shields.io/crates/v/zero-elgamal.svg)](https://crates.io/crates/zero-elgamal) -- [zero-pairing](https://github.com/zero-network/zero/tree/master/primitive/pairing) [![crates.io badge](https://img.shields.io/crates/v/zero-pairing.svg)](https://crates.io/crates/zero-pairing) +- [zero-crypto](https://github.com/KogarashiNetwork/Kogarashi/tree/master/primitive/crypto) [![crates.io badge](https://img.shields.io/crates/v/zero-crypto.svg)](https://crates.io/crates/zero-crypto) +- [zero-jubjub](https://github.com/KogarashiNetwork/Kogarashi/tree/master/primitive/jubjub) [![crates.io badge](https://img.shields.io/crates/v/zero-jubjub.svg)](https://crates.io/crates/zero-jubjub) +- [zero-bls12-381](https://github.com/KogarashiNetwork/Kogarashi/tree/master/primitive/bls12_381) [![crates.io badge](https://img.shields.io/crates/v/zero-bls12-381.svg)](https://crates.io/crates/zero-bls12-381) +- [zero-elgamal](https://github.com/KogarashiNetwork/Kogarashi/tree/master/primitive/elgamal) [![crates.io badge](https://img.shields.io/crates/v/zero-elgamal.svg)](https://crates.io/crates/zero-elgamal) +- [zero-pairing](https://github.com/KogarashiNetwork/Kogarashi/tree/master/primitive/pairing) [![crates.io badge](https://img.shields.io/crates/v/zero-pairing.svg)](https://crates.io/crates/zero-pairing) - [zero-plonk](https://github.com/zero-network/dusk-plonk/tree/acffa2e0af43fdaf40c0f1e4d38b6124c57f5a05) [![crates.io badge](https://img.shields.io/crates/v/zero-plonk.svg)](https://crates.io/crates/zero-plonk) ## Development Roadmap :nut_and_bolt: @@ -111,13 +111,13 @@ Through this grant, we are going to implement the **zkwasm** which supports tran ### Overview -- **Total Estimated Duration:** 6 months +- **Total Estimated Duration:** 11 months - **Full-Time Equivalent (FTE):** 2 FTE - **Total Costs:** 40,000 USDT ### Milestone 1 | Crypto Primitive -- **Estimated duration:** 1.5 month +- **Estimated duration:** 2 month - **FTE:** 2 - **Costs:** 10,000 USDT @@ -136,7 +136,7 @@ In `Milestone 1`, we are going to implement `RedDSA`, optimize `Jubjub` curve an ### Milestone 2 | Plonk Extension -- **Estimated duration:** 1.5 month +- **Estimated duration:** 3 month - **FTE:** 2 - **Costs:** 10,000 USDT @@ -191,6 +191,15 @@ In `Milestone 4`, we are going to implement rollup node. This can aggregate tran | 2. | client transactor implementation | We are going to implement client library to request transfer transactions to rollup node. This is the combination of Redsa wallet and proof generator. | | 3. | integrate network | We are going to integrate network. There are four actor mainchain, rollup node and transactor, prover. The transactor generates the transaction and delegate proof generation to prover. The prover generates proof and send it back to transactor. The transactor send transaction to rollup node. The rollup node aggregates these transaction and commit the state to mainchain. | +## Timeline + +| Milestone | Deliverable | Estimated Duration (month) | Deadline | +| -----: | ----------- | ------------- | ------------- | +| 1 | Crypto Primitive | 2 | 2023 7/31 | +| 2 | Plonk Extension | 3 | 2023 10/31 | +| 3 | Zk Wasm Transfer Prover and Verifier | 1.5 | 2023 12/14 | +| 4 | Zk Wasm Transfer Rollup Node | 1.5 | 2024 1/31 | + ## Future Plans - Fully zkwasm rollup @@ -209,9 +218,9 @@ In `Milestone 4`, we are going to implement rollup node. This can aggregate tran - [zero-elgamal](https://crates.io/crates/zero-elgamal) - [zero-pairing](https://crates.io/crates/zero-pairing) - [zero-plonk](https://crates.io/crates/zero-plonk) - - [pallet-plonk](https://github.com/zero-network/zero/tree/master/pallets/plonk) - - [pallet-encrypted-balance](https://github.com/zero-network/zero/tree/master/pallets/encrypted_balance) - - [pallet-confidential-transfer](https://github.com/zero-network/zero/tree/master/pallets/confidential_transfer) + - [pallet-plonk](https://github.com/KogarashiNetwork/Kogarashi/tree/master/pallets/plonk) + - [pallet-encrypted-balance](https://github.com/KogarashiNetwork/Kogarashi/tree/master/pallets/encrypted_balance) + - [pallet-confidential-transfer](https://github.com/KogarashiNetwork/Kogarashi/tree/master/pallets/confidential_transfer) - [above documentation](https://zero-network.github.io/zero/) - Wheter there are any other teams who have already contributed (financially) to the project. - No. From b5ac65871dc324a8228ec3fcb988678184b9caf2 Mon Sep 17 00:00:00 2001 From: Denis Cavalli Date: Wed, 14 Jun 2023 20:21:38 +0200 Subject: [PATCH 473/578] Updating staff and timeline (#1803) --- applications/odyssey_momentum.md | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/applications/odyssey_momentum.md b/applications/odyssey_momentum.md index 5e486586a61..2e6cde46550 100644 --- a/applications/odyssey_momentum.md +++ b/applications/odyssey_momentum.md @@ -145,7 +145,6 @@ OVERALL ARCHITECT: Anton Starikov (CTO) **TOKEN TRACK TEAM** - TRACK LEAD: Dave Hoogendoorn - RUST DEVELOPER: Denis Cavalli -- RUST DEVELOPER: Raghuvar Vijayakumar - WEB3ANALYST: Tim Jansen *All team members are solely dedicated to the token Track.* @@ -170,8 +169,6 @@ OVERALL ARCHITECT: Anton Starikov (CTO) *Denis Cavalli* is a Senior Rust Software Engineer with a background on embedded systems and R&D. Since 2021 engaged with the WEB3 environment, has experimented on Ethereum/Solidity, Solana and worked professionally with Helium in 2022. Now is focused on building the metaverse that will empower people collaboration on the Dotsama ecosystem, using Substrate as the main framework. -*Raghuvar Vijayakumar* is a Rust Software Engineer with experience in building Custom Substrate Pallets and optimizing runtime storage. In addition to this Raghuvar has experience in developing smart contracts using solidity. - *Tim Jansen* is a Polkadot Ambassador and has been working on crypto and blockchain for over 7 years. He has developed smart contracts on Ethereum, implemented decentralized storage solutions such as swarm and IPFS, consulted on blockchain at [ISO](https://www.iso.org/member/2027.html), audited smart contract code of [TNO](https://www.tno.nl/en/about-tno/), launched several live applications using blockchain for auditing, supply chain and SSI at Visma and has a deep understanding of cryptography including zero knowledge proofs. In his free time he researches and experiments with new crypto technologies. @@ -192,7 +189,6 @@ Organisation: Team: - https://www.linkedin.com/in/deniscavalli/ -- https://www.linkedin.com/in/raghuvarvijayakumar/ - https://www.linkedin.com/in/timjanssen89/ - https://www.linkedin.com/in/antst/ - https://www.linkedin.com/in/dhoogendoorn/ @@ -216,8 +212,8 @@ Other channels are [YouTube](https://www.youtube.com/Intobitcoin) and [our found ### Overview -- **Estimated duration:** 6 Weeks -- **FTE:** 2,5 +- **Estimated duration:** 15 Weeks +- **FTE:** 1,5 - **Costs:** 30,000 USD _Note: Please follow the disussion [github](https://github.com/w3f/Grants-Program/pull/1221) for details on the costs._ @@ -225,8 +221,8 @@ _Note: Please follow the disussion [github](https://github.com/w3f/Grants-Progra ### Milestone 1 Stake Pallet -- **Estimated duration:** 6 Weeks -- **FTE:** 2,5 +- **Estimated duration:** 15 Weeks +- **FTE:** 1,5 - **Costs:** 30,000 USD This milestone delivers at least one (but maybe more) pallets to enable staking in Momentum's User Profile, World, Space and Subspace NFTs (or possibly any asset) in order to incentivize the creators/ owners and reward the stakers. From 0a972ba78c8b0946afa63d34c472896e31f91598 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 15 Jun 2023 21:05:36 +0200 Subject: [PATCH 474/578] Update index.md Solidity Verifier for Accountable Light Clients M1 --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 51876745e7b..f766679cf68 100644 --- a/applications/index.md +++ b/applications/index.md @@ -123,7 +123,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [TogetherCrew](http://www.togethercrew.com/) | [Community Health Check](community-health-check.md) | [GitHub](https://github.com/RnDAO) | ☐ | ☐ | ☐ | | [Decentration](https://www.decentration.org/) | [Supersig Phase 2](./supersig_fellowship.md) | [GitHub](https://github.com/decentration) | ☐ | ☒ | ☐ | | [Polkadrys Labs](https://github.com/rtomas) | [Open Payroll](./openPayroll.md) | [GitHub](https://github.com/rtomas) | ☐ | ☐ | ☐ | -| [Itering](https://www.itering.io/) | [Solidity Verifier Implementation for Accountable Light Client](./solidity-verifier-for-accountable-light-client.md) | [GitHub](https://github.com/darwinia-network) | ☐ | ☐ | ☐ | +| [Itering](https://www.itering.io/) | [Solidity Verifier Implementation for Accountable Light Client](./solidity-verifier-for-accountable-light-client.md) | [GitHub](https://github.com/darwinia-network) | ☐ | ☒ | ☐ | [🔝](#menu) ## 2022 From 73b4a5eb7f76225eb74114c391e3ac55b5f16760 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 15 Jun 2023 21:08:54 +0200 Subject: [PATCH 475/578] Update index.md Fix top links --- applications/index.md | 43 ++++++++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/applications/index.md b/applications/index.md index f766679cf68..43095953d6d 100644 --- a/applications/index.md +++ b/applications/index.md @@ -124,7 +124,8 @@ Use this page for an overview of all public grants and their status. Use the sid | [Decentration](https://www.decentration.org/) | [Supersig Phase 2](./supersig_fellowship.md) | [GitHub](https://github.com/decentration) | ☐ | ☒ | ☐ | | [Polkadrys Labs](https://github.com/rtomas) | [Open Payroll](./openPayroll.md) | [GitHub](https://github.com/rtomas) | ☐ | ☐ | ☐ | | [Itering](https://www.itering.io/) | [Solidity Verifier Implementation for Accountable Light Client](./solidity-verifier-for-accountable-light-client.md) | [GitHub](https://github.com/darwinia-network) | ☐ | ☒ | ☐ | - [🔝](#menu) + +[🔝](#menu) ## 2022 @@ -171,7 +172,8 @@ Use this page for an overview of all public grants and their status. Use the sid | OCamlMyCaml | [PrivaDEX: Cross-Chain DEX Aggregator MVP](PrivaDEX_aggregator.md) | [GitHub](https://github.com/kapilsinha/privadex) | ☐ | ☒ | ☒ | | [Aband-Network](https://a.band/) | [Substrate Parachain PoS Template](substrate-parachain-PoS-template.md) | [GitHub](https://github.com/Aband-Network/substrate-parachain-PoS-template) | ☐ | ☒ | ☒ | | [MangoBOX labs](https://www.mangobox.xyz/) | [MangoSale Protocol](MangoSale_Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☒ | ☐ | - [🔝](#menu) + +[🔝](#menu) ### 🏄‍♀️ Wave 15 - Q3 2022 @@ -216,7 +218,8 @@ Use this page for an overview of all public grants and their status. Use the sid | ALPHA LABS | [Binary merkle tree](./binary_merkle_tree.md) | [GitHub](https://github.com/frisitano) | ☐ | ☒ | ☐ | | [Standard Protocol](https://standard.tech/) | [New Order - a full onchain orderbook dex with indexers](./Standard_Protocol.md) | [GitHub](https://github.com/standardweb3) | ☒ | ☐ | ☐ | | [hack-ink](https://github.com/hack-ink) | [Subalfred](./subalfred.md) | [GitHub](https://github.com/hack-ink/subalfred) | ☐ | ☒ | ☒ | - [🔝](#menu) + +[🔝](#menu) ### 🏄‍♀️ Wave 14 - Q2 2022 @@ -258,7 +261,8 @@ Use this page for an overview of all public grants and their status. Use the sid | [Codelight](https://massbit.io/) | [Massbit Route](./massbit_route.md) | [GitHub](https://github.com/massbitprotocol/massbitroute) | ☐ | ☒ | ☒ | | [Hypha Hashed Partners](https://hypha.earth/) | [Social Recovery Wallet](./social_recovery_wallet.md) | [GitHub](https://github.com/hypha-dao) | ☐ | ☒ | ☒ | | [MangoBOX labs](http://mangobox.xyz/) | [MangoBOX Protocol](./MangoBOX-Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☒ | ☒ | - [🔝](#menu) + +[🔝](#menu) ### 🏄‍♀️ Wave 13 - Q1 2022 @@ -296,7 +300,8 @@ Use this page for an overview of all public grants and their status. Use the sid | [SaaS3 Lab](https://www.saas3.io) | [SaaS3](./SaaS3.md) | [GitHub](https://github.com/SaaS3Lab) | ☐ | ☒ | ☐ | | [NUTS Finance](https://nuts.finance) | [DOT-pegged derivative built on top of the stable asset protocol](./tdot.md) | [GitHub](https://github.com/nutsfinance/) | ☒ | ☒ | ☐ | | [Strategy Object](https://strategyobject.com/) | [Substrate Client for Java](./substrate_client_java.md) | [GitHub](https://github.com/strategyobject/substrate-client-java) | ☐ | ☒ | ☐ | - [🔝](#menu) + +[🔝](#menu) ## 2021 @@ -325,7 +330,8 @@ Use this page for an overview of all public grants and their status. Use the sid | [UNIVERSALDOT FOUNDATION](https://universaldot.foundation) | [A freelancing decentralized application](./universaldot.me.md) | [GitHub](https://github.com/UniversalDot) | ☐ | ☒ | ☒ | | [AdMeta](https://admeta.network/) | [A privacy-preserving Ad Platform](./AdMeta.md) | [GitHub](https://github.com/AdMetaNetwork/admeta) | ☐ | ☒ | ☒ | | Crypto Pay Lab (CPL)) | [Dotpay a github paid task platform using DOT](./DotPay.md) | [GitHub](https://github.com/bytepayment) | ☐ | ☒ | ☐ | - [🔝](#menu) + +[🔝](#menu) ### 🏄‍♀️ Wave 11 - Q3 2021 @@ -357,7 +363,8 @@ Use this page for an overview of all public grants and their status. Use the sid | [UNI-ARTS](https://app.uniarts.network/) | [Ruby Substate Client](./rb_substrate_client.md) | [GitHub](https://github.com/uni-arts-chain/sr25519) | ☐ | ☒ | ☐ | | [Skye Kiwi](https://skye.kiwi/) | [SkyeKiwi Protocol](./skyekiwi-protocol.md) | [GitHub](https://github.com/skyekiwi) | ☐ | ☒ | ☒ | | [Evercity](https://evercity.io/) | Sustainable Finance Protocol | [GitHub](https://github.com/EvercityEcosystem) | ☐ | ☒ | ☒ | - [🔝](#menu) + +[🔝](#menu) ### 🏄‍♀️ Wave 10 - Q2 2021 @@ -392,7 +399,8 @@ Use this page for an overview of all public grants and their status. Use the sid | [Stake Technologies](https://stake.co.jp/) | [ZK Plonk Pallet](./zk-plonk.md) | [GitHub](https://github.com/PlasmNetwork) | ☐ | ☒ | ☒ | | [CryptoLab](https://www.cryptolab.network) | [Staking Reward Collector](./cryptolab-staking-reward-collector-front-end.md) | [GitHub](https://github.com/cryptolab-network) | ☐ | ☒ | ☒ | | [Yatima Inc](https://github.com/yatima-inc/yatima) | [Lambda-VM and programming language for Substrate](./yatima.md) | [GitHub](https://github.com/yatima-inc/yatima) | ☐ | ☒ | ☒ | - [🔝](#menu) + +[🔝](#menu) ### 🏄‍♀️ Wave 9 - Q1 2021 @@ -446,7 +454,8 @@ Use this page for an overview of all public grants and their status. Use the sid | [Bit.Country](http://bit.country/) | [A decentralized world - Phase 2](./bit_country_m2.md) | [GitHub](https://github.com/bit-country) | ☐ | ☒ | ☒ | | [Vera](https://veraprotocol.org/) | [NFT Lending + Exchange](./vera_defi.md) | [GitHub](https://github.com/veraprotocol) | ☐ | ☒ | ☒ | | [Parallel Finance](https://parallel.fi/#/) | [Decentralized lending/borrowing and staking protocol](./Parallel.md) | [GitHub](https://github.com/parallel-finance/parallel) | ☐ | ☒ | ☒ | - [🔝](#menu) + +[🔝](#menu) ## 2020 @@ -497,7 +506,8 @@ Use this page for an overview of all public grants and their status. Use the sid | [Evanesco](https://evanesco.org/) | [Private network protocol](./evanesco_networks.md) | [GitHub](https://github.com/Evanesco-Labs) | ☐ | ☒ | ☒ | | [HugoByte](https://hugobyte.com/) | [Project Aurras: Event Manager](./project_aurras_mvp_phase_1.md) | [GitHub](https://github.com/HugoByte) | ☐ | ☒ | ☒ | | [Bounce Protocol](https://bounce.finance/) | [Decentralized Auction Protocol](./bounce-protocol.md) | [GitHub](https://github.com/bouncefinance/bounce-network) | ☐ | ☐ | ☐ | - [🔝](#menu) + +[🔝](#menu) ### 🏄‍♀️ Wave 7 - Q3 2020 @@ -534,7 +544,8 @@ Use this page for an overview of all public grants and their status. Use the sid | [Adoriasoft](https://adoriasoft.com/) | Cosmos-SDK Parachain Development Kit Phase 2 | [GitHub](https://github.com/adoriasoft/cosmos-sdk) | ☐ | ☒ | ☒ | | [sup](https://github.com/clearloop/sup) | [Command line tool for generating or upgrading a Substrate node](./sup.md) | [GitHub](https://github.com/clearloop/sup) | ☐ | ☒ | ☒ | | [Shard Labs](https://shardlabs.io) | [Tip or Donate KSM Embeddable Button](./KSM-embeddable-tip-or-donate-button.md) | [GitHub](https://github.com/Shard-Labs) | ☐ | ☒ | ☒ | - [🔝](#menu) + +[🔝](#menu) ### 🏄‍♀️ Wave 6 - Q2 2020 @@ -573,7 +584,8 @@ Use this page for an overview of all public grants and their status. Use the sid | [FlexDapps](https://flexdapps.com/) | Gantree Phase 4 | [GitHub](https://github.com/flex-dapps) | ☐ | ☐ | ☐ | | [Zondax](http://zondax.ch/) | Ledgeracio: A command-line tool and Ledger app designed for staking operations | [GitHub](https://github.com/paritytech/ledgeracio) | ☐ | ☒ | ☒ | | [Dipole Tech](https://www.dipole.tech) | [Dipole Oracle: Distributed energy resource management](./DipoleOracle.md) | [GitHub](https://github.com/DipoleTech/dipole-oracle) | ☐ | ☒ | ☒ | - [🔝](#menu) + +[🔝](#menu) ### 🏄‍♀️ Wave 5 - Q1 2020 @@ -616,7 +628,8 @@ Use this page for an overview of all public grants and their status. Use the sid | [SelfKey](https://selfkey.org/) | SelfKey DIDs & Claims as Ink! Smart Contracts | [GitHub](https://github.com/SelfKeyFoundation) | ☐ | ☐ | ☐ | | [Lyken](https://lyken.rs/) | [Rust trait system revamp](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/rust_trait_system_revamp.md) | [GitHub](https://github.com/LykenSol) | ☐ | ☒ | ☐ | | [Chorus One](https://chorus.one/) | Grandpa light client in Tendermint | [GitHub](https://github.com/ChorusOne) | ☐ | ☒ | ☒ | - [🔝](#menu) + +[🔝](#menu) ## 2019 @@ -650,6 +663,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Stacktical](https://stacktical.com/) | [Performance Management Runtime Modules](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/predictive_performance_management_runtime_module.md) | [GitHub](https://github.com/Stacktical) | ☐ | ☒ | ☐ | | [Sean Young](https://www.mess.org/) | Solidity to WASM compiler | [GitHub](https://github.com/hyperledger-labs/solang) | ☐ | ☒ | ☒ | | [Chain Security](https://chainsecurity.com/) | Tool for validating correctness of Polkadot runtimes | [GitHub](https://github.com/ChainSecurity/polpatrol) | ☐ | ☒ | ☒ | + [🔝](#menu) ### 🏄‍♀️ Wave 3 - Q3 2019 @@ -670,6 +684,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [DappForce](http://dappforce.io) | [SubSocial - Substrate module and web UI for decentralized communities](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Subsocial.md) | [GitHub](https://github.com/dappforce/dappforce-subsocial) | ☐ | ☒ | ☒ | | [Phala.Network](https://phala.network/) | [pLibra, Privacy Bridge between Polkadot and Libra chain](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/pLIBRA.md) | [GitHub](https://github.com/Phala-Network/) | ☐ | ☒ | ☐ | | [Wiv](http://wiv.io/) | Supply chain modules and front-end UI | [GitHub](https://github.com/wivtech) | ☒ | ☐ | ☐ | + [🔝](#menu) ### 🏄‍♀️ Wave 2 - Q2 2019 @@ -688,6 +703,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [HOPR](https://hopr.network/) | [Substrate integration with this P2P messaging protocol](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/messaging.md) | [GitHub](https://github.com/validitylabs/HOPR-PL-Substrate) | ☐ | ☒ | ☒ | | [Mailchain](https://mailchain.xyz/) | a Multi-Blockchain Messaging Application | [GitHub](https://github.com/mailchain) | ☐ | ☒ | ☒ | | [Usetech](http://usetech.com/blockchain.html) | [Polkadot C++ API](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/cpp_api.md) | [GitHub](https://github.com/usetech-llc/polkadot_api_cpp) | ☐ | ☒ | ☒ | + [🔝](#menu) ### 🏄‍♀️ Wave 1 - Q1 2019 @@ -705,3 +721,4 @@ Use this page for an overview of all public grants and their status. Use the sid | [Protos](http://protosmanagement.com/) | Open Source Node Explorer | [GitHub](https://github.com/protos-research/polkadot-node-explorer) | ☒ | ☒ | ☐ | | [Supercomputing Systems](https://www.scs.ch/) | [Substrate Transaction Privacy using Intel SGX](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/substrate_sgx_proposal.md) | [GitHub](https://github.com/scs/substraTEE) | ☐ | ☒ | ☒ | +[🔝](#menu) From c09707cf7e048ea1100265d97eb461ff90777501 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 15 Jun 2023 21:10:26 +0200 Subject: [PATCH 476/578] Update index.md Fix top links: Fix harder --- applications/index.md | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/applications/index.md b/applications/index.md index 43095953d6d..c48cde5e3ac 100644 --- a/applications/index.md +++ b/applications/index.md @@ -72,7 +72,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Ideal Labs](https://www.idealabs.network/) | [Cryptex](cryptex.md)| [GitHub](https://github.com/ideal-lab5) | ☐ | ☐ | ☐ | | [Xcavate](https://xcavate.io/) | [Real estate centric lending and asset minting protocol](Xcavate.md)| [GitHub](https://github.com/xcavateblockchain) | ☐ | ☐ | ☐ | -[🔝](#menu) +[🔝](#2023) ### 🏄‍♀️ Wave 17 - Q1 2023 @@ -125,7 +125,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Polkadrys Labs](https://github.com/rtomas) | [Open Payroll](./openPayroll.md) | [GitHub](https://github.com/rtomas) | ☐ | ☐ | ☐ | | [Itering](https://www.itering.io/) | [Solidity Verifier Implementation for Accountable Light Client](./solidity-verifier-for-accountable-light-client.md) | [GitHub](https://github.com/darwinia-network) | ☐ | ☒ | ☐ | -[🔝](#menu) +[🔝](#2023) ## 2022 @@ -173,7 +173,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Aband-Network](https://a.band/) | [Substrate Parachain PoS Template](substrate-parachain-PoS-template.md) | [GitHub](https://github.com/Aband-Network/substrate-parachain-PoS-template) | ☐ | ☒ | ☒ | | [MangoBOX labs](https://www.mangobox.xyz/) | [MangoSale Protocol](MangoSale_Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☒ | ☐ | -[🔝](#menu) +[🔝](#2023) ### 🏄‍♀️ Wave 15 - Q3 2022 @@ -219,7 +219,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Standard Protocol](https://standard.tech/) | [New Order - a full onchain orderbook dex with indexers](./Standard_Protocol.md) | [GitHub](https://github.com/standardweb3) | ☒ | ☐ | ☐ | | [hack-ink](https://github.com/hack-ink) | [Subalfred](./subalfred.md) | [GitHub](https://github.com/hack-ink/subalfred) | ☐ | ☒ | ☒ | -[🔝](#menu) +[🔝](#2023) ### 🏄‍♀️ Wave 14 - Q2 2022 @@ -262,7 +262,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Hypha Hashed Partners](https://hypha.earth/) | [Social Recovery Wallet](./social_recovery_wallet.md) | [GitHub](https://github.com/hypha-dao) | ☐ | ☒ | ☒ | | [MangoBOX labs](http://mangobox.xyz/) | [MangoBOX Protocol](./MangoBOX-Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☒ | ☒ | -[🔝](#menu) +[🔝](#2023) ### 🏄‍♀️ Wave 13 - Q1 2022 @@ -301,7 +301,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [NUTS Finance](https://nuts.finance) | [DOT-pegged derivative built on top of the stable asset protocol](./tdot.md) | [GitHub](https://github.com/nutsfinance/) | ☒ | ☒ | ☐ | | [Strategy Object](https://strategyobject.com/) | [Substrate Client for Java](./substrate_client_java.md) | [GitHub](https://github.com/strategyobject/substrate-client-java) | ☐ | ☒ | ☐ | -[🔝](#menu) +[🔝](#2023) ## 2021 @@ -331,7 +331,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [AdMeta](https://admeta.network/) | [A privacy-preserving Ad Platform](./AdMeta.md) | [GitHub](https://github.com/AdMetaNetwork/admeta) | ☐ | ☒ | ☒ | | Crypto Pay Lab (CPL)) | [Dotpay a github paid task platform using DOT](./DotPay.md) | [GitHub](https://github.com/bytepayment) | ☐ | ☒ | ☐ | -[🔝](#menu) +[🔝](#2023) ### 🏄‍♀️ Wave 11 - Q3 2021 @@ -364,7 +364,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Skye Kiwi](https://skye.kiwi/) | [SkyeKiwi Protocol](./skyekiwi-protocol.md) | [GitHub](https://github.com/skyekiwi) | ☐ | ☒ | ☒ | | [Evercity](https://evercity.io/) | Sustainable Finance Protocol | [GitHub](https://github.com/EvercityEcosystem) | ☐ | ☒ | ☒ | -[🔝](#menu) +[🔝](#2023) ### 🏄‍♀️ Wave 10 - Q2 2021 @@ -400,7 +400,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [CryptoLab](https://www.cryptolab.network) | [Staking Reward Collector](./cryptolab-staking-reward-collector-front-end.md) | [GitHub](https://github.com/cryptolab-network) | ☐ | ☒ | ☒ | | [Yatima Inc](https://github.com/yatima-inc/yatima) | [Lambda-VM and programming language for Substrate](./yatima.md) | [GitHub](https://github.com/yatima-inc/yatima) | ☐ | ☒ | ☒ | -[🔝](#menu) +[🔝](#2023) ### 🏄‍♀️ Wave 9 - Q1 2021 @@ -455,7 +455,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Vera](https://veraprotocol.org/) | [NFT Lending + Exchange](./vera_defi.md) | [GitHub](https://github.com/veraprotocol) | ☐ | ☒ | ☒ | | [Parallel Finance](https://parallel.fi/#/) | [Decentralized lending/borrowing and staking protocol](./Parallel.md) | [GitHub](https://github.com/parallel-finance/parallel) | ☐ | ☒ | ☒ | -[🔝](#menu) +[🔝](#2023) ## 2020 @@ -507,7 +507,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [HugoByte](https://hugobyte.com/) | [Project Aurras: Event Manager](./project_aurras_mvp_phase_1.md) | [GitHub](https://github.com/HugoByte) | ☐ | ☒ | ☒ | | [Bounce Protocol](https://bounce.finance/) | [Decentralized Auction Protocol](./bounce-protocol.md) | [GitHub](https://github.com/bouncefinance/bounce-network) | ☐ | ☐ | ☐ | -[🔝](#menu) +[🔝](#2023) ### 🏄‍♀️ Wave 7 - Q3 2020 @@ -545,7 +545,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [sup](https://github.com/clearloop/sup) | [Command line tool for generating or upgrading a Substrate node](./sup.md) | [GitHub](https://github.com/clearloop/sup) | ☐ | ☒ | ☒ | | [Shard Labs](https://shardlabs.io) | [Tip or Donate KSM Embeddable Button](./KSM-embeddable-tip-or-donate-button.md) | [GitHub](https://github.com/Shard-Labs) | ☐ | ☒ | ☒ | -[🔝](#menu) +[🔝](#2023) ### 🏄‍♀️ Wave 6 - Q2 2020 @@ -585,7 +585,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Zondax](http://zondax.ch/) | Ledgeracio: A command-line tool and Ledger app designed for staking operations | [GitHub](https://github.com/paritytech/ledgeracio) | ☐ | ☒ | ☒ | | [Dipole Tech](https://www.dipole.tech) | [Dipole Oracle: Distributed energy resource management](./DipoleOracle.md) | [GitHub](https://github.com/DipoleTech/dipole-oracle) | ☐ | ☒ | ☒ | -[🔝](#menu) +[🔝](#2023) ### 🏄‍♀️ Wave 5 - Q1 2020 @@ -629,7 +629,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Lyken](https://lyken.rs/) | [Rust trait system revamp](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/rust_trait_system_revamp.md) | [GitHub](https://github.com/LykenSol) | ☐ | ☒ | ☐ | | [Chorus One](https://chorus.one/) | Grandpa light client in Tendermint | [GitHub](https://github.com/ChorusOne) | ☐ | ☒ | ☒ | -[🔝](#menu) +[🔝](#2023) ## 2019 @@ -664,7 +664,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Sean Young](https://www.mess.org/) | Solidity to WASM compiler | [GitHub](https://github.com/hyperledger-labs/solang) | ☐ | ☒ | ☒ | | [Chain Security](https://chainsecurity.com/) | Tool for validating correctness of Polkadot runtimes | [GitHub](https://github.com/ChainSecurity/polpatrol) | ☐ | ☒ | ☒ | -[🔝](#menu) +[🔝](#2023) ### 🏄‍♀️ Wave 3 - Q3 2019 @@ -685,7 +685,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Phala.Network](https://phala.network/) | [pLibra, Privacy Bridge between Polkadot and Libra chain](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/pLIBRA.md) | [GitHub](https://github.com/Phala-Network/) | ☐ | ☒ | ☐ | | [Wiv](http://wiv.io/) | Supply chain modules and front-end UI | [GitHub](https://github.com/wivtech) | ☒ | ☐ | ☐ | -[🔝](#menu) +[🔝](#2023) ### 🏄‍♀️ Wave 2 - Q2 2019 @@ -704,7 +704,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Mailchain](https://mailchain.xyz/) | a Multi-Blockchain Messaging Application | [GitHub](https://github.com/mailchain) | ☐ | ☒ | ☒ | | [Usetech](http://usetech.com/blockchain.html) | [Polkadot C++ API](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/cpp_api.md) | [GitHub](https://github.com/usetech-llc/polkadot_api_cpp) | ☐ | ☒ | ☒ | -[🔝](#menu) +[🔝](#2023) ### 🏄‍♀️ Wave 1 - Q1 2019 @@ -721,4 +721,4 @@ Use this page for an overview of all public grants and their status. Use the sid | [Protos](http://protosmanagement.com/) | Open Source Node Explorer | [GitHub](https://github.com/protos-research/polkadot-node-explorer) | ☒ | ☒ | ☐ | | [Supercomputing Systems](https://www.scs.ch/) | [Substrate Transaction Privacy using Intel SGX](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/substrate_sgx_proposal.md) | [GitHub](https://github.com/scs/substraTEE) | ☐ | ☒ | ☒ | -[🔝](#menu) +[🔝](#2023) From b9be6224749804c81f5148fe481772a595407c98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 15 Jun 2023 21:27:07 +0200 Subject: [PATCH 477/578] Update index.md Substrate Tutorials complete --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index c48cde5e3ac..def97b6b1b4 100644 --- a/applications/index.md +++ b/applications/index.md @@ -240,7 +240,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Kami Ekbatanifard](https://github.com/Nick-1979/) | [Polkadot js plus / Nomination pools](./Plus-follow-up.md) | [GitHub](https://github.com/Nick-1979/polkadot-Js-Plus-extension/wiki) | ☐ | ☒ | ☒ | | [Afloat Inc](https://stayafloat.io/#/) | [Tax Infrastructure Polkadot Integration](./Afloat.md) | [GitHub](https://github.com/hashed-io) | ☐ | ☒ | ☒ | | [gmajor](https://github.com/gmajor-encrypt) | [SCALE Codec Comparator](./scale-codec-comparator.md) | [GitHub](https://github.com/gmajor-encrypt) | ☐ | ☒ | ☒ | -| [Rusty Crewmates](http://rustycrewmates.com/) | [Substrate Tutorials](./substrate-tutorials.md) | [GitHub](https://github.com/rusty-crewmates/substrate-tutorials) | ☐ | ☒ | ☐ | +| [Rusty Crewmates](http://rustycrewmates.com/) | [Substrate Tutorials](./substrate-tutorials.md) | [GitHub](https://github.com/rusty-crewmates/substrate-tutorials) | ☐ | ☒ | ☒ | | [Sequester](https://github.com/SequesterChain) | [A Common-Good Carbon Sink on Polkadot](./sequester.md) | [GitHub](https://github.com/SequesterChain/pallets) | ☐ | ☒ | ☒ | | [Keysafe Network](https://github.com/keysafe-protocol) | [A decentralized protocol for private key custody and crypto asset management](./keysafe_network.md) | [GitHub](https://github.com/keysafe-protocol) | ☒ | ☒ | ☐ | | [Fennel Labs](https://fennellabs.com/) | [Whiteflag on Fennel Protocol](./Fennel_Protocol.md) | [GitHub](https://github.com/fennelLabs) | ☐ | ☒ | ☒ | From 090cc409e7c174a551c401badc66a0a7caa57b65 Mon Sep 17 00:00:00 2001 From: KowalewskiPawel <53332984+KowalewskiPawel@users.noreply.github.com> Date: Fri, 16 Jun 2023 17:46:34 +0200 Subject: [PATCH 478/578] Syncra - No Code DAO Maker and ZK Powered Private Voting Solution (#1762) * add Syncra application * add payment address * update payment * add images * add onchain automation part * update numeration * update milestones * Add Project Details * some minor fixed * Update applications/Syncra.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * add more governance info * update DB model info --------- Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> --- applications/Syncra.md | 289 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 289 insertions(+) create mode 100644 applications/Syncra.md diff --git a/applications/Syncra.md b/applications/Syncra.md new file mode 100644 index 00000000000..20f2ea99ba2 --- /dev/null +++ b/applications/Syncra.md @@ -0,0 +1,289 @@ +# Syncra x Web3 Foundation + +- **Team Name:** Syncra +- **Payment Address:** 15Geo1RfLLM1PmPsD4uggts1Ht5LrWUChBDruLPqt5EgFKPB (PolkaDOT - USDT) +- **Level:** 2 + +## Project Overview + +### Intro + +Building DAOs requires a lot of heavy, complex work and commitment to create a solution, even when using templates such as OpenZeppelin. As a protocols owner, the cost of development, voting mechanisms, and legal structure can be significant. On substrate such templates like ones in OpenZeppelin aren’t even available yet for DAO development. This means even more time required for research and development in this technology. + +### Project Details + +Syncra simplifies this process. We're working on a no-code solution to create, manage, and build your decentralized organization. Our goal is to provide a seamless process where protocol owners can launch the DAO within 5 minutes or even less. + +![](https://i.imgur.com/Pe1Z26r.png) + +Transparency is inherent in blockchain technology, but many situations require privacy, especially in DAOs when it comes to tough decisions. Also in times when connecting particular wallet address to a person or entity can by relatively easy, or even required (KYC, ID verification, Identity providers). With Syncra, we want to provide a solution for confidential voting where votes are hidden by default, but everything happens on-chain. Leveraging a modular approach, we want to enhance privacy, provide an easy way for treasury management, and offer on-chain automation, ultimately providing this service for the entire Substrate ecosystem. + +Having Syncra in the PolkaDOT ecosystem is a necessary piece of the puzzle. Just as Tally, Aragon, and Snapshot exist on EVM, Syncra exists on Substrate. + +### Product overview + +We've already prepared and begun implementing some of our product designs. Our team is hard at work on product development, constantly refining and streamlining flows through research and product fit. + +Our goal is to make everything as simple as possible, while maintaining modularity and providing an excellent user experience. + +![](https://i.imgur.com/GXzugeC.png) +### Key Functionalities + +- DAO management, +- On and off-chain voting, +- Treasury management, +- Prepared and custom strategies, +- Undisclosed voting, +- Modular approach, +- Software Development Kit. + +## Architecture and overview of common interfaces + +Syncra implements modular-dao concept. + +### What is it? + +Modular-dao is a set of traits with default implementations built using [ink!](https://github.com/paritytech/ink) and [OpenBrush](https://github.com/727-Ventures/openbrush-contracts) that can be used to create customized DAOs. Be aware that this is just a concept, none of the contracts have been properly tested and/or audited, and all the work is still experimental. + +### How does it work? + +The traits with default implementations consists of: + +- **Votes** - trait that provides 3 basic methods that allow to get voting power for of an address and delegate votes. The default implementation is done with combination of PSP22 token. However, **Votes** can represent any type of the "strategy" (for example PSP34-based). +- **Governor** - extends **Votes** and **AccessControl**. The base for the DAO. Provides proposal creation and execution functionalities. +- **Timelock** - extends **Governor**. Allows scheduling operations, for example to allow some time between voting end-time and proposal execution. +- **ShieldedVoting** - extends **Governor**. Allows to represent the "votes" by PSP22 token that can be shielded using Shielder contract. + +![](https://i.imgur.com/aRwOgbR.png) + +In the future, we plan to develop multi-chain treasury module to increase functionality and customisability. + +### How does voting work? + +For not shielded voting process, users can simply call `cast_vote(proposal_id)` method on the **Governor** contract. The vote power is calculated by `get_votes(account)`. + +For shielded voting, users have to first "register" for voting to mint the PSP22 tokens representing their votes. Then, the tokens representing the votes can be simply transferred to an address representing one of the voting options or the transaction can be "shielded" using the Shielder contract. + +### How does on-chain automation work? + +Smart Contracts, Blockchain, and DAOs are very often promoted as Autonomous solutions. However, there is still a need for a manual trigger from user, to execute a given action onchain. + +At Syncra, we aim to deliver a complete automation with automatic Smart Contracts call execution. For this purposes we have started working a tool called Polkadot Smart Contracts Caller, which source code can be found here: https://github.com/KowalewskiPawel/Substrate-Polkadot-Smart-Contracts-Caller + +With Polkadot Smart Contracts Caller, we can easily create a relayer service, for delegating Smart Contracts calls. In this scope, we are planning to add scheduler, and frontend implementation, so that tasks such as execution of the proposal can be scheduled, and called automatically after the end of voting period. + +Moreover, we are also planning to integrate this tool in the Private Voting feature, so that "withdraw" function can be called from a neutral account, without revealing any sensitive info about the original caller. + +Known drawbacks are the security concerns, related with storing private keys on the cloud. We are currently conducting the Security research, on a possible solution to this problem. Therefore, for the scope of the grant, we treat this feature rather more like a Proof of Concept, than final product or even MVP. + +### Data Model + +Syncra uses IPFS as well as MongoDB for storing additional data about DAOs, proposals, and user stats. The purpose is to minimise the data footprint on the blockchain itself, as storing data onchain is costly, and not very performant. Only the critical data is stored inside of the the DAO Smart Contract’s. + +DAOs, Proposals titles, and descriptions are stored on the IPFS, and then corresponding IPFS hashes are set on the DAO contract's storage. In this way, users can be sure that the data about the given DAO or Proposal won’t be modified, nor fade-away if the server ever goes down. The same applies to storing images, as we use web3 storage for image upload. + +To sum up, on the Syncra MongoDB side, general info about user/platform stats are stored, such as number of DAOs created, DAOs that the given user is involved in, etc. In this way, everyone can use our SDK or even connect directly with the DAO previously deployed via Syncra platform, and build own frontend dedicated to the given DAO, without losing the critical data, and need to connect with Syncra's database. + +## Project Details + +In the scope of this grant, several core parts will be implemented, as the extension of the pre-grant MVP product, built under AlephZero grant. + +### MVP (Pre-Grant) + +The MVP of the Syncra Platform, that we are going to start with, will consist the following parts: + +1. Frontend Application with the connection to Wallet, Smart Contracts, and Backend +2. Set of Smart Contracts based on PSP22 voting strategy +3. Backend for storing off-chain data, such as DAO and proposal's additional info stored on IPFS. It's done for the purpose of minimizing storage footprint on-chain +4. Complete workflow of DAO creation, that allows users to create DAO, manage it, as well as create proposal and vote directly from the web application +5. Proof of Concept for Private voting, using AlephZero's Liminal Shielder - This one will require to start up a local custom AlephZero node, with ZK Verifier pallet implemented, as currently this functionally is not available on any AlephZero live chain + +### Scope of W3F Grant + +Based on the MVP described above, our team will deliver several extensions that will make our solution more universal, accessible, and possibly transferable to other Polkadot based chains, that implement Contract pallet. + +* **OpenZeppelins’ like Governance Standards** + Ideally, we plan to split the possible functionalities of a DAO into separate Rust traits, so that one can "bootstrap" the desired modules/functionalities and easily customize them. Moreover, our goal is to keep the project open for extension so in the future new modues/features could be added without the need to change existing standard. We will refactor the Smart Contracts code for creating DAOs and voting strategies, improve them, make more universal, and customizable so that they can be easily implemented. Additionally, we will prepare a documentation of each part, so that custom DAO contracts can be easily build from the ready puzzles. OpenZeppelins standards are the inspiration for this part, as there isn't any similar standard on Polkadot ecosystem yet. +* **On-chain Automation System Template** + Smart contracts, even though considered autonomous, require a manual trigger from the user to execute certain functions. In ecosystems such as DAO, automatic execution of the proposals is something that is still missing. For this part we will create a template tool, that will work as off-chain worker for scheduling Smart Contracts calls. It will work as a simple application, with the Scheduler, and some relayer accounts, that contain tokens for covering gas costs. Scheduling certain actions, like for example mentioned above - executing proposal once they reach the deadline, will be possible by simply setting the call on the Smart Contract. The off-chain relayer, will read the state from the given smart contract, and then schedule the Smart Contract call. + +* **SDK** + Our platform Syncra, is just one of the examples of how our infrastructure can be used, that is why we will create a set of ready solutions, so that a new platform (ex. frontend, mobile app, etc.) can be build, upon the pillars created by Syncra. In this part, a bundle for NPM and Yarn will be created, wrapping all core functionalities of Syncra. Developer will be able to simply install the SDK library in their project, setup the endpoints, and API KEYs for accessing our backend services, and then simply call given functions inside of their custom application. + +* **SDK Documentation** + + Dedicated documentation for the SDK will be created, so that the whole tool can be implemented with ease. We will also provide instructions for obtaining the necessary configuration keys, and other variables necessary to connect with our services. + +#### Technology stack + +Each of the core elements will be developed with certain set of technologies, and programming languages. + +1. **Smart Contracts as Governance Standards** + Written in Rust with the use of [ink!](https://github.com/paritytech/ink) framework and [OpenBrush](https://github.com/727-Ventures/openbrush-contracts) library for PSP22 standard of tokens, as well as additional helper functions, such as modifier for checking the roles. The documentation will be developed using [Docusaurus](https://docusaurus.io/) framework, that leverages JavaScript and TypeScript. +2. **On-chain Automation System Template** + Main technology stack here will be TypeScript, and Node.js Express for creating a server that can be deployed and hosted on most of the available hosting services. The reason behind this is the ease of implementation, and the availability of various libraries and technologies that can be added on top of it. This service won't receive many calls, rather act as a relayer that reads data on-chain, and then submits data/send calls to Smart Contracts on-chain, without further need for external calls. As a core tool for creating calls to Smart Contracts, we will leverage [Polkadot.js Contracts API](https://polkadot.js.org/docs/api-contract). +3. **SDK** + JavaScript and TypeScript will be fundamental programming languages of this part, while [NPM](npmjs.com) registry will be used for publishing the package itself. The SDK will be basically a wrapper of the certain functions that call Smart Contracts, and Backend. It will require the developer to add configuration, such as API Key to access our backend, Smart Contract Factory address, as well as the ABI files, that will serve as an instruction for calling each Smart Contract. We are not going to hardcode those in the SDK, as in the future, the platform may be deployed on different chains in the Polkadot ecosystem. Moreover, the Smart Contracts can be upgraded, or created with different set of rules and methods. +4. **SDK Documentation** + The entire documentation for implementing SDK in the given project, will be built using [Docusaurus](https://docusaurus.io/) that leverages JavaScript and TypeScript. + +#### Hosting and Infrastructure + +All of the code will be open-source, and available under our organizational repositories address + +[Syncra Repositories](https://github.com/orgs/SyncraDAO/repositories) + +Frontend application from the MVP part will be available under the address below + +[syncra.xyz](https://syncra.xyz/) + +Example demo of on-chain automation service is going to be hosted most probably on the [Railway](https://railway.app/) service, and it will connect with one of the instances of Data Base, hosted on the [Atlas MongoDB](https://www.mongodb.com/atlas/database) service. The files stored on IPFS will leverage [Web3 Storage](https://web3.storage/) services. + +SDK bundle on the other hand, will be published on the [official npmjs registry](npmjs.com) + +Documentation will published on the [GH Pages](https://pages.github.com/) + +#### Risks + +There are several known risk that we are aware of, and will try our best to find solutions to prevent those scenarios from happening. Nevertheless, it is worth noticing those potential fields, which could have been improved for better safety. + +* Storing Account Private Keys for Off-Chain Automation Relayer - since for sending transactions to the Smart Contracts, we need an actual on-chain Address, the seeds for that account, has to be stored somewhere on the Cloud. In this way, no human interaction is needed to create a signature. In our solution, we have no other option then just store those keys on one of the Cloud services. In such scenarios, there is always a risk of a data breach, that could compromise the access to the account, with the access to the funds stored for covering gas fees on it. + +* Smart Contracts Security Hole - we expect our Smart Contracts to be initially audited by [Kudelski Security](https://kudelskisecurity.com/) as a part of AlephZero grant. However, there is still a risk that something will not be caught during the audit, and we will also extend those Smart Contracts during this Project as for the purpose of creating OpenZeppelins like standards. During the development, some additional security issues may occur. + +* Off-Chain Automation Relayer Operational Failure - Automation relayer work as a centralized service for executing the calls, if for some reason, it will stop operating, the scheduled action may not be executed. For that reason, we are considering deploying several instances of this relayer, on multiple services, with multiple accounts. In this way we should minimize the risk of the scheduled action, not being executed due to the relayer's operational failure. + +## Ecosystem Fit + +Given the importance of scalable, and customisable DAO infrastructure, which many protocols needs, we want to introduce Syncra. As a easy to use, modular, reliable, and customisable platform we believe, that is crucial element of the ecosystem. Leveraging undisclosed voting, treasury management, on-chain automation, and many others we might bring a real value. + +Our project aim to be the ecosystem standard for DAOs on Polkadot, Kusama, Aleph Zero and any Subsrate based ecosystem. + +## Team + +### Team members + +- **Name of team leader:** Przemysław Paczoski +- **Names of team members:** Paweł Kowalewski, Krzysztof Kuczma, Jan Kuczma + +### Contact + +- **Contact Name:** Przemysław Paczoski +- **Contact Email:** przemek@syncra.xyz +- **Website: https://syncra.xyz** + +### Legal Structure + +- **Registered Address:** TBD +- **Registered Legal Entity:** TBD + +### Team's experience + +**Przemysław Paczoski** + +*Lead, front-end, and quality engineer with more than 6 years of experience in the field. Working on numerous projects with companies like XTB, Docplanner, Dfns, and others. He participated in a few NFT initiatives in addition to his professional activities, where he received practical expertise in creating projects from the ground up. He actively participate in hackathons and won awards in various categories.* + +**Krzysztof Kuczma** + +*Software engineer with over than 5 years of experience. Knowledgeable in front-end, and backend technologies, alongside Azure and GCP ecosystems. Working on projects for large financial institutions. Since 2020, exploring web3 projects, participating in hackathons in which winning awards. Passionate about knowledge sharing, in which he is running the YouTube channel about programming.* + +**Paweł Kowalewski** + +*Software Engineer, with experience in several blockchain technologies including projects based on Lightning Network. Prior to his software engineering career, he was an Academician and an Automotive Technician. The co-host of the YouTube channel “Devs in Chains”, focused on topics related to web3, web development, and Blockchain. He has attended numerous hackathons and won awards in various categories.* + +**Jan Kuczma** + +*An Alumni of the University of Sussex with Bachelor’s at Computer Sciences with focus on AI and Computer Architectures. In the academic course, he participated in several hacking events and I developed various software projects including developing a 3D game in Unity and designing and implementing Machine Learning models in Python. His final year he become interested in Blockchain technologies and started learning smart contracts development. He quickly become proficient in this matter.* + +### Team Code Repos + +Syncra Organization: https://github.com/SyncraDAO + +Smart Contracts: https://github.com/SyncraDAO/modular-dao + +Backend: https://github.com/SyncraDAO/Liberum-Backend + +All developments within the Web3 Foundation Grants Program will be open-sourced from day one on GitHub. +### Team GitHub Profiles + +- Przemysław Paczoski: https://github.com/Kodziak +- Krzysztof Kuczma: https://github.com/KrzysiekKuczma +- Paweł Kowalewski: https://github.com/KowalewskiPawel +- Jan Kuczma: https://github.com/jsk28 +### Team LinkedIn Profiles + +- Przemysław Paczoski: https://www.linkedin.com/in/ppaczoski/ +- Krzysztof Kuczma: https://www.linkedin.com/in/krzysztof-kuczma/ +- Paweł Kowalewski: https://www.linkedin.com/in/kowalewskipawel/ +- Jan Kuczma: [https://www](https://www.linkedin.com/in/kowalewskipawel/)[.linkedin.com/in/jkuczma](http://www.linkedin.com/in/jkuczma) + +## Development Status + +The project is currently in early-stage development. We achieved a proof-of-concept solution during the HackOnChain hackathon in Berlin, and then decided to rebuild it from scratch, aiming for a minimum viable product soon. + +Part of the MVP is almost finished. We aim to deploy the solution on the Aleph Zero testnet within a couple of weeks. The landing page, designs, and part of the application are almost complete. + +We are currently focusing on legalising the entity, marketing, pitch decks, whitepapers, and many other things. + +## Development Roadmap + +### Overview + +- **Total Estimated Duration:** 12 weeks +- **Full-Time Equivalent (FTE):** 2 FTE +- **Total Costs:** Requested amount in USD for the whole project 30,000 USD. + +### Milestone 1 + +- **Estimated duration:** 6 weeks +- **FTE:** 2 +- **Costs:** 15,000 USD + +| Number | Deliverable | Specification | +| --- | --- | --- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | A clear overview of the software's architecture and components, as well as its main functions and capabilities. Technical details, including programming language, technologies, frameworks, libraries, and services. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Article | We will publish an article that introduces to the solution with all the guidelines included. | +| 1. | DAO Smart Contracts (OpenZeppelins’ like) Governance Standards | Set of traits with default implementation for basic DAO feature such as voting power mechanisms based on psp22 and psp34, proposal creation and execution, quorum, proposal creation threshold and role-based proposal creation and execution. Both Smart Contracts written in ink! with OpenBrush will be provided, as well as the documentation explaining each part, with the tutorial of creating a new custom Governance Smart Contract. | +| 2. | On-chain Automation Tool | Source code as a Template with the Scheduler, and Smart Contracts caller will be provided. Moreover, as an example at least one instance of such a relayer will be deployed, and prepared for testing. | + +### Milestone 2 + +- **Estimated duration:** 6 weeks +- **FTE:** 2 +- **Costs:** 15,000 USD + +| Number | Deliverable | Specification | +| --- | --- | --- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | A clear overview of the software's architecture and components, as well as its main functions and capabilities. Technical details, including programming language, technologies, frameworks, libraries, and services. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Article | We will publish an article that introduces to the solution with all the guidelines included. | +| 1. | SDK | NPM package with ready wrapped functions, for creating custom GUI for the DAO platform based on Syncra will be provided. The package will be also published on the NPM registry. It will cover the workflow of connecting with our services, and creating the whole workflow, from creating the DAO, to adding proposals, and voting on them. | +| 2. | SDK Documentation | Clear overview, instructions, and explanation of each SDK's part will be documented in the documentation that will be available publicly for everyone. | + +## Future Plans + +After completing the grant, our goal is to establish a seamless process for creating and managing DAOs, with a great user experience. Additionally, we aim to enable protocols to integrate our solution into their systems using an SDK. + +Our next steps include: + +- Providing para-chain support, with the goal of allowing protocols across all Substrate-based blockchains to use Syncra's solution. +- Improving the security of the solutions provided in the scope of this grant + +## Additional Information + +### **How did you hear about the Grants Program?** + +Web3 Foundation Website, and Personal Recommendation. + +### Work you have already done + +- Platform MVP +- Designs +- Started to build brand recognition on Twitter and Discord community + +### Previous grants you may have applied for + +- Aleph Zero Grants program \ No newline at end of file From 8646af8a68a119581406b6a2d4cec70c04b36977 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 16 Jun 2023 17:48:59 +0200 Subject: [PATCH 479/578] Update index.md Syncra --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index def97b6b1b4..1023b5492da 100644 --- a/applications/index.md +++ b/applications/index.md @@ -71,6 +71,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [FiDi Tech](https://fidi.tech/) | [FiDi DotSight: Analytics Data Platform for DotSama](fidi-dotsight-analytics.md)| [GitHub](https://github.com/fidi-tech) | ☐ | ☐ | ☐ | | [Ideal Labs](https://www.idealabs.network/) | [Cryptex](cryptex.md)| [GitHub](https://github.com/ideal-lab5) | ☐ | ☐ | ☐ | | [Xcavate](https://xcavate.io/) | [Real estate centric lending and asset minting protocol](Xcavate.md)| [GitHub](https://github.com/xcavateblockchain) | ☐ | ☐ | ☐ | +| [Syncra](https://syncra.xyz) | [No Code DAO Maker and ZK Powered Private Voting Solution](Syncra.md)| [GitHub](https://github.com/SyncraDAO) | ☐ | ☐ | ☐ | [🔝](#2023) From 336378e9e75fdceaa0e7b777272affd0d8d3f95a Mon Sep 17 00:00:00 2001 From: Ikko Eltociear Ashimine Date: Mon, 19 Jun 2023 16:18:27 +0900 Subject: [PATCH 480/578] Fix typo in xbi-format-psp-t3rn.md (#1807) mulitple -> multiple --- applications/xbi-format-psp-t3rn.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/applications/xbi-format-psp-t3rn.md b/applications/xbi-format-psp-t3rn.md index cfa6f614d40..1d7678558d3 100644 --- a/applications/xbi-format-psp-t3rn.md +++ b/applications/xbi-format-psp-t3rn.md @@ -173,7 +173,7 @@ XBI payload lifecycle can be directed by developers using metadata. XBI Executor ### Ecosystem Fit -t3rn is a cross-chain smart contracts registry that enable smart contracts execution on mulitple blockchians. The XCM-based Interface will come in a form of a FRAME pallet and will be used by t3rn and any other Substrate-based project that wishes to use it. +t3rn is a cross-chain smart contracts registry that enable smart contracts execution on multiple blockchians. The XCM-based Interface will come in a form of a FRAME pallet and will be used by t3rn and any other Substrate-based project that wishes to use it. The XBI Format and XBI Executors for cross-chain smart contracts will be tested live in a XCM Environment, such as the Rococo network with other selected Substrate builders. @@ -232,7 +232,7 @@ Please also provide the GitHub accounts of all team members. If they contain no This is the research-focused grant proposal on XBI which is assumed to be followed up with the grant focused solely on its implementation. -XBI will help contribute to the t3rn vision of a fully connected cross-chain ecosystem, rooted in Polkadot. For the context, t3rn is building a cross-chain smart contract hosting platform that enable smart contracts execution on mulitple blockchians. +XBI will help contribute to the t3rn vision of a fully connected cross-chain ecosystem, rooted in Polkadot. For the context, t3rn is building a cross-chain smart contract hosting platform that enable smart contracts execution on multiple blockchians. ## Additional Information :heavy_plus_sign: From 1132e2f4bde58555a27d4ec84c0174d8235c229f Mon Sep 17 00:00:00 2001 From: Alexander Tishin Date: Mon, 19 Jun 2023 13:09:30 +0400 Subject: [PATCH 481/578] Add Validator_Monitoring_Service proposal (#1791) --- applications/Validator_Monitoring_Service.md | 190 +++++++++++++++++++ 1 file changed, 190 insertions(+) create mode 100644 applications/Validator_Monitoring_Service.md diff --git a/applications/Validator_Monitoring_Service.md b/applications/Validator_Monitoring_Service.md new file mode 100644 index 00000000000..a2ccdb01c73 --- /dev/null +++ b/applications/Validator_Monitoring_Service.md @@ -0,0 +1,190 @@ +# Validator Monitoring Service + +- **Team Name:** [P2P.ORG](http://p2p.org/) Validator +- **Payment Address:** 0xE22211Ba98213c866CC5DC8d7D9493b1e7EFD25A (USDC) +- **Level:** 2 + +## Project Overview :page_facing_up: + +Our application seeks to fund the development of a monitoring platform for validator operators. + +### Overview and Ecosystem Fit + +Validator Monitoring Service is a monitoring platform designed to track the performance of validators in the Polkadot and Kusama networks. + +In the existing ecosystem of the Polkadot network, there is a lack of comprehensive historical information available about how validators perform as ParaValidators and their participation in consensus. Public scanners like Subscan offer limited insights into validator performance, with scarce information such as earned points and rewards displayed only after an era's end. This limitation prevents the use of existing scanners as real-time monitoring tools. + +However, active participation in consensus is crucial for upholding network security. Each consensus round relies on obtaining 2/3 precommits, and validators failing to reach this threshold cannot contribute to blockchain security. If numerous validators encounter participation issues, it can reduce block production speed, adversely affecting the overall network. + +**We truly believe that every validator operator should understand their role and significance in ensuring blockchain security.** + +Furthermore, the information provided by public scanners predominantly focuses on individual addresses and specific events. At the same time, it allows for retrieving on-chain data such as reward payments and rewards points for a particular account. Scanners generally lack the capability to compare these rewards with those of other validators. This limitation hinders a comprehensive understanding of a chosen validator's performance relative to others in the network. + +**Our monitoring service effectively addresses this challenge by providing real-time data on validator performance and enabling performance comparisons with other validators.** + +Moreover, besides public scanners, there are several existing solutions available for validator monitoring, such as [P.A.N.I.C.](https://github.com/SimplyVC/panic_polkadot), [Polkalert](https://github.com/galacticcouncil/polkalert), [B-Harvest](https://github.com/nodebreaker0-0/substrate/tree/prometheus_v0.3), [nmonpolkadot](https://github.com/stakezone/nmonpolkadot), [Polkadot-K8s-Monitor](https://github.com/ironoa/polkadot-k8s-monitor), [Polkadot-Watcher](https://github.com/w3f/polkadot-watcher), [ex-1KV Telegram Bot](https://github.com/helikon-labs/polkadot-kusama-1kv-telegram-bot), as well as, grant-supported dashboards [Cyclops](https://github.com/w3f/Grants-Program/blob/master/applications/cyclops.md). Our solution stands out due to several significant differences: + +1. **Out-of-the-box Solution:** Unlike many existing applications that require hosting arrangements, our platform offers a hassle-free experience. Users can effortlessly try our product and assess its suitability for their needs by simply interacting with our Telegram bot and setting up a live dashboard. This accessibility enhances the popularity and adoption of our solution. +2. **Comprehensive Data:** While most solutions provide standard on-chain data such as reward points, reward amounts, and on-chain events like offences or payouts, our platform goes beyond that. We offer unique data, including information on participation in the consensus, the selection of a para-validator, and para-validator points per session (not just per era). This granular data provides users with a more comprehensive understanding of validator performance. +3. **Ongoing Support:** Many existing applications are developed by small teams and may need more ongoing support, with some repositories needing to be updated. In contrast, we are one of the largest validators in the network, and we commit to supporting and maintaining our validator monitoring platform. Additionally, we utilize the same system for our internal purposes, ensuring its reliability and continuous improvement. + +### Potential users + +Our monitoring system caters to various parties within the community who can derive significant benefits from its usage: + +1. **Validator Operators:** Our service is a valuable tool for validator operators, particularly small teams and independent validators who may lack the time and resources to develop their monitoring systems. For instance, meeting the strict requirements of programs like the 1KV program can be challenging for small and independent validators. With our monitoring system, they gain the ability to track an extensive range of metrics. By leveraging our service, validator operators can thrive within the decentralized ecosystem and enhance performance. +2. **Nominators:** Nominators play a crucial role in the network by selecting validators to nominate. Our service provides nominators with detailed performance comparisons among different validators. They can evaluate critical metrics such as consensus participation, and block production efficiency relative to other validators. Our service empowers nominators to make informed decisions when choosing validators to nominate, optimizing their returns, and actively contributing to the network's health. +3. **Foundation:** By having access to comprehensive information on validator participation in consensus, block production efficiency, and other crucial metrics, the Foundation can identify and address any security vulnerabilities or potential risks promptly. This proactive approach helps to maintain a robust and secure network for all participants. Moreover, the Foundation can offer greater transparency to the community regarding validator performance + +Lastly, our team possesses extensive experience in maintaining validators within the Polkadot and Kusama networks, and we have developed the necessary monitoring and maintenance tools. **We firmly believe that this knowledge should be shared for the benefit of the entire network rather than being kept private.** Therefore, we seek a grant to further develop our monitoring system and contribute to the network's advancement. + +### Project Details + +We have developed a comprehensive monitoring platform as a service. This platform provides validator operators with an effortless monitoring solution, saving them valuable time and effort. With our service, operators can focus on other critical aspects of validator operations, knowing that their monitoring needs are taken care of. + +**Our system could be depicted in the following picture:** + +![](https://github.com/avtishin/maas/blob/main/pic_7.png) + +Our current solution already offers a Grafana instance, which serves as a powerful dashboard. This dashboard displays real-time metrics of validators, enabling users to access and analyze the data easily. To simplify the setup process, we have integrated our platform with a user-friendly Telegram bot, @p2pvalidator_monitoring_bot. Through this bot, users can quickly configure their personal dashboards by selecting the validators they wish to monitor. + +The live dashboard provides users with a comprehensive overview of all essential metrics related to their validators. These metrics are updated automatically every 20-40 seconds, ensuring real-time visibility into the performance of validators. This rapid update frequency enables users to respond to any changes or issues that may arise promptly. + +Furthermore, we understand the importance of historical data in analyzing validator behavior and identifying potential issues. Therefore, our platform collects and stores data on all active validators for up to one month. This means that users have access to historical performance data, allowing them to conduct in-depth analyses of their validators over time. Such insights are invaluable for optimizing performance and addressing any emerging concerns. + +In conclusion, our monitoring platform provides validator operators with a hassle-free solution, streamlining the monitoring process and offering real-time and historical data to support informed decision-making and efficient operations. + +### System workflow + +A user initiates a conversation with a Telegram bot and selects from options such as creating a new dashboard or connecting to support. When the user inputs the validator addresses they wish to monitor on the dashboard, our system verifies the authenticity of these addresses, confirming that they belong to validators. Then, the system generates the dashboard and sends the user their access credentials. Subsequently, the system resets the client's session to prevent potential 'double' events. This involves preserving the user's current position in the workflow, for instance, preventing the triggering of a dashboard deletion before its creation. + +![](https://github.com/avtishin/maas/blob/main/pic_9.png) + +Upon receiving a user's request to deploy a dashboard, their specified validator addresses are recorded in a key-value file (values.yaml) associated with their Telegram ID and subsequently committed to Git. ArgoCD, set to check the repository every 5 minutes, will recognize if there isn't a Grafana instance associated with the particular Telegram ID and proceed to deploy a new instance. As ArgoCD prepares the dashboard, GitHub Actions concurrently monitors the availability of this new instance. Once the instance is fully operational, GitHub Actions triggers a notification to the client, providing them with their login credentials. + +![](https://github.com/avtishin/maas/blob/main/pic_11.png) + +Our data collection process is anchored on utilizing exporters from the Blockchain. These exporters operate incessantly, amassing raw data directly from the Blockchain. Each exporter functions as an HTTP web endpoint for the scrapper, supplying plain text with specific metric values. Subsequently, this data is channeled into the Victoria Metrics cluster using VM insert, which timestamps each value. Ultimately, designated data is selected by a specific dashboard (Grafana instance) using VM select. + +![](https://github.com/avtishin/maas/blob/main/pic_8.png) + +In our current implementation, we provide insights on the following key metrics: + +- General indicators: we track session/era progression and staking data. + + ![](https://github.com/avtishin/maas/blob/main/pic_6.png) + +- Validator data per epoch: we provide information on rewards points, active validators, and their position in the active set. + + ![](https://github.com/avtishin/maas/blob/main/pic_5.png) + +- Era and epoch points for ParaValidators: we monitor ParaValidator points earned and their relation to the network's average, median, and 95th percentile. + + ![](https://github.com/avtishin/maas/blob/main/pic_4.png) + + ![](https://github.com/avtishin/maas/blob/main/pic_3.png) + +- Finality metrics (GRANDPA): we track blocks' prevotes and precommits, and their ratio to ideally processed blocks. + + ![](https://github.com/avtishin/maas/blob/main/pic_2.png) + + ![](https://github.com/avtishin/maas/blob/main/pic_1.png) + + +## Team :busts_in_silhouette: + +### Team members + +- Aleksandr Tishin, product manager, https://github.com/avtishin +- Anton Zhbanov, tech team lead, https://github.com/base1217 +- Sergey Radchenko, SRE Engineer and Developer, https://github.com/SergeyRadchenkoP2P +- Boris Simonov, SRE Engineer and Developer, https://github.com/xxbbxb + +### Team Code Repos + +Project repo: + +- https://github.com/p2p-org/polkadot_monitoring_service + +### Team's experience + +The P2P development team, part of the reputable validator and non-custodial staking platform P2P, is the main driving force behind our monitoring solution. P2P is well-known for its expertise in validating Substrate-based networks such as Polkadot, Kusama, Moonbeam, and Moonriver, as well as other networks like Solana (Lido in Solana) and Cosmos (Neutron). + +As a team, we have already successfully completed a grant for the development of [Multiblockchain ETL](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Multiblockchain%20ETL.md), an indexer specifically designed for substrate-based networks. This indexer allows for the efficient indexing of events, extrinsics, blocks, and staking data from the on-chain environment. We actively maintain and update the Multiblockchain ETL indexer, ensuring its reliability and functionality. The code for this project is publicly available on [GitHub](https://github.com/p2p-org/polkadot-profit-transformer). + +Given P2P's established expertise and solid reputation in the industry, we are well-equipped to carry out further development of our monitoring tool. Our focus remains on delivering a monitoring solution that brings significant benefits to the community, promoting transparency and empowering validator operators and stakeholders. + +### Contact + +- **Contact Name:** Aleksandr Tishin +- **Contact Email:** [aleksandr.tishin@p2p.org](mailto:aleksandr.tishin@p2p.org) +- **Website:** [p2p.org](http://p2p.org/) + +### Legal Structure + +- **Registered Address:** P.O. box 2775, 67 Fort Street, Grand Cayman, KY1-1111, Cayman Islands +- **Registered Legal Entity:** P2P Staking, a Cayman Islands Company, registration number 381601 + +## Development Status :open_book: + +Current service already offers a convenient and user-friendly experience through a Telegram bot named @p2pvalidator_monitoring_bot. This bot serves as the gateway to our comprehensive validator monitoring capabilities, covering various aspects of validator performance. + +At the core of our product, we have developed an exporter that takes raw data and translates it into a format compatible with Victoria Metrics, our chosen data storage solution. The data is securely stored for one month, during which it is transformed into meaningful metrics. These metrics are then transmitted to Grafana dashboards, providing users with a visually appealing and informative monitoring interface. + +Through the Telegram bot, users have access to a range of features. On the user's side, they can deploy a personal dashboard, allowing them to monitor their validators efficiently. They also have the ability to destroy their personal dashboard when needed. Additionally, the bot provides support options, enabling users to seek assistance and receive prompt replies. + +On the admin side, there are several options available for managing the system. These include the ability to deploy/destroy Grafana instances, and ban/unban specific users. Admins can also engage in support-related tasks, such as replying to support inquiries and closing support conversations as necessary. + +By utilizing our Telegram bot, users can easily interact with our monitoring tool, deploy personalized dashboards, access support, and enjoy a seamless monitoring experience. Meanwhile, admins have the necessary tools to manage the system and provide timely assistance to users efficiently. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 2 months +- **Full-Time Equivalent (FTE):** 1.5 FTE +- **Total Costs:** $29,000 + +### Milestone 1 — Events and Dashboard UX + +- **Estimated duration:** 1 month +- **FTE:** 1.5 +- **Costs:** 14,000 USD + +| Number | Deliverable | Specification | +| --- | --- | --- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide a documentation page about how to self-host events exporter, grafana setup dashboard instance. | +| 0c. | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to run events exporter locally, set up Grafana instance, and auto-removing tool. | +| 1. | Events exporter | We will create an events exporter (all on-chain events) to show events in the dashboard related to the selected validator addresses. This feature will track all on-chain events and present related events in the user's dashboard for their selected validator addresses. | +| 2. | Improve UX Dashboard | We plan to streamline Grafana's interface by removing surplus controls, enhancing the quality of our charts, and implementing Kiosk mode. We aim to bolster security through provisioning measures, such as enforcing password changes for users. | +| 3. | Create a landing page | We will create a landing page to ease user onboarding to the service. | +| 4. | Auto-remove instances | We will develop a system that identifies and removes inactive Grafana instances. | + +### Milestone 2 — Expand the functionality + +- **Estimated Duration:** 1 month +- **FTE:** 1.5 +- **Costs:** 15,000 USD + +| Number | Deliverable | Specification | +| --- | --- | --- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide a tutorial page that explains how a user can set up monitoring for selected validators. We show how our functionality works and give reasoning and explanations for all metrics that are shown to the user. | +| 0c. | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to self-host the telegram bot and check the functionality. | +| 0e. | Article | We will publish an article that explains the user flow of our system and promotes using monitoring for validators operators. | +| 1. | Telegram bot adding alerting based on events | We will introduce a feature that allows users to subscribe to specific events. This means users can opt to receive Telegram notifications when their chosen validators receive rewards, are elected into the active set, and more. | +| 2. | Telegram bot UI + support chat upgrades | We aim to rebuild user inference of a bot to add more interaction opportunities with the service. As well as we will improve communication with support. Instead of the current one-message ticket system, we will implement a more interactive conversation mode allowing for multiple messages dialog. | +| 3. | Cover monitoring for parachains | We will add the support of the most popular parachains such as Moonbeam, Moonriver, Acala, Karura, Astar, Shiden | + +## **Referral Program (optional) 💰** + +Not applicable + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** + +Web3 Foundation Website and previous grants: [Multiblockchain ETL](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Multiblockchain%20ETL.md) From 005777bbceadf16c01861fbce9c6b392dd60abe5 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 19 Jun 2023 11:12:58 +0200 Subject: [PATCH 482/578] Update index.md Add Validator Monitoring Service --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 1023b5492da..da8a3485930 100644 --- a/applications/index.md +++ b/applications/index.md @@ -72,6 +72,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Ideal Labs](https://www.idealabs.network/) | [Cryptex](cryptex.md)| [GitHub](https://github.com/ideal-lab5) | ☐ | ☐ | ☐ | | [Xcavate](https://xcavate.io/) | [Real estate centric lending and asset minting protocol](Xcavate.md)| [GitHub](https://github.com/xcavateblockchain) | ☐ | ☐ | ☐ | | [Syncra](https://syncra.xyz) | [No Code DAO Maker and ZK Powered Private Voting Solution](Syncra.md)| [GitHub](https://github.com/SyncraDAO) | ☐ | ☐ | ☐ | +| [P2P.ORG](http://p2p.org/) | [Validator Monitoring Service](Validator_Monitoring_Service.md)| [GitHub](https://github.com/p2p-org/polkadot_monitoring_service) | ☐ | ☐ | ☐ | [🔝](#2023) From fb3f98005778d2098b27da30e9b2db033fdaf083 Mon Sep 17 00:00:00 2001 From: Sourabh Niyogi Date: Mon, 19 Jun 2023 04:53:35 -0700 Subject: [PATCH 483/578] Deep Account Analytics in Three Tiers for the Polkadot Data Alliance (#1768) --- ...epAccountAnalytics-PolkadotDataAlliance.md | 307 ++++++++++++++++++ 1 file changed, 307 insertions(+) create mode 100644 applications/DeepAccountAnalytics-PolkadotDataAlliance.md diff --git a/applications/DeepAccountAnalytics-PolkadotDataAlliance.md b/applications/DeepAccountAnalytics-PolkadotDataAlliance.md new file mode 100644 index 00000000000..9fe64a06d89 --- /dev/null +++ b/applications/DeepAccountAnalytics-PolkadotDataAlliance.md @@ -0,0 +1,307 @@ +# Web3 Foundation Deep Account Analytics in Three Tiers for the Polkadot Data Alliance + +- **Team Name:** Colorful Notion, Inc. +- **Payment Address** `0xEaf3223589Ed19bcd171875AC1D0F99D31A5969c` +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Abstract :page_facing_up: + +This proposal addresses outstanding [deep account analytics problems for the Web3 Foundation](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/data_analysis_tools.md). +We propse 3-tier solution: + + - Tier 1. _raw indexing_: Google BigQuery Public Datasets + - Tier 2. _deep indexing_: shared datasets delivered with Google Analytics Hub + - Tier 3. _dashboards_: the above indexed data in Apache Superset + +This proposal seeks to develop the above solution with the support of a Web3 Foundation grant, but critically addresses +future maintainance a [Polkadot Data Alliance Bounty](https://docs.google.com/document/d/1fA5ARHy-frzgZC66rniKZ5o7CSbDvCTkS--kWaMzuMs/edit#) +that can support work on all 3 tiers with _child bounties_ for Polkadot Data Alliance contributors. + +## Project Overview :page_facing_up: + +This proposal is in response to the RFP [Data Analysis Tools for Substrate-based Blockchains](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/data_analysis_tools.md) +which seeks to answer deep account analytics questions of: + +**Account References**: +* Which transactions/accounts were responsible for the reserved balance in an account? +* What modules currently depend on consumers, providers, and sufficients reference counters for a certain account, and which transactions introduced/removed those references? +* What are the pallets responsible for reserves/holds and locks/freezes on an account? + +**Democracy**: +* Which accounts have delegated OpenGov votes to an account or to which accounts the account in question has delegated their votes to for each track? + +**Staking/Nomination Pools**: +* Who are all the nominators that nominated Validator X? (an inverse mapping basically of staking.nominators from validator -> nominators) +* Who are the top 10 nominators with the highest APR, and which validators do they have in common? + +We call these _deep analytics_ questions because to answer them requires significant "deep indexing" beyond "raw indexing", which cannot be done without intricate knowledge of Substrate. Currently, these questions are difficult to answer without going through many pages in a block explorer like Polkaholic.io, and nearly impossible without doing some amount of data engineering. The answers to the above questions _could_ be treated as new features to be developed in the context of block explorer like Polkaholic, or within special purpose UIs like polkassembly or staking.polkadot.network. + +We propose a different style of solution that we believe properly factorizes the following _three_ tiers: +* Tier 1. raw indexing - raw indexing of decoded blocks (blocks, extrinsics/calls, events, traces) +* Tier 2. deep indexing - post-processing of raw indexed data +* Tier 3. dashboards - situating the above with BI tools -- speci that does not require deep knowledge of the structure of the indexed data + +Typically, a block explorer or special purpose UI concerning chain +data blends all of these three tiers together -- and the maintainer of +the block explorer enjoys a community following (etherscan.io ). But +often when new deep analytics questions arise are not directly +available in an explorer, users with deep account analytics questions +are left struggling and need custom answers only provided by data +engineers and analytics engines -- covered by dashboard systems like +Dune Analytics. In Dune Analytics, Tier 2 is covered by Dune Wizards +and Tier 3 is covered with a customized front-end. + +The solution we develop here is _not_ to make a long list of feature +requests for either block explorers or special purpose UIs to answer +with new functionality. + +Instead, our solution to this problem is to separate the THREE TIERS within a _genuinely collaborative_ Polkadot Data Alliance: + +* Tier 1: raw indexing results in all blocks, extrinsics, events, traces delivered in Google Bigquery Public Datasets. In May 2023, Colorful Notion, under the curation of Parity Data, onboarded a complete index of 70+ chains of Polkadot+Kusama into Google Public Datasets. This is in the "crypto_polkadot" and "crypto_kusama" dataset, which anyone can access with this Analytics Hub link [here]() + +* Tier 2: deep indexing can then be done by doing some amount of data engineering with the above raw deata, resulting in tables, views or materialized views that can also be shared with new datasets, which can also be shared with Analytics Hub. + +* Tier 3: front-end engineering: given the above dataset, an open source BI tool (Apache Superset) can access _multiple_ datasets contributed by _multiple_ Polkadot Data Alliance members. Recently, Parity Data shared this dataset of _their_ index of Polkadot, which enables a simple comparison between Parity Data's index and Colorful Notions' index. + +We consider our approach a _genuinely collaborative_ approach, because anyone can contribute at any of the 3 tiers -- providing raw indexes, deep indexes, or dashboards. All dataset deliverables are public and the data processing itself is also reproducible in a "ETL" flow. This should be contrast to a _non-collaborative_ approach where dataset is kept locked away unshared with the community, closed source and thus irreproducible. + +However, because all three tiers involve a certain amount of storage, compute and data engineering/data analyst man power, it is critical to not _just_ build the above three tiered solution, +but recognize that it needs **maintainence**. The Web3 Foundation supports maintainence, but does not support the considerable cloud computing costs that Tier 1 and 2 require, nor the sort of solution that Tier 3 requires. We thus propose that the above three tier architecture be situated _in conjunction with_ a [Polkadot Data Alliance bounty](https://docs.google.com/document/d/1fA5ARHy-frzgZC66rniKZ5o7CSbDvCTkS--kWaMzuMs/edit#), not just for ourselves at Colorful Notion, but for everyone equally commited to genuine collaboration a Polkadot Data Alliance. + +It is believed that this collaborative framework can address many different problems other than deep analytics, and result in a more efficient allocation of Treasury funds and parachain resources: including an industry-wide multichain block explorer, ecosystem-wide XCM indexing, tracing tools, to name a few that our team has explored with some depth of seriousness. + +Much Tier 1 foundation has already been laid through our work and other indexers (Subquery, Subsquid, Subscan, web3go) in the ecosystem, who we hope will be able to contribute at Tier 1 [ideally within BigQuery so as to be directly usable as another source for Tier 2 and Tier 3]. + +But Tier 1 is not enough -- it is necessary to address Tier 2 and Tier 3 as well, and the Web3 Foundation RFP questions clearly illustrate the inadequacy of stopping with raw indexes and the need for deep indexing. We believe a strong collaborative mindset is required to fully address these questions and numerous others the Substrate ecosystem asks comprehensively. + +The goal of this proposal is to: +* address the Web3 Foundation's specific deep account analytics questions fully, specifically with three-tiered deliverables at Tier 1+2+3, using widely used tools of Google BigQuery and Apache Superset +* demonstrate a viable financial path for our own maintainence for the above solution within the Web3 Foundation grant structure and the structure of the Polkadot Treasury using the Polkadot Data Bounty system +* form an alternate kind of deliverable for Web3 Foundation other than code that everyone can use: _datasets_ and _dashboards_ that everyone can use + +### Project Details + +The "Account References" questions of +* Which transactions/accounts were responsible for the reserved balance in an account? +* What modules currently depend on consumers, providers, and sufficients reference counters for a certain account, and which transactions introduced/removed those references? +* What are the pallets responsible for reserves/holds and locks/freezes on an account? + +are largely answerable through traces. At the heart of every +blockchain is a state transition function, where the state transitions +for any block are commonly called "traces" in blockchain engineering. +Substrate makes every trace visible through a +[state_traceBlock](https://polkadot.js.org/docs/substrate/rpc/#traceblockblock-hash-targets-optiontext-storagekeys-optiontext-methods-optiontext-traceblockresponse) +RPC function, which outputs every storage key-value map change in a +re-execution of a single block. This RPC call is considered "unsafe" +as it requires compute time to regenerate. + +Polkaholic.io's indexer, when traces are available from an internal archive node, fetches traces and exposes them in the block explorer. +For example, here is the trace for [Polkadot Block 15723663](https://polkaholic.io/trace/polkadot/15723663/) + + + +The raw keys (e.g. `0x26aa394eea5630e0...f1dbd372bbe532b1f8702b2a7e`) and values (e.g. `0x01ab50050...000000000000`) are decoded using the chains type spec into + +``` +Key: [ "12xtAYsRUrmbniiWQqJtECiBQrMn8AypQcXhnQAc6RB6XkLW" ] +Value: { + "nonce": 348331, + "consumers": 2, + "providers": 1, + "sufficients": 0, + "data": ⊖{ + "free": "0x000000000000000005785a9c9f9ad21b", + "reserved": 0, + "miscFrozen": "0x00000000000000000058d15e17628000", + "feeFrozen": "0x00000000000000000058d15e17628000" + } +} +``` + +and loaded into BigQuery as part of a publicly available [substrate-etl](https://console.cloud.google.com/bigquery/analytics-hub/exchanges/projects/974572213039/locations/us/dataExchanges/substrate_18804f88005), recently added to Google BigQuery's Public Datasets in May 2023. + + + +In Milestone 1, we will provide a 3 tier solution to deep account analytics on Account References. Here is how the 3 tiers: + +* Tier 1 requires *raw indexing* of traces. Traces are critical to Colorful Notion's [XCM Indexing](https://polkaholic.io/xcmtransfers?xcmType=xcmtransfer) and are important for parachain engineers to understand how the execution of a block, and are critical to the model producers, consumers and sufficients. As raw traces form a very large dataset, to keep storage costs low, the indexer filters out pallets section/method that and exposes them in `crypto_polkadot.traces0` ([see schema](https://github.com/colorfulnotion/polkaholic/blob/main/substrate/schema/substrateetl/traces.json)). In particular, given how central accounts and native and non-native tokens are to blockchain usage, the indexer further decodes accounts and asset state into many additional columns like free, reserved and frozen. + +* Tier 2 requires *deep indexing* of the above trace data, to analyze how certain attributes changed in [System:Account](https://docs.google.com/spreadsheets/d/1jywN--pONmJqmbuASWDLNdBvsB86OuizJnQ72ijAXSU/edit#gid=704412439) holding account reference counters, account balance reserved provenance (see: https://docs.substrate.io/reference/account-data-structures/). We have some preliminary work on this (see [this sheet](https://docs.google.com/spreadsheets/d/1gZZOvH4BYk2QYlhzz9AvRxiR6mcYtgRz9VZluz1lwuU/edit#gid=1313769699)) and proved that, yes, it is indeed possible to uniquely identify the extrinsic id (but not call id) for every trace, and that the changes can be identified to build a new dataset every day. + +* Tier 3 requires situating the above dataset into an Account Analysis Dashboard of [Apache Superset](https://analytics.polkaholic.io/dashboard/list/). Here we have a WASM Contract Explorer prototype: + + + +We envision Milestone 1 focussed on Account References and then extended in Milestone 2 to Democracy+Staking deep analysis. This will result in an Account Analysis Dashboard, with 3 or more account tabs exploring: + +* "Account References" concerning deep indexing developed in Milestone 1 + +* "Democracy" concerning deep indexing about [Democracy:VotingOf](https://docs.google.com/spreadsheets/d/1hdvW5Kw3gwBnXqFskALX1_szdTf4pYL-SlbOqJ8tlO0/edit#gid=1803912396) developed in Milestone 2 + +``` +{"direct":{"delegations":{"capital":0,"votes":0},"prior":[0,0],"votes":[[113,{"standard":{"vote":"0x81","balance":10000000000}}],[119,{"standard":{"vote":"0x82","balance":50000000000}}]]}} +``` + +OR + +``` +{"delegating":{"balance":15000000000,"conviction":"Locked4x","delegations":{"capital":0,"votes":0},"prior":[0,0],"target":"15ZvLonEseaWZNy8LDkXXj3Y8bmAjxCjwvpy4pXWSL4nGSBs"}} +``` + +* "Staking" concerning deep indexing about Staking and Nomination Pools, with the added complexity of stashing controller/accounts, developed in Milestone 2. + +It is straightforward to link these dashboards directly to polkaholic.io based the key (accountID/extrinsicID/...) and add filtering on any column present in the table with Apache Superset. + +Any UI can then link to this dashboard with the account ID, and the dashboard can link back to a block explorer. + +Once the dataset is made available, end users can build charts and dashboards with the same ease as they do in Excel or Google Sheets. + +The community dashboard can be used in the same way as Dune Analytics dashboards serves the EVM community. + + +### Ecosystem Fit + +While this proposal does not explicitly require collaboration on any of the 3 tiers, our intention is to: +1. set up a foundation where the Web3 Foundation could ask other teams to contribute datasets (Tier 2) and build dashboards (Tier 3) in the same way. +2. set up a repeatable model between Web3 Foundation and a Polkadot Data Alliance support data-oriented research (W3F) and ongoing maintenance ([Polkadot Data Bounty](https://docs.google.com/document/d/1fA5ARHy-frzgZC66rniKZ5o7CSbDvCTkS--kWaMzuMs/edit#)) with child bounties + +## Team :busts_in_silhouette: + +### Team members / Contact + +- **Contact Name:** Sourabh Niyogi / Michael Chung +- **Contact Email:** sourabh@colorfulnotion.com / michael@colorfulnotion.com +- **Website:** https://colorfulnotion.com + +### Legal Structure + +- **Registered Address:** 55 E 3rd Ave, San Mateo, CA 94401, USA +- **Registered Legal Entity:** Colorful Notion, Inc. + +### Team's experience + +* Key engineers Sourabh Niyogi and Michael Chung have developed Polkaholic.io since Fall 2021 and substrate-etl since December 2022. + +* Prior to building Polkaholic.io, Sourabh and Michael worked in decentralized social networking protocol development + privacy-preserving contact tracing (Wolk), +mobile advertising real-time bidding algorithm design and analytics (CrossChannel/MdotM). + +* Sourabh spent time doing computational cognitive science and machine vision research at MIT, including +in [Bayesian learning of verb meaning and causal laws](https://scholar.google.com/citations?user=HHmGYdEAAAAJ&hl=en]. + +* Michael hails from UC Berkeley with a degree in statistics and economics and leads deep indexing at Colorful Notion. + +### Team Code Repos + +- [substrate-etl](https://github.com/colorfulnotion/substrate-etl) +- [Polkaholic.io](https://github.com/colorfulnotion/polkaholic) +- [XCM Global Asset Registry](https://github.com/colorfulnotion/xcm-global-registry) +- [Sourabh Niyogi](https://github.com/sourabhniyogi) | [Michael Chung](https://github.com/mkchungs) + +## Development Status :open_book: + +* Summer 2022: Released Polkaholic.io, a fully working Substrate-first multichain block explorer. +* Fall 2022: Increased XCM Transfers Coverage, Improved UI + API based on feedback from users. Added EVM/WASM support. +* Winter/Spring 2023: Developed substrate-etl and XCM Global Asset Registry. +* May 2023: Google included Polkadot + Kusama in [Google Public Datasets](https://cloud.google.com/bigquery/public-data). + +## Development Roadmap :nut_and_bolt: + +This proposal aims to deliver on the three-tier architecture outlined in two milestones: + +* Milestone 1 will develop `System:Account` deep analytics. +* Milestone 2 will develop `Democracy`, `Staking` and `NominationPools` deep analytics. + +For each Milestone, there are 3 kinds of deliverables corresponding to the 3 tiers: +- 1. Raw indexes, in the form of BigQuery datasets which are delivered +- 2. Deep indexes, in the form of BigQuery dataset +- 3. Dashboard publication, in the form of Apache Superset Dashboard + +All raw and deep indexing code will be made open source within the polkaholic and substrate-etl repo. + +### Overview + +- **Total Estimated Duration:** 4 months +- **Full-Time Equivalent (FTE):** 300 FTE hours [100 USD/hr] +- **Total Costs:** 30,000 USD + +### Milestone 1 — Three Tier Deep Account Analytics on Account References + +- **Estimated duration:** 8 weeks (ending 8/31/23) +- **FTE:** 150 FTE hours [100 USD/hr] +- **Costs:** 15,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | GNUv3 - polkaholic + substrate-etl repo | +| 0b. | Documentation | Provide README on construction of 1+2+3 | +| 0c. | Manual Testing Guide | Manual testing guide with steps for using the application, with examples including expected inputs and outputs | +| 1. | Raw Indexing | substrate-etl:crypto_polkadot.traces0 for 7/1/23 - 8/31/23 | +| 2. | Deep Indexing | substrate-etl:substrate.accountreference0 and supporting datasets | +| 3. | Dashboard Publication | Superset dashboard tab: "Account Reference" | + +We will take this opportunity to deliver raw indexes on traces, deep indexes on account references and a dashboard on Account References hosted at https://analytics.polkaholic.io. + +Indexing + Dashboard Publication must be able to support deep analysis of **Account References**: +* Which transactions/accounts were responsible for the reserved balance in an account? +* What modules currently depend on consumers, providers, and sufficients reference counters for a certain account, and which transactions introduced/removed those references? +* What are the pallets responsible for reserves/holds and locks/freezes on an account? + + +### Milestone 2 — Three Tier Deep Account Analysis of Democracy+Staking+Nomination Pools + +- **Estimated duration:** 8 weeks (ending 10/31/23) +- **FTE:** 150 FTE hours [100 USD/hr] +- **Costs:** 15,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | GNUv3 - polkaholic + substrate-etl repo | +| 0b. | Documentation | Document substrate-etl README on 1+2+3 | +| 0c. | Manual Testing Guide | Manual testing guide with steps for using the application, with examples including expected inputs and outputs | +| 1. | Raw Indexing | BigQuery Index substrate-etl.crypto_polkadot.traces0 9/1/2023-10/31/23 -- stashing accounts | +| 2. | Deep Indexing | BigQuery substrate-etl:substrate.democracy_* substrate-etl:substrate.staking_* substrate-etl:substrate.nomination_pools_* | +| 3. | Dashboard Publication | Superset dashboard tabs: "Democracy", "Staking", "Nomination Pools" | + +We will take this opportunity to address the complexity of stashing accounts by: +* Deep Indexing. Using the above tables in the views referencing `storage_staking_*, storage_nominationpools_*` tables +* Dashboard Publication. Using the above, we can develop dashboards for Democracy+Staking+Nomination Pools + +Indexing + Dashboard Publication must be able to support deep analysis of Democracy and Staking/Nomination Pools pallets: +* Democracy: Which accounts have delegated OpenGov votes to an account or to which accounts the account in question has delegated their votes to for each track? +* Staking/Nomination Pools: Who are all the nominators that nominated Validator X? (an inverse mapping basically of staking.nominators from validator -> nominators) Who are the top 10 nominators with the highest APR, and which validators do they have in common? + +## Future Plans + +Broadly, this proposal sets up a path for the Web3 Foundation to have Polkadot Data Alliance contributors deliver results for the Web3 Foundation itself and the community in the following ways: + +1. within the three-tier architecture, Polkadot Data Alliance contibutors can collaborate with Web3 Foundation and others in the Substrate community using raw indexes, published deep indexes, or building and extending dashboards. Our technical choice for collaboration is BigQuery and Apache Superset but other choices may be equally viable or appropriate, by other teams. + +2. with the [Polkadot Data Alliance Bounty](https://docs.google.com/document/d/1fA5ARHy-frzgZC66rniKZ5o7CSbDvCTkS--kWaMzuMs/edit#) and the [Web3 Foundation Maintance Grants](https://github.com/w3f/Grants-Program#hammer_and_wrench-maintenance-grants), there is a clear path to support both software maintainence _and_ hosting / data indexing infrastructure + +In followup work, we would expect to address the 3 tiers: +* raw indexing: cover traces on a regular basis defined in child bounties +* deep indexing: support the dataset deliverables on a regular basis +* dashboards: maintain published dashboards developed, and host the Apache Superset + +We would welcome the challenge of doing followon high impact work, but hope that others in the Polkadot Data Alliance can follow this model as well. + +We propose a child bounty to host Apache Superset instance at https://analytics.polkadot.network or transfer this responsibility to a parent bounty curator. + +## Additional Information :heavy_plus_sign: + +We request suitable Web3 Foundation members be identified as parent +and child bounty curator candidates, and that the charter for the +Polkadot Data Alliance be developed in a collaboration with Parity. +The Polkadot Data Alliance charter is [here](https://docs.google.com/document/d/1fA5ARHy-frzgZC66rniKZ5o7CSbDvCTkS--kWaMzuMs/edit#). + +We do not believe our participation (or anyone else's participation) +in a Polkadot Data Alliance in providing deliverables at any of the +three tiers eliminates the possibility of doing further data +processing for other sources of additional revenue. Our goal is to be +self-sufficient and not dependent on W3F Grants or Treasury funding, +but we hope our value and commitment to sharing and collaboration is +recognized by the community so we can be productive high impact +contributors. + + + From 1af43b94cf9a50404b92fe268a7d20b0e1ec0b91 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 19 Jun 2023 14:04:14 +0200 Subject: [PATCH 484/578] Update index.md Add Colorful --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index da8a3485930..d9ff7193282 100644 --- a/applications/index.md +++ b/applications/index.md @@ -73,6 +73,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Xcavate](https://xcavate.io/) | [Real estate centric lending and asset minting protocol](Xcavate.md)| [GitHub](https://github.com/xcavateblockchain) | ☐ | ☐ | ☐ | | [Syncra](https://syncra.xyz) | [No Code DAO Maker and ZK Powered Private Voting Solution](Syncra.md)| [GitHub](https://github.com/SyncraDAO) | ☐ | ☐ | ☐ | | [P2P.ORG](http://p2p.org/) | [Validator Monitoring Service](Validator_Monitoring_Service.md)| [GitHub](https://github.com/p2p-org/polkadot_monitoring_service) | ☐ | ☐ | ☐ | +| [Colorful Notion](https://github.com/colorfulnotion) | [Deep Account Analytics in Three Tiers for the Polkadot Data Alliance](DeepAccountAnalytics-PolkadotDataAlliance.md)| [GitHub](https://github.com/colorfulnotion/) | ☐ | ☐ | ☐ | [🔝](#2023) From 062d98092093c404cd44819a35f432296951875b Mon Sep 17 00:00:00 2001 From: Noc2 Date: Mon, 19 Jun 2023 14:17:50 +0200 Subject: [PATCH 485/578] fix website --- applications/DeepAccountAnalytics-PolkadotDataAlliance.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/applications/DeepAccountAnalytics-PolkadotDataAlliance.md b/applications/DeepAccountAnalytics-PolkadotDataAlliance.md index 9fe64a06d89..1b139b05c17 100644 --- a/applications/DeepAccountAnalytics-PolkadotDataAlliance.md +++ b/applications/DeepAccountAnalytics-PolkadotDataAlliance.md @@ -57,7 +57,7 @@ with new functionality. Instead, our solution to this problem is to separate the THREE TIERS within a _genuinely collaborative_ Polkadot Data Alliance: -* Tier 1: raw indexing results in all blocks, extrinsics, events, traces delivered in Google Bigquery Public Datasets. In May 2023, Colorful Notion, under the curation of Parity Data, onboarded a complete index of 70+ chains of Polkadot+Kusama into Google Public Datasets. This is in the "crypto_polkadot" and "crypto_kusama" dataset, which anyone can access with this Analytics Hub link [here]() +* Tier 1: raw indexing results in all blocks, extrinsics, events, traces delivered in Google Bigquery Public Datasets. In May 2023, Colorful Notion, under the curation of Parity Data, onboarded a complete index of 70+ chains of Polkadot+Kusama into Google Public Datasets. This is in the "crypto_polkadot" and "crypto_kusama" dataset, which anyone can access with this Analytics Hub link [here] * Tier 2: deep indexing can then be done by doing some amount of data engineering with the above raw deata, resulting in tables, views or materialized views that can also be shared with new datasets, which can also be shared with Analytics Hub. @@ -98,7 +98,7 @@ as it requires compute time to regenerate. Polkaholic.io's indexer, when traces are available from an internal archive node, fetches traces and exposes them in the block explorer. For example, here is the trace for [Polkadot Block 15723663](https://polkaholic.io/trace/polkadot/15723663/) - + The raw keys (e.g. `0x26aa394eea5630e0...f1dbd372bbe532b1f8702b2a7e`) and values (e.g. `0x01ab50050...000000000000`) are decoded using the chains type spec into @@ -120,7 +120,7 @@ Value: { and loaded into BigQuery as part of a publicly available [substrate-etl](https://console.cloud.google.com/bigquery/analytics-hub/exchanges/projects/974572213039/locations/us/dataExchanges/substrate_18804f88005), recently added to Google BigQuery's Public Datasets in May 2023. - + In Milestone 1, we will provide a 3 tier solution to deep account analytics on Account References. Here is how the 3 tiers: @@ -130,7 +130,7 @@ In Milestone 1, we will provide a 3 tier solution to deep account analytics on A * Tier 3 requires situating the above dataset into an Account Analysis Dashboard of [Apache Superset](https://analytics.polkaholic.io/dashboard/list/). Here we have a WASM Contract Explorer prototype: - + We envision Milestone 1 focussed on Account References and then extended in Milestone 2 to Democracy+Staking deep analysis. This will result in an Account Analysis Dashboard, with 3 or more account tabs exploring: From de399e3b79deb9be7d6e9a05677e46735a6ebe5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Mon, 19 Jun 2023 14:25:58 +0200 Subject: [PATCH 486/578] Update DeepAccountAnalytics-PolkadotDataAlliance.md Fix markdown link issue --- applications/DeepAccountAnalytics-PolkadotDataAlliance.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/DeepAccountAnalytics-PolkadotDataAlliance.md b/applications/DeepAccountAnalytics-PolkadotDataAlliance.md index 1b139b05c17..def68a8ed1b 100644 --- a/applications/DeepAccountAnalytics-PolkadotDataAlliance.md +++ b/applications/DeepAccountAnalytics-PolkadotDataAlliance.md @@ -57,7 +57,7 @@ with new functionality. Instead, our solution to this problem is to separate the THREE TIERS within a _genuinely collaborative_ Polkadot Data Alliance: -* Tier 1: raw indexing results in all blocks, extrinsics, events, traces delivered in Google Bigquery Public Datasets. In May 2023, Colorful Notion, under the curation of Parity Data, onboarded a complete index of 70+ chains of Polkadot+Kusama into Google Public Datasets. This is in the "crypto_polkadot" and "crypto_kusama" dataset, which anyone can access with this Analytics Hub link [here] +* Tier 1: raw indexing results in all blocks, extrinsics, events, traces delivered in Google Bigquery Public Datasets. In May 2023, Colorful Notion, under the curation of Parity Data, onboarded a complete index of 70+ chains of Polkadot+Kusama into Google Public Datasets. This is in the "crypto_polkadot" and "crypto_kusama" dataset, which anyone can access with this Analytics Hub link [here](https://console.cloud.google.com/bigquery/analytics-hub/exchanges/projects/974572213039/locations/us/dataExchanges/substrate_18804f88005/listings/polkadot_188057df28c?project=github-integration-295917) and [here](https://console.cloud.google.com/bigquery/analytics-hub/exchanges/projects/974572213039/locations/us/dataExchanges/substrate_18804f88005/listings/kusama_1880581b627?project=github-integration-295917). * Tier 2: deep indexing can then be done by doing some amount of data engineering with the above raw deata, resulting in tables, views or materialized views that can also be shared with new datasets, which can also be shared with Analytics Hub. From 789ab0e59b6328cc8976807bb07460231f156d6c Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Mon, 19 Jun 2023 15:37:47 +0200 Subject: [PATCH 487/578] Update xcm-tool.md fix typo --- docs/RFPs/Open/xcm-tool.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/RFPs/Open/xcm-tool.md b/docs/RFPs/Open/xcm-tool.md index d36ae0fa8e1..8198519b580 100644 --- a/docs/RFPs/Open/xcm-tool.md +++ b/docs/RFPs/Open/xcm-tool.md @@ -19,6 +19,6 @@ There are currently two major areas of XCM that are still awaiting to be improve The scope of the new project count be one of: -- Develop tools to help developer to test XCM-related code +- Develop tools to help developers to test XCM-related code - Develop pallets or utility libraries to better handle the async nature of XCM communication - Develop a pallet to handle crosschain transfers of NFTs From b808b1f353c4b2bacccb7ad9b7a7d7300d3d2cb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Tue, 20 Jun 2023 11:30:05 +0200 Subject: [PATCH 488/578] Update ISO_8583.md Fix link to ISO20022 RFP --- docs/RFPs/Open/ISO_8583.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/RFPs/Open/ISO_8583.md b/docs/RFPs/Open/ISO_8583.md index d6a5047ebb9..a910d2a595c 100644 --- a/docs/RFPs/Open/ISO_8583.md +++ b/docs/RFPs/Open/ISO_8583.md @@ -7,7 +7,7 @@ ISO 8583 is an international standard for systems that exchange electronic transactions initiated by cardholders using payment cards. It defines a message format and a communication flow, but offers also custom fields and custom usages. Most transactions that involve ATMs are based on this standard and Mastercard, Visa and Verve networks base their authorization communications on the ISO 8583 standard. -Even though ISO 8583 is going to be replaced by [ISO 20022](https://github.com/w3f/Grants-Program/blob/master/rfps/open/ISO_20022.md), it might take some time before it’s actually fully replaced. +Even though ISO 8583 is going to be replaced by [ISO 20022](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/ISO_20022.md), it might take some time before it’s actually fully replaced. The goal of this RFP is to find teams that implement tools that make it easy and possible for the traditional finance industry to leverage substrate and ink! smart contracts to interact with ISO 8583 in various ways. These tools could be, but are not limited to: From 2ae2e3889859af628447977dd9a45ec8f11d622a Mon Sep 17 00:00:00 2001 From: Dastan <88332432+dastansam@users.noreply.github.com> Date: Tue, 20 Jun 2023 22:13:31 +0300 Subject: [PATCH 489/578] Add ISO-8553 application (#1809) Address more feedback --- applications/ISO-8583-implementation.md | 174 ++++++++++++++++++++++++ 1 file changed, 174 insertions(+) create mode 100644 applications/ISO-8583-implementation.md diff --git a/applications/ISO-8583-implementation.md b/applications/ISO-8583-implementation.md new file mode 100644 index 00000000000..2a8f6789bbf --- /dev/null +++ b/applications/ISO-8583-implementation.md @@ -0,0 +1,174 @@ +# ISO-8583 implementation + +- **Team Name:** Dastanbek Samatov +- **Payment Address:** 0xc42D0562BB4e53f5e9D888df35e1B91eA0f19cC3 (USDC) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +This application is in response to the [ISO-8583 RFP](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/ISO_8583.md). + +### Overview + +ISO-8583 PoC implementation for Substrate. + +In this project I aim to implement the proof of concept for the ISO-8583 standard in Substrate. The implementation will be based on the extensive research done by [Adit Patel](https://github.com/adit313) in the following [repository](https://github.com/adit313/ISO8583-Blockchain-Integration-Plan). + +I've already worked on the similar project for [EBICS standard](https://github.com/element36-io/ocw-ebics). I can leverage the knowledge gained from that project and research done by Adit Patel to implement the ISO-8583 standard in Substrate. + +### Project Details + +To fully imitate the ISO-8583 standard, I have divided this PoC project into two parts: infrastracture and blockchain. Infrastracture components are responsible for imitating the flow of the ISO-8583 message from the merchant to the PCIDSS compliant gateway. Blockchain components are responsible for further processing of the ISO-8583 message and settling the transactions/messages on the Substrate chain. + +Below is the implementation plan in a deeper technical detail from Adit Patel's research: + +![Implementation plan](https://github.com/dastansam/Grants-Program/assets/88332432/8b832448-9095-4846-95ea-ccaebe5e52a5) + +#### Infrastracture + +For this part, the implementation will consist of the following components: + +- **Merchant**: A hybrid web application, i.e can be used to either make the payment directly on Substrate chain, guaranteeing instant settlement, or via debit/credit card. It will consist of a mock marketplace and main work will be done on the payment checkout window. Depending on the payment method, the application will then send the payment request to the corresponding payment processor. +- **Payment processor (Stripe, Visa, Mastercard)**: The payment processor will be imitated by a web server that will accept the payment request from the merchant, compose the ISO-8583 message and send it to the gateway. It will maintain the offchain ledger (database). +- **PCIDSS Compliant Gateway (Oracle Company)**: The gateway is the first part of the centralized oracle. It will be mocked by a message broker that will process the incoming ISO-8583 messages from the traditional network and pools them for the offchain worker to query. It is also responsible for maintaining an up-to-date record of the offchain and on-chain ledger, validating messages, keeping track of chain events and composing new messages in case there is a mismatch between the two ledgers. + +For the above componenets, there are already some open source projects that can be used. Namely: + +- [ISO-8583 implementation in Javascript](https://github.com/zemuldo/iso_8583): I will use this library in mock web server and the merchant application. Opted for this library since it seems to be well maintained and documented (the Rust version has the last commit from 2019). +- [RabbitMQ](https://www.rabbitmq.com/): I will use RabbitMQ as a message broker for the gateway. It is a well known and widely used message broker. It also has a [Rust client](https://github.com/jgallagher/amiquip) + +And for the merchant app, below are the mockups of payment checkout window: + +![Card payment](https://github.com/dastansam/Grants-Program/assets/88332432/ee5e870a-1992-4d74-b6da-288b615f50e2) + +![Payment on-chain](https://github.com/dastansam/Grants-Program/assets/88332432/f4412bf4-b2c3-4407-866a-6ebbd948ac35) + +![Successfull checkout](https://github.com/dastansam/Grants-Program/assets/88332432/64e6d9bc-54af-4848-a6db-226bc8eebd96) + +#### Blockchain + +On the blockchain side, there were three key components that were proposed in the research: + +- A centralized oracle +- ERC-20R smart contract +- Substrate chain + +However, from my previous experience building the EBICS PoC and generally as a more experienced Substrate developer, I believe the first two components can be simplified to: + +- **An offchain worker (OCW)**: It will act as a second part of the oracle, i.e it will query for the ISO-8583 messages from the gateway and will send them to the Substrate chain. The only way for the chain to receive the ISO-8583 messages will be through the OCW. This will ensure that the chain is not spammed with unnecessary messages and will also allow us to hide sensitive information like account numbers and authorization codes. +- **Pallet**: pallets are more flexible and a lot easier to implement and maintain than smart contracts. It will implement the ERC-20R standard and will settle the transactions on the Substrate chain. + +#### Challenges + +One of the main challenges for this project is the reversability of transactions in the ISO-8583 standard. The standard allows for the reversal of transactions in case of a dispute. This is not a problem for the traditional payment networks since they are centralized and can easily reverse the transaction. Although, ERC20-R standard has a `revert` function, it becomes complicated when we try to get back the funds that are already spent. I will have to do more research on this topic and will try to come up with a solution. + +#### Inspirations + +EBICS PoC implementation offers some insights and inspiration, however, the ISO-8583 standard is a lot more complex and will require a lot more robust and complex infrastructure. Similarly, on the blockchain side, the reversability of transactions will pose a great challenge. Therefore, large parts of the blockchain components will need to be rewritten from scratch or significantly refactored in best case. + +### Ecosystem Fit + +A quote from Adit Patel here: + +> Supporting international standards would smooth the connection between crypto and traditional financial institutions and is a [go to market strategy for several competing projects](https://www.cryptopolitan.com/iso-20022-compliant-crypto-list/). While those efforts are focused on the newer ISO-20022, not ISO-8583, there is significant value in being the first blockchain to support traditional banking infrastructure and dislodge incumbent networks such as SWIFT or Visa/Mastercard. + +## Team :busts_in_silhouette: + +### Team members + +- Dastanbek Samatov + +### Contact + +- **Contact Name:** Dastanbek Samatov +- **Contact Email:** dastanbeksamatov@gmail.com +- **Website:** https://dastansam.github.io/ + +### Legal Structure + +- **Registered Address:** No registred entity +- **Registered Legal Entity:** No registred entity + +### Team's experience + +Dastanbek Samatov is a Software Engineer with more than 3 years of experience. For the past 2 years he has been working as a Rust/Substrate Engineer focusing on parachain development and also has been involved with several Web3 Foundation grant projects in the past (some of them as lead developer): + +- `SCALE Codec in AssemblyScript` - https://github.com/LimeChain/as-scale-codec +- `Substrate Runtime in AssemblyScript` - https://github.com/LimeChain/as-substrate-runtime +- `Framework for Substrate Runtimes in AssemblyScript` - https://github.com/LimeChain/subsembly +- `OCW EBICS` - https://github.com/element36-io/ocw-ebics + +### Team Code Repos + +- https://github.com/subclone/iso-8583-chain-template +- https://github.com/subclone/payment-processor + +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. + +- https://github.com/dastanbeksamatov + +### Team LinkedIn Profiles (if available) + +- https://linkedin.com/in/dastanbek-samatov + +## Development Status :open_book: + +This application is in response to the [ISO-8583 RFP](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/ISO_8583.md). + +The implementation is inspired from the previous [research](https://github.com/adit313/ISO8583-Blockchain-Integration-Plan) project for this RFP. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 4 months +- **Full-Time Equivalent (FTE):** 1 FTE +- **Total Costs:** 28,000 USD + +### Milestone 1 Infrastructure Part + +- **Estimated duration:** 2 month +- **FTE:** 1 +- **Costs:** 14,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 / GPLv3 / MIT / Unlicense | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can spin up the whole infrastructure components. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Merchant App | I will create a React application that will mock the merchant. The app will be connected to the Substrate chain with `PolkadotJs` and users will be able to directly pay using an on-chain extrinsic. Web app will also handle necessary balance checks by querying chain to early return invalid transactions. Users will also have an option to use their mock plastic cards. | +| 2. | Payment Processor | I will create a NodeJs server that will receive payment requests from merchant app, compose the ISO-8583 message and send it to the gateway. This server will also be responsible for keeping the offchain ledger, similar to how traditional networks currently operate. | +| 3. | PCIDSS Compliant Gateway | I will create a message broker service that will serve as a centralized oracle gateway. It will process and pool incoming messages from the mock payment processor. Oracle will maintain a constant connection to Substrate chain, to ensure the validity of messages in the pool before they are consumed. For example, if there is a transfer from Alice to Bob, oracle will ensure that `Alice` has enough funds both offchain and on-chain, `tx_id` of transfer is not already on-chain, etc. It will also include mechanisms to ensure the message is being consumed by genuine offchain worker and not some other malicious *consumer*. For this step, some basic cryptographic authentication method will be used. | +| 4. | Makefile | I will create a Makefile that will provide commands to ease testing, running and maintaining the project | + + +### Milestone 2 Blockchain Part + +- **Estimated Duration:** 2 months +- **FTE:** 1 +- **Costs:** 14,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 / GPLv3 / MIT / Unlicense | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| **0e.** | Article | I will publish an article that explains the complete lifecycle and future plans of the project | +| 1. | Substrate Chain | I will create a Substrate chain forked from `substrate-node-template`. | +| 2. | Offchain Worker | I will write an offchain worker logic that queries PCIDSS compliant gateway for ISO-8583 messages, processes them and dispatches extrinsics to the chain. | +| 3. | ERC-20R Pallet | I will create a pallet that implements the `ERC-20R` interface. It will be responsible for processing incoming message from the offchain-worker. It will perform security checks, maintain the ledger and control the issuance of the tokens. | +| 4. | Integration tests | I will add end-to-end tests with Javascript and `zombienet` | +| 5. | Makefile | I will create a Makefile that will provide commands to ease testing, running and maintaining the project | + +## Future Plans + +In case of successful PoC, I plan to continue working on this project to address some of the pain points of the PoC: + +- **Reversability**: look for more decentralized ways to guarantee reversability of the transactions, maybe with somewhat similar mechanism to slashing +- **Decentralization of Oracles**: look for more decentralized ways of message processing by using decentralized oracles, maybe look for the direction of zero-knowledge proofs + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** + +I have previously worked on several grant projects (listed above) and generally have been in Polkadot ecosystem for more than 3 years. From e1ed35650a0cf1b05d032137b7e435c803864209 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 20 Jun 2023 21:16:12 +0200 Subject: [PATCH 490/578] Update index.md add ISO-8553 PoC implementation --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index d9ff7193282..197e69c6850 100644 --- a/applications/index.md +++ b/applications/index.md @@ -74,6 +74,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Syncra](https://syncra.xyz) | [No Code DAO Maker and ZK Powered Private Voting Solution](Syncra.md)| [GitHub](https://github.com/SyncraDAO) | ☐ | ☐ | ☐ | | [P2P.ORG](http://p2p.org/) | [Validator Monitoring Service](Validator_Monitoring_Service.md)| [GitHub](https://github.com/p2p-org/polkadot_monitoring_service) | ☐ | ☐ | ☐ | | [Colorful Notion](https://github.com/colorfulnotion) | [Deep Account Analytics in Three Tiers for the Polkadot Data Alliance](DeepAccountAnalytics-PolkadotDataAlliance.md)| [GitHub](https://github.com/colorfulnotion/) | ☐ | ☐ | ☐ | +| [Dastanbek Samatov](https://dastansam.github.io/) | [ISO-8553 PoC implementation](ISO-8583-implementation.md)| [GitHub](https://github.com/dastanbeksamatov) | ☐ | ☐ | ☐ | [🔝](#2023) From cc7b906e770aadc6604031d8d84e22ae512dace1 Mon Sep 17 00:00:00 2001 From: strategyobjectadmin <93009623+strategyobjectadmin@users.noreply.github.com> Date: Wed, 21 Jun 2023 17:42:40 +0400 Subject: [PATCH 491/578] Update substrate_client_java.md (#1811) --- applications/substrate_client_java.md | 78 +++++++++++++-------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/applications/substrate_client_java.md b/applications/substrate_client_java.md index 77c90a2a288..cda06048e78 100644 --- a/applications/substrate_client_java.md +++ b/applications/substrate_client_java.md @@ -1,6 +1,6 @@ # Substrate Client for Java -- **Team Name:** Doken +- **Team Name:** Seals - **Payment Address:** Information provided in the "W3F Technical Grant Application Form" ## Project Overview :page_facing_up: @@ -54,11 +54,11 @@ The best approach to reach project’s goals is to use annotations and code gene - [x] `@RpcEncoder`; - [x] `@RpcDecoder`; -- [ ] Pallet - - [ ] `@Pallet`; +- [x] Pallet + - [x] `@Pallet`; - [ ] `@Transaction`; - - [ ] `@Query`; - - [ ] `@EventHandler`. + - [x] `@Storage`; + - [x] `@Event`. These allow the generation of scale serializers, deserializers, RPC methods, code for interaction with pallet, etc. In the next sections you will find further examples. @@ -234,41 +234,41 @@ Our solution targets Substrate instead of Polkadot, and is implemented with code ### Team members -- Alexander Kalankhodzhaev, Team Leader -- Maria Manchovska, Product Manager -- Vadim Nabiev, Senior Developer +- Vadim Nabiev, Team Leader +- Arame Bandari, Product Manager +- Vahram Kobelyan, Senior Developer - Plamen Uzunov, Senior Java developer -- Teodor Georgiev, Software developer -- Maria Kostadinova, Information Designer +- Teodor Georgiev, Software developer ### Contact -- **Contact Name:** Alexander Kalankhodzhaev -- **Contact Email:** Alexander.Kalankhodzhaev@strategyobject.com +- **Contact Name:** Vadim Nabiev +- **Contact Email:** vadim.nabiev@strategyobject.com - **Website:** www.strategyobject.com Grateful if you could also copy the email address doken.network@gmail.com in all official communications. ### Legal Structure -- **Registered Address:** ul. "Tsaribrodska" 70, 1309 Sveta Troitsa, Sofia, Bulgaria -- **Registered Legal Entity:** Strategy Object EOOD +- **Registered Address:** Dubai Media City, Al Thuraya Tower 1 - Al Sufouh - Al Sufouh 2 - Dubai, United Arab Emirates +- **Registered Legal Entity:** Strategy Object FZ-LLC ### Team's experience -Alexander has over 14 years of experience as a software engineer and 3 years as a blockchain tech lead. Vadim has over 10 years as a software enfgineer and 2 years as Rust developer. Plamen is a Senior Engineer with over 15 years experience in particular in Java and cryptography. Teodor is a junior developer who recently joined the team, with a particular focus in Java development. +Vadim has over 10 years of experience as as a software enfgineer and 3 years as Rust developer. Plamen is a Senior Engineer with over 15 years experience in particular in Java and cryptography. Vahram is a Senior Engineer with over 7 years experience in particular in Java. Teodor is a junior developer who recently joined the team, with a particular focus in Java development. ### Team Code Repos -- [Strategy Object](https://github.com/orgs/strategyobject/) -- [Alexander](https://github.com/kalaninja/) -- [Vadim](https://github.com/vnabiev/) -- [Plamen](https://github.com/PapiUzunov/) +- [Strategy Object](https://github.com/strategyobject) +- [Vadim](https://github.com/vnabiev) +- [Vahram](https://github.com/VahramKobelyan) +- [Plamen](https://github.com/PapiUzunov) ### Team LinkedIn Profiles (if available) -- [Alexander](https://www.linkedin.com/in/kalaninja/) - [Vadim](https://www.linkedin.com/in/nabiev-v-r/) +- [Vahram](https://www.linkedin.com/in/kobelyan/) +- [Arame](https://www.linkedin.com/in/aramebandari/) - [Plamen](https://www.linkedin.com/in/plamen-uzunov-2761b47/) - [Teodor](https://www.linkedin.com/in/teodor-georgiev-248914192/) @@ -283,7 +283,7 @@ The current version of the substrate-client-java is available at https://github. ### Overview -- **Total Estimated Duration:** 7 months +- **Total Estimated Duration:** 24 months - **Full-Time Equivalent (FTE):** 2.9 FTE - **Total Costs:** Information provided in the "W3F Technical Grant Application Form" @@ -321,7 +321,7 @@ Implement a query api similar to the one of polkadot-js. Implement a transactions api similar to `api.tx` of polkadot-js. -- **Estimated duration:** 1 month +- **Estimated duration:** 2 months - **FTE:** 3 FTE - **Costs:** Information provided in the "W3F Technical Grant Application Form" @@ -331,41 +331,41 @@ Implement a transactions api similar to `api.tx` of polkadot-js. | 1. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can submit transactions. | | 2. | Testing | Core functions will be fully covered by unit and integration tests to ensure functionality and robustness. | | 3. | Wiki | We will publish a wiki page that explains the details of the implementation for transactions within the substrate-client-java library. | -| 4. | Transactions API | We will add transactions capabilities to the substrate-client-java. | - -### Milestone 4 — RPC sections and methods +| 4. | Transactions API | We will add transactions capabilities to the substrate-client-java. | -Implement RPC sections and methods that remained unimplemented from the previous steps. +### Milestone 4 — Handling of Metadata -- **Estimated duration:** 1 month +- **Estimated duration:** 2 months - **FTE:** 3 FTE - **Costs:** Information provided in the "W3F Technical Grant Application Form" | Number | Deliverable | Specification | | -----: | ----------- | ------------- | | 0a. | License | Apache 2.0 | -| 1. | Documentation | We will provide **inline documentation** of the declared RPC sections and methods. | -| 2. | Testing | Core functions will be fully covered by integration tests to ensure functionality and robustness. | -| 3. | Wiki | We will publish a wiki page that explains the details of the implementation for RPC sections and methods within the substrate-client-java library. | -| 4. | RPC methods | We will add missing RPC sections and methods to the substrate-client-java. | +| 1. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains about handling of metadata. | +| 2. | Testing | Core functions will be fully covered by unit and integration tests to ensure functionality and robustness. | +| 3. | Wiki | We will publish a wiki page that explains the details of metadata handling within the substrate-client-java library. | +| 4. | Metadata support | We will add metadata capabilities to the substrate-client-java. | -### Milestone 5 — Handling of Metadata +### Milestone 5 — RPC sections and methods -- **Estimated duration:** 1 month +Implement RPC sections and methods that remained unimplemented from the previous steps. + +- **Estimated duration:** 2 months - **FTE:** 3 FTE - **Costs:** Information provided in the "W3F Technical Grant Application Form" | Number | Deliverable | Specification | | -----: | ----------- | ------------- | | 0a. | License | Apache 2.0 | -| 1. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains about handling of metadata. | -| 2. | Testing | Core functions will be fully covered by unit and integration tests to ensure functionality and robustness. | -| 3. | Wiki | We will publish a wiki page that explains the details of metadata handling within the substrate-client-java library. | -| 4. | Metadata support | We will add metadata capabilities to the substrate-client-java. | +| 1. | Documentation | We will provide **inline documentation** of the declared RPC sections and methods. | +| 2. | Testing | Core functions will be fully covered by integration tests to ensure functionality and robustness. | +| 3. | Wiki | We will publish a wiki page that explains the details of the implementation for RPC sections and methods within the substrate-client-java library. | +| 4. | RPC methods | We will add missing RPC sections and methods to the substrate-client-java. | ### Milestone 6 — ED25519 -- **Estimated duration:** 1 month +- **Estimated duration:** 2 months - **FTE:** 2.5 FTE - **Costs:** Information provided in the "W3F Technical Grant Application Form" @@ -381,7 +381,7 @@ Implement RPC sections and methods that remained unimplemented from the previous Implement Constants API similar to `api.consts` of polkadot-js that allows access to the runtime constants. -- **Estimated duration:** 1 month +- **Estimated duration:** 2 months - **FTE:** 2.5 FTE - **Costs:** Information provided in the "W3F Technical Grant Application Form" From 6734179d01ce6a4d66aafe47f2faa9d20ef276e3 Mon Sep 17 00:00:00 2001 From: MeerKatDev Date: Wed, 21 Jun 2023 17:42:20 +0200 Subject: [PATCH 492/578] Application for Substrate Move System Pallet, pt. 1 (#1769) --- .../Substrate_Move_System_Pallet_1.md | 187 ++++++++++++++++++ 1 file changed, 187 insertions(+) create mode 100644 applications/Substrate_Move_System_Pallet_1.md diff --git a/applications/Substrate_Move_System_Pallet_1.md b/applications/Substrate_Move_System_Pallet_1.md new file mode 100644 index 00000000000..a9369dadf82 --- /dev/null +++ b/applications/Substrate_Move_System_Pallet_1.md @@ -0,0 +1,187 @@ +# Substrate Move System Pallet (part 1) + +- **Team Name:** Eiger +- **Payment Address:** Fiat 14.04.2023, 16:50 UTC+3 +- **Level:** 3 + +## Project Overview ****📄**** + +This application is a response to the **[Move Smart Contract Pallet RFP](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/move_smart_contract_pallet.md).** + +### Overview + +Some terminology first: + + - **Substrate Move System Pallet** - A Substrate system pallet that can be used as a building block for substrate-based chains, it exposes interfaces to interact with the Move virtual machine. + + - **Substrate Move** - A Move language fork that is Substrate compatible. + +Objectives: + +- The goal is to provide a Substrate system pallet that allows to deploy and interact with Smart Contracts written in the Move language, by providing a Move Virtual Machine (MoveVM) as a pallet. +- We plan on exploring a fork of the Move language, so it’s adjusted to work with the Substrate ecosystem, as well as developing a Substrate system pallet that allows the execution of Move smart contracts. +- The project directly improves the growth potential of the Substrate based ecosystem by providing support for one of the most modern smart contract programming languages and VM types out there - Move. +- We are interested in creating this project because we are firm believers in the modular vision of web3, and only by collaborative efforts on improving and unifying the technology between different chains and the languages, will we get better products as an outcome. + +**Goal** - Level up the growth possibilities of the Substrate ecosystem by providing a way to develop and execute Move smart contracts on Substrate. + +This is the first phase of a 3-phase development program: + +1. **In-Depth Exploration and Assessment of MoveVM and Substrate Integration** +2. MoveVM compatibility work and Subtrate Pallet development +3. Finalising the Substrate-Compatible MoveVM + +### Project Details + +**Prior work** + +We are basing the core architecture and many of the design decisions on the [Pontem networks developed system pallet for Move VM](https://github.com/pontem-network/pontem/tree/master/pallets/sp-mvm). They had maintained [their own fork of the Diems Move language](https://github.com/pontem-network/sp-move-vm), which was used as the base execution layer for their version. Both of these repositories have not been maintained for a very long time already. + +♻️ We aren't seeking to maintain any of the existing codebase; rather, we aim for a full revival through a new greenfield project. Our rationale for this stems from the substantial advancements made in the Rust, Substrate, and Move ecosystems since Pontem’s latest commits from over a year ago. We believe that handling potential code rot due to the passage of time might be more labor-intensive than starting afresh and drawing upon existing projects for more current guidelines. + +**Documentation of core components, architecture** + +1. **Substrate Move:** + + The first part of the project will be a MoveVM fork, as some major changes will need to be made to the codebase for it to be substrate compatible. For example: + + - `no_std` compatibility: Making it lightweight and suitable for use in Substrate runtimes. + - `wasm32` target compatibility: Adapting all the VM’s different components to work efficiently and securely on the wasm32 target architecture. + + We plan on creating and maintaining the fork in a manner that would allow us and the community to easily follow and track changes from the upstream, thus making the maintenance and change tracking to be much simpler. + + At the time of writing this application, we suspect that this will be needed because this is what also Pontem had to do to support it in their version. This will be further researched and assessed during the first milestone. + +2. **Move VM system pallet:** + + The second part of the project will be a Substrate virtual machine pallet in Substrate. This is a modular component that is needed to integrate a specific new VM into a Substrate runtime. It will serve as a bridge between the runtime and the Move VM, managing resources and translating data or actions between the two environments. + + +**API specifications** + +As a minimum, we plan on providing all of the RPC calls that the Pontem crate did. As the team progresses with the implementation, we might add or remove RPC calls as we best see fit. + +Move language has a concept of “gas” for executing contracts, whereas Polkadot uses “Weights”. Each Move transaction invocation requires providing a gas limit for execution, and it’s necessary to be able to transform the values between weight and gas: + +- `mvm_gasToWeight` +- `mvm_weightToGas` + +Estimating gas for different operations: + +- `mvm_estimateGasPublish` +- `mvm_estimateGasExecute` + +Working with the primitives of the Move language: + +- `mvm_getResource` +- `mvm_getModuleABI` +- `mvm_getModule` + +**Tech stack** + +We plan on using Rust for developing the system pallets and using existing Move language smart contracts for end-to-end testing of the whole workflow. + +**Notes** + +Because the Move language requires a fork to work with Substrate chains, and modifications to the address size, there might be incompatibilities with deploying existing Move Smart Contracts from other chains that make use of the address properties size, as well as the compiled ABI and bytecode for those contracts might be invalid. To deploy on our MoveVM system pallet, the forked toolchain must be used to re-compile all smart contracts. The address size of Move language is configurable via a feature switch with 32-bits being one of the options. + +### Ecosystem Fit + +Move is a smart contract programming language that emphasizes access control and scarcity, offering some unique advantages over other popular VMs in blockchain ecosystems. + +The importance of bringing the MoveVM to Polkadot was recognized over two years ago when [Pontem Network](https://pontem.network/) started working on a [Move virtual machine pallet](https://github.com/pontem-network/pontem/tree/master/pallets/sp-mvm) to execute Move smart contracts on Substrate-based chains. Although they discontinued the project and haven't updated the codebase for over a year, the W3F still keeps this RFP, which serves as evidence that porting the MoveVM is crucial for the future of the Polkadot network. + +We concur with this perspective and have actually been actively researching the MoveVM - exactly with a similar idea of helping port it over to other chains. + +## Team **👥** + +### Team members + +- **Roberts Ivanovs** ([Github](https://github.com/roberts-ivanovs), [Linkedin](https://www.linkedin.com/in/roberts-ivanovs-3b24b6159/)) is a Rust Software Engineer at Eiger. He has extensive experience using Rust for performance-sensitive backend work, the IoT industry, web development, and Solidity/dApp development. +- **Tomek Piotrowski** ([Github](https://github.com/tomekpiotrowski), [Linkedin](https://www.linkedin.com/in/tomasz-piotrowski-17466b4/)) Software Engineer at Eiger, specializing in Rust-based applications. With a strong background in software development, he has spent recent years focusing on the Rust programming language. At Eiger, Tomasz actively contributes to the advancement of Rust-based blockchains and their ecosystems. + +### Contact + +- **Contact Name:** Daren Tuzi +- **Contact Email:** [daren@eiger.co](mailto:daren@eiger.co) (Founder & CEO of Eiger) +- **Website:** [Eiger.co](https://www.eiger.co/) + +### Legal Structure + +- **Registered Address:** Linnankatu 3 A 24, 20100 Turku, Finland +- **Registered Legal Entity:** Eiger Oy**** + +### Team's experience + +Web3 promises to upgrade the very foundations of our society – from money, finance, and governance to media, gaming, and science. To deliver on that promise, decentralised technologies are to be integrated into the everyday experiences of billions of people. For engineering, this is a mountain of a challenge. + +Eiger was founded to develop infrastructure for web3 mass adoption. We help technology companies improve and integrate the core technologies of web3 to meet the climbing demands for scaling and performance. + +We currently employ 25+ senior web3 engineers across the globe and work with some of the most ambitious organisations in the industry, including Forte, Aleo, and XRP Labs, to name a few. + +### Team Code Repos + +As mentioned in the Teams section, Eiger already has extensive experience developing large infrastructural projects. Some chosen examples: + +- The SnarkOS for Aleo, the privacy-focused smart contract L1 platform going into production this summer. https://github.com/AleoHQ/snarkOS +- OrbitDB is a distributed, p2p, serverless database. https://github.com/orbitdb/orbit-db +- The rust implementation of IPFS, now archived. https://github.com/rs-ipfs/rust-ipfs +- The main implementation of Interledger in Rust, which we developed and maintained. https://github.com/interledger/interledger-rs +- Ziggurat - A Network protocol testing framework for ZCash, XRP, and Algorand. Notably, critical network vulnerabilities were found and reported to the core teams. https://github.com/runziggurat + +## Development Status **📖** + +- This application is a direct response to [this RFP](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/move_smart_contract_pallet.md) +- [Move language Github](https://github.com/move-language/move/tree/main/language) +- [Pontem MoveVM fork](https://github.com/pontem-network/sp-move-vm) +- [Pontem MoveVM system pallet](https://github.com/pontem-network/pontem/tree/master/pallets/sp-mvm) + +We have not yet started our own development, we are still in the research phase. + +## Development Roadmap **🔩** + +### Overview + +- **Total Estimated Duration:** 1 month +- **Full-Time Equivalent (FTE):** 2 FTE +- **Total Costs:** 48 000 USD + +### **In-Depth Exploration and Assessment of MoveVM and Substrate Integration** + +**Goal**: Research Pontem Move VM solution, Move language and its ecosystem, and document all findings. Prepare a repository for developing the Substrate Move system pallet. + +| Number | Deliverable | Specification | +| --- | --- | --- | +| 0a. | License | Apache 2.0 and MIT | +| 0b. | Documentation | We will provide both inline documentation of the code and a basic tutorial that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works. | +| 0c. | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | Content: article that explains all of the research and findings done in the research phase, and how it shapes the project in the future. The research would include:
  • analysis of the Pontem Move fork,
  • analysis of the Pontem MoveVM system pallet, evaluating its architecture and design decisions,
  • analysis of the current Move language restrictions, ABI and understanding if forking the language is still necessary,
  • analysis of the potential effects of forking the language and the toolchain if it is deemed necessary.
Medium: A markdown design decision document in the repository. | +| 1. | System Pallet: Substrate Move | We will create a Substrate system pallet that will provide the RPC calls as the initial interfaces for interacting with the Move VM. The Move VM port itself will not be implemented, all of the methods will be empty stubs.
Solid code practices will be in place: CI/CD, tests, documentation, linting, and publication of the library to http://crates.io. | +| 2. | Rust crate: Substrate Move | Forking the Move VM if deemed necessary. The alterations would include everything to create the virtual machine Substrate-compatible. | +| 3. | Rust crate: Substrate Move documentation | Documentation of the alteration made for the MoveVM to be Substrate-compatible. Also, the whole process of how it was ported will be described, either in form of markdown documentation or detailed commenting on GitHub issues and PRs. | + + +## Future Plans + +This is the first phase of a 3 steps development plan: + +1. **In-Depth Exploration and Assessment of MoveVM and Substrate Integration** +2. MoveVM compatibility work and Subtrate Pallet development +3. Finalising the Substrate-Compatible MoveVM + +The **next** step will be to submit a grant proposal to continue this work - creating the first iteration of a pallet capable of receiving, storing and executing Move smart contracts. + +We hope that upon the completion of all phases of creating the Substrate Move System Pallet , it will open doors for further collaboration and community input on the project. We strive to have the codebase well documented so that others might join in and contribute. + +While there are no long-term plans set in stone for the usage of this pallet, we have had incredibly exciting discussions about creating a parachain, possibly a [common good parachain](https://polkadot.network/blog/common-good-parachains-an-introduction-to-governance-allocated-parachain-slots/) (system parachain), that utilizes this MoveVM implementation and would run MoveVM contracts. As we near the completion of this initial development, we will be discussing these future plans more in-depth. + +## Additional Information **➕** + +**How did you hear about the Grants Program?** + +We learned about it when looking at open RFPs by the web3 foundation on their website. + +We wanted to get back up to date on what is happening in the Polkadot ecosystem, and working on grants, specifically RFPs, has been a great way to do so. + +Looking to apply to other RFPs currently open as well. Stay tuned! From 0d5624b6c68eab0b7ab1447c3240723420e31fb6 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 21 Jun 2023 17:49:52 +0200 Subject: [PATCH 493/578] Update index.md Add Move --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 197e69c6850..6a2b17bf96a 100644 --- a/applications/index.md +++ b/applications/index.md @@ -75,6 +75,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [P2P.ORG](http://p2p.org/) | [Validator Monitoring Service](Validator_Monitoring_Service.md)| [GitHub](https://github.com/p2p-org/polkadot_monitoring_service) | ☐ | ☐ | ☐ | | [Colorful Notion](https://github.com/colorfulnotion) | [Deep Account Analytics in Three Tiers for the Polkadot Data Alliance](DeepAccountAnalytics-PolkadotDataAlliance.md)| [GitHub](https://github.com/colorfulnotion/) | ☐ | ☐ | ☐ | | [Dastanbek Samatov](https://dastansam.github.io/) | [ISO-8553 PoC implementation](ISO-8583-implementation.md)| [GitHub](https://github.com/dastanbeksamatov) | ☐ | ☐ | ☐ | +| [Eiger](https://www.eiger.co/) | [Substrate Move System Pallet, pt. 1](Substrate_Move_System_Pallet_1.md)| [GitHub](https://github.com/eigerco) | ☐ | ☐ | ☐ | [🔝](#2023) From 7633082a101037f6dc468f7680928b67f128e6d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 21 Jun 2023 17:52:47 +0200 Subject: [PATCH 494/578] Update Substrate_Move_System_Pallet_1.md Fix HTML for website --- applications/Substrate_Move_System_Pallet_1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/Substrate_Move_System_Pallet_1.md b/applications/Substrate_Move_System_Pallet_1.md index a9369dadf82..05cd4519156 100644 --- a/applications/Substrate_Move_System_Pallet_1.md +++ b/applications/Substrate_Move_System_Pallet_1.md @@ -157,7 +157,7 @@ We have not yet started our own development, we are still in the research phase. | 0c. | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | | 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | | 0e. | Article | Content: article that explains all of the research and findings done in the research phase, and how it shapes the project in the future. The research would include:
  • analysis of the Pontem Move fork,
  • analysis of the Pontem MoveVM system pallet, evaluating its architecture and design decisions,
  • analysis of the current Move language restrictions, ABI and understanding if forking the language is still necessary,
  • analysis of the potential effects of forking the language and the toolchain if it is deemed necessary.
Medium: A markdown design decision document in the repository. | -| 1. | System Pallet: Substrate Move | We will create a Substrate system pallet that will provide the RPC calls as the initial interfaces for interacting with the Move VM. The Move VM port itself will not be implemented, all of the methods will be empty stubs.
Solid code practices will be in place: CI/CD, tests, documentation, linting, and publication of the library to http://crates.io. | +| 1. | System Pallet: Substrate Move | We will create a Substrate system pallet that will provide the RPC calls as the initial interfaces for interacting with the Move VM. The Move VM port itself will not be implemented, all of the methods will be empty stubs.
Solid code practices will be in place: CI/CD, tests, documentation, linting, and publication of the library to http://crates.io. | | 2. | Rust crate: Substrate Move | Forking the Move VM if deemed necessary. The alterations would include everything to create the virtual machine Substrate-compatible. | | 3. | Rust crate: Substrate Move documentation | Documentation of the alteration made for the MoveVM to be Substrate-compatible. Also, the whole process of how it was ported will be described, either in form of markdown documentation or detailed commenting on GitHub issues and PRs. | From f1ece0de457990696a4ecdec9ae8936b37a37b8c Mon Sep 17 00:00:00 2001 From: Jonathan L Date: Wed, 21 Jun 2023 11:30:34 -0500 Subject: [PATCH 495/578] Dot-ETL Project Proposal (#1716) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Create / update dot_etl.md, + minor changes and feedback * Update dot_etl.md changes w/ more detail to accomodate feedback * Update applications/dot_etl.md Co-authored-by: Sebastian Müller * Update dot_etl.md updated total estimated duration * Update dot_etl.md update - remove double entry ledger from M1 description * Update dot_etl.md Updates to accommodate common interface to allow for extensibility to other platforms, etc. * Update dot_etl.md updated milestone specific steps --------- Co-authored-by: johncandido Co-authored-by: Sebastian Müller --- applications/dot_etl.md | 164 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 applications/dot_etl.md diff --git a/applications/dot_etl.md b/applications/dot_etl.md new file mode 100644 index 00000000000..e4fbf5ee1ce --- /dev/null +++ b/applications/dot_etl.md @@ -0,0 +1,164 @@ +# DOT-ETL + +- **Team Name:** Davanti +- **Payment Address:** 16m9eMpB3BuPSXwjvdCY6z63pTuvdnv8FjmmH33ZkYPCr9XC +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +### Overview + +This proposal is in response to the following RFP: [Analysis Website and Data Platform](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/analysis-website-and-data-platform.md) + +The goal of the Dot-ETL project is to lower the friction required to conduct fine-grained and aggregated analysis of transactions on Polkadot network, via a framework to extract Polkadot transaction-level data to various offline formats: e.g. CSV / delimited, relational, columnar. Furthermore, we intend to develop a framework to ETL Substrate to [Google BigQuery](https://cloud.google.com/bigquery), orchestrated via [Google Cloud Composer](https://cloud.google.com/composer). + +The Polkadot and Kusama ecosystems have nurtured a significant developer community, and hosts a number of well-known parachains spanning a diverse series of domains, including Defi lending / liquidity, DEXs, NFTs, RWAs and securitization, as well as identity and privacy applications. While there has been a great deal of interest in developing on polkadot, there hasn't thus far been a simple means to query and visualize transaction-level data and aggregates. + +Dot-ETL will be similar in functionality to the [Ethereum ETL project](https://ethereum-etl.readthedocs.io/en/latest/). In the same way that the ETH-ETL offering Ethereum transaction data as a Public Dataset from Google has helped to establish higher TVL and adoption of the Ethereum network, the goal is that by making PolkaDot transactional data easily accessible without the majority of data engineering tasks that exist in extracting data in usable form from the blockchain will lead to greater development and interest for the protocol by mainstream users of platforms such as Google Cloud. Once data is supported and provided in this format, there are also other potential use cases that can expand adoption of PolkaDot data by the blockchain industry such as easily being able to host Chainlink oracles for this data and provide it in readily available form for a number of different cross-chain applications. The open nature of the google bigquery dataset would allow anyone to query and extract insights from on-chain activity via SQL, or even build visualizations on thedata. + +Upon successful completion of the primary data structures (blocks, extrinsics, events), we plan to provide a framework / pattern to extract extrinsics tailored to specific parachains. We may explore Defi and RWAs in more depth: we believe that providing focus on DeFi activity related to Real World Assets on Google Cloud is the most promising use of public data to attract attention to the ecosystem. + +We also intend to publish guides on how to query and use the dataset (i.e. medium articles, github wikis, gitbook document site). The source code for Dot-ETL will be made public through the Web3 foundation. + +The team has extensive technical background in backend software engineering and machine learning / data science, and domain knowledge in machine learning, financial services (both retail as well as institutional), lending, and quantitative risk management. Our expertise and extensive domain experience, particularly in real world usage of data in Fintech and DeFi, will allow for us to build with adoption and practical use in mind. + +### Project Details +(Technical Details) + +The Dot-ETL project will utilize prior work on the SubQuery project to index and source block/event/call data on the Polkadot blockchain. The SubQuery project is already able to index and parse block / extrinsic(transaction) / event data on Substrate, persist into a postgres data schema, and serve queries on the data via GraphQL. + +Our ETL framework will consume the indexed data on a managed SubQuery node via GraphQL, and save to Google BigQuery in a format similar to existing blockchain-etl projects. We plan to orchestrate this ETL to BigQuery via the Google Composer offering on GCP as Airflow DAGs, written in Python. + +The design of the ETL will allow for a varied series of output formats. Users of the framework can choose to download the code and run their own copy of the ETL locally against the SubQuery node, or they can utilize the GCP BigQuery offering. We expect most users of the ETL data to utilize the public offering. + +The architecture and process of executing airflow pipelines within GCP composer are fairly well-documented. We expect that the infrastructure / architectural components for Dot-ETL will be similar to standard deployments within GCP composer - we are unlikely to require anything truly bespoke. + +The first milestone of the project will focus around blocks, extrinsics and events in Substrate, and will produce the same base-level tables (blocks, extrinsics, events). Subsequent milestones will propose a means to extract specific extrinsics / events from particular pallets and parachains, with a possible focus on Defi / RWAs. **We believe that providing focus on DeFi activity related to Real World Assets on Google Cloud is the most promising use of public data to attract attention to the Polkadot ecosystem.** + +We're still investigating the appropriate schema details that will capture data in the most useful /optimal way, but believe that the core tables / schema will be very similar to that of the [Ethereum ETL project](https://ethereum-etl.readthedocs.io/en/latest/). + +There are two main components of the project. The first is the configuration of the SubQuery managed node that will index the components of Substrate that we are interested in. The second component is the Airflow DAG that will communicate with the SubQuery node via a GraphQL API. The DAG will write updates to underlying formats. The initial focus will be on writing to BigQuery tables, but the framework should be written such that other providers / database formats can be accommodated. While we may not write drivers / handlers for each provider or database type, the framework will be written in such a way that will allow the community to write specific handlers that can be easily plugged into the existing framework. + +### Ecosystem Fit + +Questions / Answers on Ecosystem Fit: + +**Q: Where and how does your project fit into the ecosystem?** + +A: Our aim is to provide a foundational framework and approach to ETLing Substrate data into the GCP BigQuery cloud storage medium (+ other mediums as needed). A robust illustrative example will allow others to build upon / extend the framework, and run and maintain the ETL process for general community use. By transforming into GCP BigQuery, we hope to drastically lower the friction required for anyone to analyze and produce insights on the data (developers, analysts, investors, enthusiasts). + +**Q: Who is your target audience (parachain/dapp/wallet/UI developers, designers, your own user base, some dapp's userbase, yourself)?** + +A: Everyone. By building a framework that will make data available in a way that can be queried via SQL, and in conjunction with a repository of query recipes and articles / guides / docs, we allow anyone with some base-level analysis interest to get up and running quickly. Because transaction-level data will also be available in a standard data query format on Google cloud, it will be possible to create any number of dashboards and visualizations on third-party / cloud-based analytic tools. + +**Q: What need(s) does your project meet?** + +A: Analysis / Insights - ability for people (all audience types) to query transaction data at any granularity. Putting this data into an approachable format opens the ability for users to create reports, visualizations, monitors and notifications. Better visibility => more engagement / better understanding => stronger community. Most users of data don't have the data engineering skills or capacity to extract data of this form onto a platform like Google Cloud platform, while remaining highly adept at querying, analyzing and modeling this type of data on such a platform. The DOT-ETl project is meant to remove the major data engineering barrier that exists for these individuals to take advantage of the technological offerings Google Cloud platform in working with PolkaDot data. + +**Q: Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem? If so, how is your project different? If not, are there similar projects in related ecosystems?** + +A: There is already a team that has created substrate-etl on Google BigQuery. However, we believe there is value to creating redundancy by providing a competing approach to the problem. Our approach differs in two ways (technically): (a) use of the SubQuery indexer, whereas the competing team utilized their own indexer (polkaholic), (b) use of google composer / airflow. + +## Team :busts_in_silhouette: + +### Team members + +- Jonathan +- John + +### Contact + +- **Contact Name:** Jonathan Liang +- **Contact Email:** jonathan.h.liang@gmail.com +- **Website:** https://github.com/liangjh + +### Legal Structure + +- **Registered Address:** N/A +- **Registered Legal Entity:** N/A + +### Team's experience + +The team has extensive technical background backend software engineering and machine learning / data science, and domain knowledge in machine learning, financial services (both retail as well as institutional), lending, and quantitative risk management (market trading risk as well as bank capital). + +Jonathan has worked in both fintech in backend software engineering, as well as institutional financial firms (investment banks / hedge funds) in quantitative risk roles. Please see Jonathan's [Github (liangjh)](https://github.com/liangjh) for some public examples of projects he has built in his free time (private repos also available, pls contact to discuss). Jonathan is currently working on [Cascadius Finance](https://docs.cascadius.finance), a full-stack securitization protocol. + +John served as Head of Data Science & Modeling in FinTech startups, where he led and built teams for over nine years. He also has led adoption and integration of blockchain technology for FinTech clients, namely the [partnership between Visa, Circle and Tala](https://www.forbes.com/sites/ninabambysheva/2021/05/05/visa-partners-with-fintech-startup-tala-to-drive-crypto-adoption-in-emerging-markets/?sh=2b225df77e49). In addition he has notably worked with companies like JD.com, Baidu, Ford Motor Credit, Discover, and Synchrony in the development of machine learning models for financial application. He has regularly served as a thought leader and public figure for credit executives on the subject of machine learning, having spoken on multiple industry panels and at notable conferences such as Lendit Fintech, American Banker’s BankAI and the Marketplace Lending Summit. John has also achieved the level of Competitions Master from the Google owned company Kaggle, for his stellar and consistent performance in real world machine learning competitions. He has formerly reached the rank of one of the top 100 data scientists in the world for his performances with Kaggle. + +### Team Code Repos + +No team code repos at the moment. Please see individual Github repos (below) + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/liangjh +- https://www.linkedin.com/in/johncandido/ + + +## Development Status :open_book: + +We are currently in research phase; Development / coding has not started on this project yet. + + +## Development Roadmap :nut_and_bolt: + + +### Overview + +- **Total Estimated Duration:** 8 months +- **Full-Time Equivalent (FTE):** 0.25 +- **Total Costs:** 26,000 USD + +### Milestone 1 — ETL of Relay Chain + Google BigQuery Integration + +- **Estimated duration:** 3-4 months +- **FTE:** 1 +- **Costs:** 8,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide code document as well as a basic tutorial / instructions in the form of a README that will explain how a user can set up and run the components of the ETL to extract data to queryable formats | +| **0c.** | Testing and Testing Guide | We will have unit tests to ensure functionality. There will be concise instructions on how to run the tests in the guide / readme | +| **0d.** | Docker | The main infrastructural components, including subquery and airflow, will each be shipped with their own Dockerfile | +| 0e. | Article | We will publish an article and how-to guide on Medium that will introduce our work and how to set up the basic Dot-ETL (audience: developers). We will also reference prior work done in the space. | +| 1. | Create SubQuery Managed Node | Utilize SubQuery framework to create a running indexer node on SubQuery's managed services, reading and indexing blocks on the Polkadot network (may involve a few iterations for testing) | +| 2. | Define schema to store underlying base data structures (blocks, extrinsics, events) | Finalize stored format | +| 3. | Define framework interfaces to allow for extensibility | Multiple underlying storage formats can be extended by community (not just limited to BigQuery) | +| 4. | Airflow workflows to read SubQuery updates | Read updates from SubQuery node via GraphQL queries and write to BigQuery on a periodic timeframe| +| 5. | Deploy Airflow to Google Composer | deploy to google composer as a test / note: we won't be maintaining this going forward | +| 6. | Detailed developer guides | Developer-centric guides on how to extend the framework to interoperate with additional database frameworks and cloud platforms. | + + +### Milestone 2 — ETLs for Selected Parachains, Extensions + +- **Estimated Duration:** 3-4 months +- **FTE:** 1 +- **Costs:** 18,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide detailed documentation for work done on this portion of the grant. | +| **0c.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0d. | Article | We will publish a follow-up (part 2) article on Medium describing the extensions to the original work | +| 1. | From base tables, extend to parsing 1-2 pallets | With milestone 1 completed and tables create for the core data structures (blocks, extrinsics, events), we can further process those base tables to produce more detailed tables for particular pallets | +| 2. | Framework / methodology to extend to additional pallets | Create a configurable framework that will allow a more imperative approach to defining more detailed ETLs that can be extended to parsing and creating tables on specific pallets | +| 3. | Detailed developer guide | Detailed developer guide on using and extending the framework above - goal is to allow developers to utilize the framework to define more sophisticated ETL steps on top of the base tables, all in python (+ orchestrated by airflow). | + +## Future Plans + +Our vision is to provide the framework which will power the go-to queryable data source for Substrate (polkadot / kusama) transactions - both for the main relay chain as well as for the respective parachains. Users of Dot-ETL can either query the public Google BigQuery database directly or create their own index node for any purpose. We expect the community to devise new use cases and applications for the underlying data. + +We intend to partner with / reach out to the following entities on the sponsorship / maintainance of the cloud-based query and storage formats (i.e. Google BigQuery): +- Polkadot and Web3 Foundation - +- Google Cloud Team - +- Blockchain-ETL (related to Google Cloud Team) + +We also intend to seek integration for this data within the blockchain industry through potential oracle partnerships with protocols like Chainlink. + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Web3 Foundation Website / Medium / Twitter / Element / Announcement by another team / personal recommendation / etc. + +By recommendation from someone who was already familiar with the Polkadot / Substrate / Kusama projects, as well as the Web3 Foundation's grants program. From 09049ec57deece3751e1fb57852f0a4b25bf5c33 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 21 Jun 2023 21:03:48 +0200 Subject: [PATCH 496/578] Update index.md Add Dot-ETL Project --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 6a2b17bf96a..0eb0582c853 100644 --- a/applications/index.md +++ b/applications/index.md @@ -76,6 +76,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Colorful Notion](https://github.com/colorfulnotion) | [Deep Account Analytics in Three Tiers for the Polkadot Data Alliance](DeepAccountAnalytics-PolkadotDataAlliance.md)| [GitHub](https://github.com/colorfulnotion/) | ☐ | ☐ | ☐ | | [Dastanbek Samatov](https://dastansam.github.io/) | [ISO-8553 PoC implementation](ISO-8583-implementation.md)| [GitHub](https://github.com/dastanbeksamatov) | ☐ | ☐ | ☐ | | [Eiger](https://www.eiger.co/) | [Substrate Move System Pallet, pt. 1](Substrate_Move_System_Pallet_1.md)| [GitHub](https://github.com/eigerco) | ☐ | ☐ | ☐ | +| [Davanti](https://github.com/liangjh) | [Dot-ETL Project](dot_etl.md)| [GitHub](https://github.com/liangjh) | ☐ | ☐ | ☐ | [🔝](#2023) From 6013b58897fb32b689e88a7baae8fbf005e9487b Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Thu, 22 Jun 2023 01:15:52 -0400 Subject: [PATCH 497/578] Update index.md (#1816) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 0eb0582c853..7079f8a1a48 100644 --- a/applications/index.md +++ b/applications/index.md @@ -174,7 +174,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Blaize.tech](https://blaize.tech/) | [Unified deployment for the collator node](unified_collator_node_deployment.md) | [GitHub](https://github.com/babebort-blaize) | ☐ | ☒ | ☒ | | [Odyssey B.V.](https://odyssey.org/) | [Momentum, an open source, metaverse for digital societies](odyssey_momentum.md) | [GitHub](https://github.com/momentum-xyz) | ☐ | ☐ | ☐ | | [Bela Supernova](https://bsn.si/) | [Rubeus Keeper Stage 2](Rubeus_keeper_st2.md) | [GitHub](https://github.com/bsn-si) | ☐ | ☒ | ☒ | -| [Coong Team](https://coong.xyz/) | [Coong Wallet](coong_wallet.md) | [GitHub](https://github.com/CoongCrafts) | ☐ | ☒ | ☐ | +| [Coong Team](https://coong.xyz/) | [Coong Wallet](coong_wallet.md) | [GitHub](https://github.com/CoongCrafts) | ☐ | ☒ | ☒ | | OCamlMyCaml | [PrivaDEX: Cross-Chain DEX Aggregator MVP](PrivaDEX_aggregator.md) | [GitHub](https://github.com/kapilsinha/privadex) | ☐ | ☒ | ☒ | | [Aband-Network](https://a.band/) | [Substrate Parachain PoS Template](substrate-parachain-PoS-template.md) | [GitHub](https://github.com/Aband-Network/substrate-parachain-PoS-template) | ☐ | ☒ | ☒ | | [MangoBOX labs](https://www.mangobox.xyz/) | [MangoSale Protocol](MangoSale_Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☒ | ☐ | From e6ccb316587d3436d36851213f92c44c2f2f56a8 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Thu, 22 Jun 2023 14:53:31 -0400 Subject: [PATCH 498/578] Cancel Crowdloans-FET.md (#1819) --- applications/Crowdloans-FET.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/Crowdloans-FET.md b/applications/Crowdloans-FET.md index a679a3760b1..539070101ab 100644 --- a/applications/Crowdloans-FET.md +++ b/applications/Crowdloans-FET.md @@ -3,6 +3,7 @@ - **Team Name:** Mutai Solutions - **Payment Address:** 0xE27F2E8321Fb4c32525a4ED86d2902dbA63491E4 Ethereum (USDT) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 +- **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/1280#issuecomment-1583327825) ## Project Overview :page_facing_up: From 8efbcfac14fee070308b8fa656b0f79a48c9e2e9 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Fri, 23 Jun 2023 01:55:34 -0400 Subject: [PATCH 499/578] Update pallet-drand-client.md (#1820) --- applications/pallet-drand-client.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/pallet-drand-client.md b/applications/pallet-drand-client.md index 25df3df9a03..8f33c631b14 100644 --- a/applications/pallet-drand-client.md +++ b/applications/pallet-drand-client.md @@ -3,6 +3,7 @@ - **Team Name:** The Bacon Beacon - **Payment Address:** USDC 0x1C9e0bcA759e5Ec09246f4795310789b12F65a59 - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 +- **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/1271#issuecomment-1583321519) ## Project Overview :page_facing_up: From d78551369e29760609cd07727c52b5f86004510a Mon Sep 17 00:00:00 2001 From: Xavier Lau Date: Mon, 26 Jun 2023 21:21:19 +0800 Subject: [PATCH 500/578] Amend Slothunter milestone deliverables (#1822) Signed-off-by: Xavier Lau --- applications/slothunter.md | 78 +++++++++++++++++++------------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/applications/slothunter.md b/applications/slothunter.md index e1fbe510309..ff9ebc9a726 100644 --- a/applications/slothunter.md +++ b/applications/slothunter.md @@ -22,45 +22,44 @@ And this also could help teams/users to bid/contribute automatically. ### Details(spec) -Slothunter will be implemented in Rust, which means it will be efficient and stable while running as a system service. +Slothunter will be implemented in Rust, ensuring efficiency and stability when running as a system service. -This grant contains 7 parts. +This grant comprises 7 parts: 1. Monitor the auction state. - 1. This program will run as a system service. + 1. The program will run as a system service. 2. It will fetch and cache the chain state periodically. 2. Calculate the current winner. - 1. Base on previous data, calculate the current auction winner. + 1. Based on the latest on-chain data, the current auction winner will be calculated. 3. Email and webhook notifications. - 1. It could notify the users: - 1. New auction started. - 2. Insufficient fund for bidding/contributing. - 3. Stop bidding/contributing and reason. - 4. New winner. - 5. Auction ended. - 2. The email and webhook addresses are configurable. - 3. The notification will be logged in the terminal by default. - 4. The email/webhook notification can be enabled or disabled by user. e.g. Some users think the email is annoying. - 5. All the notification content will be present in json style. - 6. Webhook notification can be integrated to Slack, Telegram, etc. e.g. the telegram bot will provide a listen address and Slothunter will push the notification to the bot periodically. + 1. The notifications will inform users about: + 1. New auctions starting. + 2. New bids/contributions. + 3. Stopping bids/contributions and the reasons. + 4. Current block winners. + 5. Auction endings. + 2. Email and webhook addresses are configurable. + 3. Notifications will be logged in the terminal by default. + 4. Users can enable or disable email/webhook notifications. e.g., Some users may find emails annoying. + 5. All notification content will be presented in JSON format. + 6. Webhook notifications can be integrated with Slack, Telegram, etc., e.g., a Telegram bot will provide a listening address, and Slothunter will push notifications to the bot periodically. 4. Auto bidding/contributing. - 1. Auto bid/contribute if there is new winner. And the bot will stop if the new winner's price is greater than the max acceptable value in the configuration file. - 2. Able to use regular account to bid/contribute. - 3. Able to use proxy account to bid/contribute. -5. Customize bidding/contributing strategy, including: - 1. Set max acceptable value. - 2. Set bidding/contributing frequency every `x` blocks. + 1. The bot will auto bid/contribute when there's a new winner and stop if the new winner's price exceeds the maximum acceptable value in the configuration file. + 2. Proxy accounts can be used for bidding/contributing. +5. Customize bidding/contributing strategies, including: + 1. Setting a maximum acceptable value. + 2. Setting bidding/contributing increments. 6. Provide a config.toml to configure: 1. Relaychain. 2. Bidding/contributing account. - 3. Bidding/contributing amount, target and max acceptable price. - 4. Keep bidding/contributing every `x` blocks. - 5. Notification mailbox. - 6. Webhook URI. -7. A Telegram bot, this should be easily deployed on any ubuntu:20.04+ server. + 3. Bidding/contributing target, amount, and maximum acceptable price. + 4. Notification email sender and receivers. + 5. Notification webhooks. +7. A Telegram bot that can be easily deployed on any Ubuntu 20.04+ server. + +Teams/users can start the bot before the auction, and everything should proceed as expected. +Teams/users can deploy the Telegram bot and receive the latest auction status in a group. -Teams/users could start the bot before the auction. And all the things should go as expected. -Teams/users could deploy the telegram bot and get latest auction status in group. ## Team :busts_in_silhouette: @@ -117,16 +116,16 @@ If they contain no activity, references to projects hosted elsewhere or live are - **FTE:** 1 - **Costs:** 10,000 USD -| Number | Deliverable | Specification | -| -----: | -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| 0a. | License | GPLv3 | -| 0b. | Documentation | There will be a guide to tell people how to use this. | -| 0c. | Testing guide | There will be a docker file and a guide to tell the auditor how to run the tests. It will guide you how to setup an auction and do the tests. | -| 1. | Auction winner calculator | Based on the 0c., run the binary, you should see the current winner from the terminal log. | -| 2. | Notification component | Based on the 0c., run the binary, you should receive these notification correctly. | -| 3. | Auto bidding/contributing component | Based on the 0c., run the binary, you should see you are bidding/contributing your parathread from the Polkadot Apps. | -| 4. | Bidding/contributing configuration component | Based on the 3., you can customize your bidding/contributing strategy in a toml file, you should see your bidding/contributing behavior works the same as the strategy defined. | -| 5. | Releases | Linux, macOS, Windows prebuilt binaries, and crates.io release. | +| Number | Deliverable | Specification | +| -----: | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 0a. | License | GPLv3 | +| 0b. | Documentation | There will be a guide to tell people how to use this. | +| 0c. | Testing guide | There will be a docker file and a guide to tell the auditor how to run the tests. It will guide you how to setup an auction and do the tests. | +| 1. | Auction winner calculator | Based on the 0c., run the binary, you should see the current winner from the terminal log. | +| 2. | Notification component | Based on the 0c., run the binary, you should receive these notification correctly. | +| 3. | Auto bidding/contributing component | Based on the 0c., run the binary, you should see you are bidding/contributing your parathread from the Polkadot Apps. | +| 4. | Slothunter configuration component | Based on the 3., you can customize your bidding/contributing strategy in a toml file, you should see your bidding/contributing behavior works the same as the strategy defined. | +| 5. | Releases | Linux, macOS, Windows prebuilt binaries, and crates.io release. | ### Milestone 2 Slothunter notification Slack/Telegram bot setup guide @@ -139,7 +138,8 @@ If they contain no activity, references to projects hosted elsewhere or live are | 0a. | License | GPLv3 | | 0b. | Documentation | There will be a guide to tell people how to use this. | | 0c. | Testing guide | There will be a guide to tell the auditor how to run the tests. | -| 1. | Workshop repository | Follow the tutorial in this repository to setup the bot, and you should see the notification appear in Slack and Telegram. | +| 1. | Telegram bot. | A telegram bot program to receive the auction notification and easy to deploy on any Ubuntu 20.04+ server. | +| 2. | Workshop repository | Follow the tutorial in this repository to setup the bot, and you should see the notification appear in Slack and Telegram. | ## Future Plans From 2560d8c3f2ee1e9882423296eb898b479a4bcc3c Mon Sep 17 00:00:00 2001 From: MeerKatDev Date: Mon, 26 Jun 2023 17:46:53 +0200 Subject: [PATCH 501/578] changing starting date for substrate move pallet part 1 (#1823) --- applications/Substrate_Move_System_Pallet_1.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/Substrate_Move_System_Pallet_1.md b/applications/Substrate_Move_System_Pallet_1.md index 05cd4519156..e34c007b033 100644 --- a/applications/Substrate_Move_System_Pallet_1.md +++ b/applications/Substrate_Move_System_Pallet_1.md @@ -145,6 +145,7 @@ We have not yet started our own development, we are still in the research phase. - **Total Estimated Duration:** 1 month - **Full-Time Equivalent (FTE):** 2 FTE - **Total Costs:** 48 000 USD +- **Starting Date:** 10/07/23 ### **In-Depth Exploration and Assessment of MoveVM and Substrate Integration** From 9292fca1edbc32b04b96b4c44d68c3e95529395b Mon Sep 17 00:00:00 2001 From: Dusan Morhac <55763425+dudo50@users.noreply.github.com> Date: Tue, 27 Jun 2023 08:12:10 +0200 Subject: [PATCH 502/578] LightSpell: XCM API (#1817) * Create LightSpell-proposal.md * Update LightSpell-proposal.md --- applications/LightSpell-proposal.md | 271 ++++++++++++++++++++++++++++ 1 file changed, 271 insertions(+) create mode 100644 applications/LightSpell-proposal.md diff --git a/applications/LightSpell-proposal.md b/applications/LightSpell-proposal.md new file mode 100644 index 00000000000..eaaf202ad4b --- /dev/null +++ b/applications/LightSpell-proposal.md @@ -0,0 +1,271 @@ +# LightSpell XCM API by ParaSpell✨ + +- **Team Name:** ParaSpell✨ +- **Payment Address:** 0xB7d45Ef044fD9342e4c03e28D9e9bddA2d4Fe3e1 (USDC) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 🐣 + + +## Project Overview :page_facing_up: + +Previously completed grants: +- [Phase 1](https://github.com/w3f/Grants-Program/pull/1118) +- [Phase 2](https://github.com/w3f/Grants-Program/pull/1245) +- [Phase 3](https://github.com/w3f/Grants-Program/pull/1589) + +What is ParaSpell: +ParaSpell is an XCM & XCMP Developer tool meant to ease the integration of cross-chain functionality into dApps. As we have learnt by now, cross-chain experience between Parachains can be very diverse. ParaSpell means to unify this experience by doing all the research for developers. We have wrapped all XCM pallets from compatible nodes into simple patterns from which it is easy to create XCM calls. As an example, we provide the image below. + + +![img1](https://user-images.githubusercontent.com/55763425/218987451-2bfc9526-8f2b-4477-8c42-8c70cbcb6ec4.jpg) + +In this image, we can see, that ParaSpell saves much time for developers. Just one call can contain multiple lines of JSON which would otherwise have to be integrated manually by the developer. ParaSpell does it in marginally fewer lines and hides the complex logic of building messages which ensures, that messages are constructed correctly. This call in the end results in the following lengthy extrinsic: + +![img2](https://user-images.githubusercontent.com/55763425/218987583-f5fb10b2-2e0c-4f36-b01c-0d610deab1c6.jpg) + +The following extrinsic can be subscribed into and we can check for its events on the front end. ParaSpell provides the front end for testing XCM transactions and XCM called [UI-V2](https://github.com/paraspell/ui-v2). This UI is also deployed on Netlify so users only have to run the local network to start testing. UI also provides the ability to open or close HRMP channels or test out XYK pool functionality that was implemented in collaboration with the HydraDX team. In the picture below we provide an overview of the UI. +Screenshot 2023-02-15 at 10 36 01 + + +### Overview 🎨 + +ParaSpell is split into three main repositories at the moment and one new is being added soon: + +- [XCM API - TBA](): Meant to provide much faster response than integrating XCM SDK as well as being easier to integrate than XCM-SDK (No install needed) +- [XCM SDK](https://github.com/paraspell/xcm-sdk): Meant to unify cross-chain experience on Substrate. Can serve any dApp developer that wishes to integrate XCM or other pallets support for they app. +- [UI-V2](https://github.com/paraspell/ui-v2): Allows for launching local network and testing XCM or HRMP channels across that local network +- [Docs](https://github.com/paraspell/docs): Extensive documentary for overview of ParaSpell, guide for SDK and UI + + + +#### SDK +This SDK currently support 46 compatible XCM nodes. They can transfer XCM messages in three different scenarios. +- Parachain to Parachain - HRMP +- Parachain to Relay chain - UMP +- Relay chain to Parachain - DMP + +SDK contains many useful features that allow for easier inntegration: +- Builder pattern implementation, easy to construct XCM calls, much more used recently for simplicity of implementation. + +- Suggestions, SDK contains TYPES that help to guide developer through integration. For example he get's compatible nodes suggested. +![1_59xApnboumYhzuRHKx60TA](https://user-images.githubusercontent.com/55763425/219314223-79c31085-2e90-4dc7-ad51-da96de730ea0.png) + +- Console printouts, SDK allows for printing into console so developer can alway check if call they constructed is correct. +![1_2KT6Z1rxxprmE03XWYY-HA](https://user-images.githubusercontent.com/55763425/219314235-1da52511-b4e8-4a41-bdaa-04fa6a9e8a48.png) + +- Exporting registered assets for each compatible node in many useful functions + +- Exporting supported XCM pallets for each compatible node in useful functions + +And more.. + +#### UI-V2 +UI is used as testing tool for Parachain developers, they can simply add their node into network and test it with HRMP channels as well as XCM transfers. UI also allows dApp developers to test and learn XCM before integrating it from our SDK. + +UI is made to be as simple to use as possible. It is now also deployed on netlify so developers only have to start local network from configuration file provided by ParaSpell which starts network of Relay chain and 3 different Parachains (Bifrost,Karura & Pichiu) + +Below are some examples of UI with running network: +Screenshot 2023-02-16 at 13 31 06 + +Above we can see open/ close channel screen. It is simple to work with and intuitive. Nodes are pulled from relay chain by query so if network is not running you cannot see any nodes. + +Screenshot 2023-02-16 at 13 31 20 + +Above we can observe, that UI contains simple Wallet login with test accounts. + +Screenshot 2023-02-16 at 13 31 33 + +Above we can see XCM screen which is also very simple to navigate and nodes are pulled from relay chain by query. + +#### Docs +Docs contain important information regarding SDK, UI and other repositories that are in ParaSpell or ParaSpell contributed to / collaborated with. +The key areas are: +- Introduction +Screenshot 2023-02-16 at 13 44 58 +- Guide on importing SDK +Screenshot 2023-02-16 at 13 45 09 + +- Guide on launching local network and UI +Screenshot 2023-02-16 at 13 48 43 + + +- Guide on executing operations in UI +Screenshot 2023-02-16 at 13 45 24 + +- Guide on implementing SDK +Screenshot 2023-02-16 at 13 46 01 + + +- Important links +Screenshot 2023-02-16 at 13 45 30 + +#### Architecture 🏗️ +##### Old +The old design had SDK integrated into dApp: + +![taskFlow](https://user-images.githubusercontent.com/55763425/198412240-e031d877-c5d8-4952-9048-2e1256ba4469.svg) + +UI is purposely designed to be as simple as possible. This guarantees, that all tasks can be done quickly and without extended searching. All necessary screens also feature notifications which will as a milestone explain be callback reactive. The loading screen is only present on the first application & network startup, once accessing the same screen after the application was loaded it will be skipped automatically. The screen serves to register necessary assets in parachain nodes. This is only required to be run once per network startup. + +SDK currently handles transfers to 46 compatible Parachains and also can transfer to both Relay chains. + +##### New +In the new design with XCM API, there is no need for integrating XCM SDK. There is only a need to send the request. No more installing packages. Works way faster and offloads dApp from heavy computing to generate calls. +![taskFlowNew](https://user-images.githubusercontent.com/55763425/247828546-b16e1a8b-c16d-462b-856a-2546fa1dee00.png) + +#### Technology Stack 💻️ +- Vue.js +- Node.js +- Typescript +- Polkadot api libraries +- Make +- Parachain launch +- Substrate compatible nodes (For now Rococo, Pichiu(Kylin network), Bifrost & Acala) +- Nest.js + +### Ecosystem Fit 🌳 + +#### XCM API +As mentioned in a tweet from Alice&Bob, we need Chain APIs to put XCM on steroids - [link](https://twitter.com/alice_und_bob/status/1664564442456109057?cxt=HHwWgsC9pdGi3JkuAAAA). We aim to achieve this by utilizing the XCM-SDK technology we built previously. Using XCM API compared to implementing XCM SDK into dApp can bring three main benefits: +- Calls are generated much quicker +- API is much simpler to implement than SDK +- No need to install anything (Comes with the benefit of saving space and without issues with dependencies) + +Why we chose NestJS for XCM API: +By choosing Nest.js as our backend HTTP REST API framework, we can harness the power of Node.js, leverage TypeScript's benefits, ensure maintainability through its modular architecture, and take advantage of its extensive community support. This will enable us to build a reliable, scalable, and well-documented XCM API that seamlessly integrates with the existing XCM SDK. In addition, Nest.js offers a powerful code generation feature that allows us to quickly scaffold boilerplate code for controllers, services, modules, and more. By utilizing the Nest.js code generator, we can significantly reduce development time and effort, ensuring rapid prototyping and efficient implementation of the XCM API endpoints. Compared to other TypeScript frameworks, Nest.js stands out with its modular architecture, seamless integration with Node.js, and strong community support, offering developers a scalable and maintainable solution. + +#### XCM SDK + +There are not many XCM & XCMP-related development tools released currently. We aim to aid this mostly empty space and help developers to understand XCM & XCMP as the current state-of-the-art technology by providing documentation and a user interface in which they can do development tasks more easily and faster. + +In Polkadot and Kusama ecosystems, there are few XCM-related tools in development. For example, Moonbeam XCM SDK was released only recently. We bring a comparison table that compares our ParaSpell SDK to Moonbeam SDK +| Features | ParaSpell XCM SDK | Moonbeam XCM SDK | +| -----: | ----------- | ------------- | +| Number of packages user has to install | User needs to install only 1 package | User needs to install 2 packages | +| Support for Parachains | Already integrated for every XCM compatible pallet | Every new node has to be added manually by user | +| Build pattern | Integrated as intuitive as possible | Integrated, not as intuitive to implement however | +| Support for asset pallet operations | Integrated | Not integrated | +| Support for HRMP pallet operations | Integrated users can open & close HRMP channels on their local chain (Useful feature for devs) | Not integrated | +| Support for checking details that do not change | Integrated & also be covered with some error handling eg (too little amount being sent, not sufficient for XCM transfer) | Integrated in the form of a small "map" for different Tokens & Node IDs | +| Support for Axelar GMP (General message passing) that will connect Substrate with EVM chains | Planned to be implemented in the future | No data | + + + +Unlike the already mentioned "Moonbeam XCM" platform ParaSpell provides UI enhancement that uses our XCM SDK and users can try/learn technology from it. ParaSpell also includes support for 46 Substrate Parachains that have XCM pallets compared to Moonbeam XCM to which users have to implement compatible nodes manually. ParaSpell SDK only needs one package compared to Moonbeam XCM which has a total of two. Compared to Moonbeam XCM which contains only XCM calls ParaSpell also contains calls that can open or close HRMP channels. We also include support for Parachains that have a template pallet for XCM called polkadotXCM this pallet is a little harder to work with than xTokens, even more for inexperienced developers. On top of that, this proposal aims to improve ParaSpell even further with introduction of LightSpell XCM API. We have not yet seen any XCM-API proposals or project and we aim to solve this gap as first team. + +Another comparison worth mentioning is UI vs Morph which is also an enhancement of the XCM UI Transfer tool +| Features | ParaSpell XCM UI | Morph | +| -----: | ----------- | ------------- | +| Focus: | Developers & users that wish to try XCM locally first | Users | +| Wiki: | Comprehensive Wiki explaining XCM, how to add assets to UI & Nodes and more implemented | Not implemented | +| Support for transfers: | In three different scenarios | In two scenarios | +| Support for local network configuration: | Fully implemented example network configuration that uses maintained Parachain-launch library | Not implemented | +| Support for HRMP channel opening/closing: | Fully implemented | Not implemented | + +Unlike the already mentioned "Morph" platform ParaSpell focuses more on developers. ParaSpell features complete network install and startup configuration in one single command. This automatization ensures, that developers do not need to do any extra tasks when they wish to run development nodes locally. ParaSpell also allows developers to open and close HRMP channels between Parachains they connected. Like "Morph", ParaSpell can also transfer fungible tokens in three scenarios. From Parachains to Relay chain, from Relay chain to Parachains & from Parachains to Parachains. + +We are currently in talks with several Parachain teams that like the idea of unified SDK for XCM transfers as much as we do. SDK that unifies XCM can be very helpful for the entire ecosystem in our opinion. With the introduction of XCM API, this improves even further. + +Our target audiences are Web3 projects and starting/current blockchain developers. +## Team :busts_in_silhouette: + +### Team members + +Dušan Morháč - Student, project Founder & Core Dev. Faculty of Informatics and Information Technologies STU in Bratislava + +Michael Absolon - Student, XCM SDK & XCM API Core Dev. Faculty of Informatics and Information Technologies STU in Bratislava + +### Contact + +- **Contact Name:** Dušan Morháč +- **Contact Email:** dudo.morhac@gmail.com + + +### Legal Structure + +- **Registered Address:** TBA later (Switching to the company) +- **Registered Legal Entity:** TBA later (Switching to the company) + +### Team's experience +- Dušan is the founder & researcher behind this project and he has successfully presented it at the international conference ICECET2022 held in Prague from which there is an article regarding XCMP & ParaSpell project. It is published by IEEE [link](https://ieeexplore.ieee.org/document/9872938). He also successfully presented it at ICBC 2023 conference held in Dubai. Dušan also studies Blockchain technology and had a bachelor's thesis about cross-blockchain sharing from which this idea was born. Dušan continues research on this idea in his Master's thesis. He is actively working on ParaSpell https://github.com/paraspell full-time & has also participated in other ecosystem projects. Recently he attended Polkadot Blockchain Academy 2023 in Buenos Aires which gave him a lot of insight into the ecosystem and he also graduated from the academy successfully. Here is NFT that was minted as a certificate by Parity - [link](https://singular.app/collectibles/statemine/20/12) + + +- Michael is a dedicated TypeScript developer with 2 years of full-time experience in the Web2 sphere. Michael's expertise in this field was further solidified in 2019 when he won first place in the Junior Internet Web competition for his online multiplayer game, which was written in JavaScript. In addition to his professional background, Michael also achieved a bachelor's degree in the same computer science University as Dušan and he is currently pursuing a master's degree which focuses on Blockchain. His passion for technology led him to explore Blockchain technology in his free time. He was recently offered the opportunity to work on ParaSpell XCM SDK with Dušan and he delivered many of the key features SDK now offers. + +### Team Code Repos + +- https://github.com/paraspell/xcm-api +- https://github.com/paraspell/xcm-sdk +- https://github.com/paraspell/ui-v2 +- https://github.com/paraspell/docs + +### Team Github Profiles 🧑‍🎓 + +- https://github.com/dudo50 Dušan Morháč +- https://github.com/michaeldev5 Michael Absolon + +### Team LinkedIn Profiles 🧑‍🎓 + +- https://www.linkedin.com/in/dudo50/ +- https://www.linkedin.com/in/michael--absolon/ + +## Development Status :open_book: + +The new [XCM-API](https://github.com/paraspell/xcm-api) is in development and we are currently searching for the fastest server with the lowest cost requirements. + +[SDK](https://github.com/paraspell/xcm-sdk) is currently released into the main and is in a version that is fully operable. There are still some tweaks we plan to add and make, they are not part of this grant however. [UI-V2](https://github.com/paraspell/ui-v2) currently runs on state-of-the-art technology version VueJS 3 and the newest version of Nuxt. It deprecated V1 and introduced a much smoother interface and modules brought from the sub-scaffold template ParaSpell contributed to. [Docs](https://github.com/paraspell/docs) are currently in ready state but there is still some tweaking to do. + +**Sidenote**: We have recently developed an article about Polkadot & Paraspell called Enhancing XCMP Interoperability Across Polkadot Paraverse and it was accepted to the International IEEE BCCA 2023 conference held in Kuwait. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 2 months +- **Full-Time Equivalent (FTE):** 1 FTE +- **Total Costs:** 10 000 USD + +### Milestone 1 - Create LightSpell⚡️: XCM-API + +- **Estimated duration:** 2 months ⌛️ +- **FTE:** 1 +- **Costs:** 10 000 USD 💰️ + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | MIT | +| 0b. | Documentation | We will provide both readme.md and official docs documentation | +| 0c. | Testing and Testing Guide | Testing guide will be mentioned in official docs & core unit tests will be provided | +| 0e. | Create Medium article about development of LightSpell | Add article covering new features & improvements brought with LightSpell | +| 1.a | Integrate API for XCM functionality | Use Nest.js to integrate core XCM SDK functionality to send XCM messages | +| 1.b | Integrate API for Asset functionality | Use Nest.js to integrate core XCM SDK functionality to do Asset operations | +| 1.c | Integrate API for XCM Pallets functionality | Use Nest.js to integrate core XCM SDK functionality to query XCM Pallets of different Parachains | +| 1.d | Integrate API for HRMP functionality | Use Nest.js to integrate core XCM SDK functionality to open/close HRMP channels | +| 2. | Integrate token authentification | Integrate token authentification with limited requests to remove the possibility of DDOS (Bigger request limit can be requested for free via email provided in docs)| +| 3.a | Add core Integration tests | Add core Integration tests to ensure everything is working together as expected | +| 3.b | Add core Endpoint (e2e) tests | Add core endpoint tests to let the user try to use API without writing any code and also to demonstrate if API works | +| 4. | Integrate LightSpell into ParaSpell docs | Add comprehensive guide for every feature that API will offer [link](https://paraspell.github.io/docs/api/TBA.html) | + +## Future Plans 🔭 + +Once everything will be implemented according to the proposed plan application will still be under constant improvement as technology will progress. For example, once the XCMP protocol will be released we wish to deprecate the HRMP protocol we currently use for channels. + +The project goal is that XCM-SDK & XCM-API will serve dApp developers and UI will teach new substrate developers to use XCM and will serve existing substrate developers to test their freshly baked Parachains. + +The newly added XCM-API will simplify XCM-SDK integration and will be much faster than integrating XCM-SDK into dAPP directly. Both repositories will remain dependent on each other. Further maintenance funding for servers and keeping XCM API up to date will be requested from Polkadot treasury. + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Personal recommendation + +##### Project achievements in chronological order ⌛️ + +- 📙 Article about the project created & presented at international conference ICECET2022 held in Prague (450 out of 1000+ articles accepted) Link to IEEE publication - [IEEE Sharing Fungible Assets Across Polkadot Paraverse](https://ieeexplore.ieee.org/document/9872938/) +- 🥈 2nd Prize, Build an XCM-related Tool for Moonbeam - Polkadot North America Hackathon [Hackathon entry](https://devpost.com/software/polkachange-cross-blockchain-transfer-tool) +- 🥉 3rd Prize, EVM+ DApp for aUSD yield - Polkadot North America Hackathon [Hackathon entry](https://devpost.com/software/polkachange-cross-blockchain-transfer-tool) +- 🎈 Web 3 Foundation base grant [Application](https://github.com/w3f/Grants-Program/pull/1118), [Delivery](https://github.com/w3f/Grant-Milestone-Delivery/pull/584) +- 🐍 [Basilisk](https://bsx.fi/) treasury proposal 2 / 2 Approved [link](https://basilisk.subsquare.io/treasury/proposal/2), [link2](https://basilisk.subsquare.io/treasury/proposal/4) +- 🔭 Web 3 Foundation phase 2 grant Milestone 3 / 3 delivered [Application](https://github.com/w3f/Grants-Program/pull/1245), [Delivery1](https://github.com/w3f/Grant-Milestone-Delivery/pull/670), [Delivery 2 & 3](https://github.com/w3f/Grant-Milestone-Delivery/pull/715) +- 📕 Article about Polkadot & ParaSpell created & accepted to be presented at international cross-chain conference IEEE ICBC 2023 held in Dubai [links TBA] +- 💼 Kusama Treasury Funding proposal number 1 - Upgrade SDK, [Application](https://kusama.subsquare.io/referenda/referendum/123s), [Delivery](https://docs.google.com/document/d/1lMY_8EtQ41IX7Zn9VIMAiG1k3oLYN0h_lVj8dWDwZ_k/edit?usp=sharing) +- 🏗️ Web 3 Foundation phase 3 grant (Make SDK better) Milestone 1 / 1 delivered [Application](https://github.com/w3f/Grants-Program/pull/1589), [Delivery](https://github.com/w3f/Grant-Milestone-Delivery/pull/836) +- 📘 Article about Polkadot & ParaSpell created & accepted to be presented at international cross-chain conference IEEE BCCA 2023 held in Kuwait [links TBA] From 77a5cfdf7a448a0634dcb7c653463fe775fa0f86 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 27 Jun 2023 08:18:12 +0200 Subject: [PATCH 503/578] Update index.md ParaSpell --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 7079f8a1a48..72d2847d636 100644 --- a/applications/index.md +++ b/applications/index.md @@ -77,6 +77,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Dastanbek Samatov](https://dastansam.github.io/) | [ISO-8553 PoC implementation](ISO-8583-implementation.md)| [GitHub](https://github.com/dastanbeksamatov) | ☐ | ☐ | ☐ | | [Eiger](https://www.eiger.co/) | [Substrate Move System Pallet, pt. 1](Substrate_Move_System_Pallet_1.md)| [GitHub](https://github.com/eigerco) | ☐ | ☐ | ☐ | | [Davanti](https://github.com/liangjh) | [Dot-ETL Project](dot_etl.md)| [GitHub](https://github.com/liangjh) | ☐ | ☐ | ☐ | +| [ParaSpell](https://github.com/paraspell) | [LightSpell: XCM API](LightSpell-proposal.md)| [GitHub](https://github.com/paraspell) | ☐ | ☐ | ☐ | [🔝](#2023) From ebed58f49ba4680aee6b5e2537eec8fba08c89ed Mon Sep 17 00:00:00 2001 From: Noc2 Date: Tue, 27 Jun 2023 08:25:14 +0200 Subject: [PATCH 504/578] fix website --- applications/LightSpell-proposal.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/applications/LightSpell-proposal.md b/applications/LightSpell-proposal.md index eaaf202ad4b..0e3e7c25365 100644 --- a/applications/LightSpell-proposal.md +++ b/applications/LightSpell-proposal.md @@ -23,14 +23,14 @@ In this image, we can see, that ParaSpell saves much time for developers. Just o ![img2](https://user-images.githubusercontent.com/55763425/218987583-f5fb10b2-2e0c-4f36-b01c-0d610deab1c6.jpg) The following extrinsic can be subscribed into and we can check for its events on the front end. ParaSpell provides the front end for testing XCM transactions and XCM called [UI-V2](https://github.com/paraspell/ui-v2). This UI is also deployed on Netlify so users only have to run the local network to start testing. UI also provides the ability to open or close HRMP channels or test out XYK pool functionality that was implemented in collaboration with the HydraDX team. In the picture below we provide an overview of the UI. -Screenshot 2023-02-15 at 10 36 01 +Screenshot 2023-02-15 at 10 36 01 ### Overview 🎨 ParaSpell is split into three main repositories at the moment and one new is being added soon: -- [XCM API - TBA](): Meant to provide much faster response than integrating XCM SDK as well as being easier to integrate than XCM-SDK (No install needed) +- XCM API - TBA: Meant to provide much faster response than integrating XCM SDK as well as being easier to integrate than XCM-SDK (No install needed) - [XCM SDK](https://github.com/paraspell/xcm-sdk): Meant to unify cross-chain experience on Substrate. Can serve any dApp developer that wishes to integrate XCM or other pallets support for they app. - [UI-V2](https://github.com/paraspell/ui-v2): Allows for launching local network and testing XCM or HRMP channels across that local network - [Docs](https://github.com/paraspell/docs): Extensive documentary for overview of ParaSpell, guide for SDK and UI @@ -64,15 +64,15 @@ UI is used as testing tool for Parachain developers, they can simply add their n UI is made to be as simple to use as possible. It is now also deployed on netlify so developers only have to start local network from configuration file provided by ParaSpell which starts network of Relay chain and 3 different Parachains (Bifrost,Karura & Pichiu) Below are some examples of UI with running network: -Screenshot 2023-02-16 at 13 31 06 +Screenshot 2023-02-16 at 13 31 06 Above we can see open/ close channel screen. It is simple to work with and intuitive. Nodes are pulled from relay chain by query so if network is not running you cannot see any nodes. -Screenshot 2023-02-16 at 13 31 20 +Screenshot 2023-02-16 at 13 31 20 Above we can observe, that UI contains simple Wallet login with test accounts. -Screenshot 2023-02-16 at 13 31 33 +Screenshot 2023-02-16 at 13 31 33 Above we can see XCM screen which is also very simple to navigate and nodes are pulled from relay chain by query. @@ -80,23 +80,23 @@ Above we can see XCM screen which is also very simple to navigate and nodes are Docs contain important information regarding SDK, UI and other repositories that are in ParaSpell or ParaSpell contributed to / collaborated with. The key areas are: - Introduction -Screenshot 2023-02-16 at 13 44 58 +Screenshot 2023-02-16 at 13 44 58 - Guide on importing SDK -Screenshot 2023-02-16 at 13 45 09 +Screenshot 2023-02-16 at 13 45 09 - Guide on launching local network and UI -Screenshot 2023-02-16 at 13 48 43 +Screenshot 2023-02-16 at 13 48 43 - Guide on executing operations in UI -Screenshot 2023-02-16 at 13 45 24 +Screenshot 2023-02-16 at 13 45 24 - Guide on implementing SDK -Screenshot 2023-02-16 at 13 46 01 +Screenshot 2023-02-16 at 13 46 01 - Important links -Screenshot 2023-02-16 at 13 45 30 +Screenshot 2023-02-16 at 13 45 30 #### Architecture 🏗️ ##### Old @@ -187,7 +187,7 @@ Michael Absolon - Student, XCM SDK & XCM API Core Dev. Faculty of Informatics an ### Team's experience - Dušan is the founder & researcher behind this project and he has successfully presented it at the international conference ICECET2022 held in Prague from which there is an article regarding XCMP & ParaSpell project. It is published by IEEE [link](https://ieeexplore.ieee.org/document/9872938). He also successfully presented it at ICBC 2023 conference held in Dubai. Dušan also studies Blockchain technology and had a bachelor's thesis about cross-blockchain sharing from which this idea was born. Dušan continues research on this idea in his Master's thesis. He is actively working on ParaSpell https://github.com/paraspell full-time & has also participated in other ecosystem projects. Recently he attended Polkadot Blockchain Academy 2023 in Buenos Aires which gave him a lot of insight into the ecosystem and he also graduated from the academy successfully. Here is NFT that was minted as a certificate by Parity - [link](https://singular.app/collectibles/statemine/20/12) - + - Michael is a dedicated TypeScript developer with 2 years of full-time experience in the Web2 sphere. Michael's expertise in this field was further solidified in 2019 when he won first place in the Junior Internet Web competition for his online multiplayer game, which was written in JavaScript. In addition to his professional background, Michael also achieved a bachelor's degree in the same computer science University as Dušan and he is currently pursuing a master's degree which focuses on Blockchain. His passion for technology led him to explore Blockchain technology in his free time. He was recently offered the opportunity to work on ParaSpell XCM SDK with Dušan and he delivered many of the key features SDK now offers. From 999bef0739fc04b58b605dd77040ff46c7281b0e Mon Sep 17 00:00:00 2001 From: Noc2 Date: Tue, 27 Jun 2023 08:31:32 +0200 Subject: [PATCH 505/578] docusaurus update --- package.json | 4 +- yarn.lock | 366 +++++++++++++++++++++++++-------------------------- 2 files changed, 185 insertions(+), 185 deletions(-) diff --git a/package.json b/package.json index 19562c32556..bfb4c80ba38 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,8 @@ "write-heading-ids": "docusaurus write-heading-ids" }, "dependencies": { - "@docusaurus/core": "^2.2.0", - "@docusaurus/preset-classic": "^2.2.0", + "@docusaurus/core": "^2.4.1", + "@docusaurus/preset-classic": "^2.4.1", "@mdx-js/react": "^1.6.22", "@svgr/webpack": "^7.0.0", "clsx": "^1.1.1", diff --git a/yarn.lock b/yarn.lock index 08630702670..320ce4eab74 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1218,10 +1218,10 @@ "@docsearch/css" "3.3.3" algoliasearch "^4.0.0" -"@docusaurus/core@2.4.0", "@docusaurus/core@^2.2.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.4.0.tgz#a12c175cb2e5a7e4582e65876a50813f6168913d" - integrity sha512-J55/WEoIpRcLf3afO5POHPguVZosKmJEQWKBL+K7TAnfuE7i+Y0NPLlkKtnWCehagGsgTqClfQEexH/UT4kELA== +"@docusaurus/core@2.4.1", "@docusaurus/core@^2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.4.1.tgz#4b8ff5766131ce3fbccaad0b1daf2ad4dc76f62d" + integrity sha512-SNsY7PshK3Ri7vtsLXVeAJGS50nJN3RgF836zkyUfAD01Fq+sAk5EwWgLw+nnm5KVNGDu7PRR2kRGDsWvqpo0g== dependencies: "@babel/core" "^7.18.6" "@babel/generator" "^7.18.7" @@ -1233,13 +1233,13 @@ "@babel/runtime" "^7.18.6" "@babel/runtime-corejs3" "^7.18.6" "@babel/traverse" "^7.18.8" - "@docusaurus/cssnano-preset" "2.4.0" - "@docusaurus/logger" "2.4.0" - "@docusaurus/mdx-loader" "2.4.0" + "@docusaurus/cssnano-preset" "2.4.1" + "@docusaurus/logger" "2.4.1" + "@docusaurus/mdx-loader" "2.4.1" "@docusaurus/react-loadable" "5.5.2" - "@docusaurus/utils" "2.4.0" - "@docusaurus/utils-common" "2.4.0" - "@docusaurus/utils-validation" "2.4.0" + "@docusaurus/utils" "2.4.1" + "@docusaurus/utils-common" "2.4.1" + "@docusaurus/utils-validation" "2.4.1" "@slorber/static-site-generator-webpack-plugin" "^4.0.7" "@svgr/webpack" "^6.2.1" autoprefixer "^10.4.7" @@ -1295,33 +1295,33 @@ webpack-merge "^5.8.0" webpackbar "^5.0.2" -"@docusaurus/cssnano-preset@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.4.0.tgz#9213586358e0cce517f614af041eb7d184f8add6" - integrity sha512-RmdiA3IpsLgZGXRzqnmTbGv43W4OD44PCo+6Q/aYjEM2V57vKCVqNzuafE94jv0z/PjHoXUrjr69SaRymBKYYw== +"@docusaurus/cssnano-preset@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.4.1.tgz#eacadefb1e2e0f59df3467a0fe83e4ff79eed163" + integrity sha512-ka+vqXwtcW1NbXxWsh6yA1Ckii1klY9E53cJ4O9J09nkMBgrNX3iEFED1fWdv8wf4mJjvGi5RLZ2p9hJNjsLyQ== dependencies: cssnano-preset-advanced "^5.3.8" postcss "^8.4.14" postcss-sort-media-queries "^4.2.1" tslib "^2.4.0" -"@docusaurus/logger@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-2.4.0.tgz#393d91ad9ecdb9a8f80167dd6a34d4b45219b835" - integrity sha512-T8+qR4APN+MjcC9yL2Es+xPJ2923S9hpzDmMtdsOcUGLqpCGBbU1vp3AAqDwXtVgFkq+NsEk7sHdVsfLWR/AXw== +"@docusaurus/logger@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-2.4.1.tgz#4d2c0626b40752641f9fdd93ad9b5a7a0792f767" + integrity sha512-5h5ysIIWYIDHyTVd8BjheZmQZmEgWDR54aQ1BX9pjFfpyzFo5puKXKYrYJXbjEHGyVhEzmB9UXwbxGfaZhOjcg== dependencies: chalk "^4.1.2" tslib "^2.4.0" -"@docusaurus/mdx-loader@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.4.0.tgz#c6310342904af2f203e7df86a9df623f86840f2d" - integrity sha512-GWoH4izZKOmFoC+gbI2/y8deH/xKLvzz/T5BsEexBye8EHQlwsA7FMrVa48N063bJBH4FUOiRRXxk5rq9cC36g== +"@docusaurus/mdx-loader@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.4.1.tgz#6425075d7fc136dbfdc121349060cedd64118393" + integrity sha512-4KhUhEavteIAmbBj7LVFnrVYDiU51H5YWW1zY6SmBSte/YLhDutztLTBE0PQl1Grux1jzUJeaSvAzHpTn6JJDQ== dependencies: "@babel/parser" "^7.18.8" "@babel/traverse" "^7.18.8" - "@docusaurus/logger" "2.4.0" - "@docusaurus/utils" "2.4.0" + "@docusaurus/logger" "2.4.1" + "@docusaurus/utils" "2.4.1" "@mdx-js/mdx" "^1.6.22" escape-html "^1.0.3" file-loader "^6.2.0" @@ -1336,13 +1336,13 @@ url-loader "^4.1.1" webpack "^5.73.0" -"@docusaurus/module-type-aliases@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-2.4.0.tgz#6961605d20cd46f86163ed8c2d83d438b02b4028" - integrity sha512-YEQO2D3UXs72qCn8Cr+RlycSQXVGN9iEUyuHwTuK4/uL/HFomB2FHSU0vSDM23oLd+X/KibQ3Ez6nGjQLqXcHg== +"@docusaurus/module-type-aliases@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-2.4.1.tgz#38b3c2d2ae44bea6d57506eccd84280216f0171c" + integrity sha512-gLBuIFM8Dp2XOCWffUDSjtxY7jQgKvYujt7Mx5s4FCTfoL5dN1EVbnrn+O2Wvh8b0a77D57qoIDY7ghgmatR1A== dependencies: "@docusaurus/react-loadable" "5.5.2" - "@docusaurus/types" "2.4.0" + "@docusaurus/types" "2.4.1" "@types/history" "^4.7.11" "@types/react" "*" "@types/react-router-config" "*" @@ -1350,18 +1350,18 @@ react-helmet-async "*" react-loadable "npm:@docusaurus/react-loadable@5.5.2" -"@docusaurus/plugin-content-blog@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.4.0.tgz#50dbfbc7b51f152ae660385fd8b34076713374c3" - integrity sha512-YwkAkVUxtxoBAIj/MCb4ohN0SCtHBs4AS75jMhPpf67qf3j+U/4n33cELq7567hwyZ6fMz2GPJcVmctzlGGThQ== - dependencies: - "@docusaurus/core" "2.4.0" - "@docusaurus/logger" "2.4.0" - "@docusaurus/mdx-loader" "2.4.0" - "@docusaurus/types" "2.4.0" - "@docusaurus/utils" "2.4.0" - "@docusaurus/utils-common" "2.4.0" - "@docusaurus/utils-validation" "2.4.0" +"@docusaurus/plugin-content-blog@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.4.1.tgz#c705a8b1a36a34f181dcf43b7770532e4dcdc4a3" + integrity sha512-E2i7Knz5YIbE1XELI6RlTnZnGgS52cUO4BlCiCUCvQHbR+s1xeIWz4C6BtaVnlug0Ccz7nFSksfwDpVlkujg5Q== + dependencies: + "@docusaurus/core" "2.4.1" + "@docusaurus/logger" "2.4.1" + "@docusaurus/mdx-loader" "2.4.1" + "@docusaurus/types" "2.4.1" + "@docusaurus/utils" "2.4.1" + "@docusaurus/utils-common" "2.4.1" + "@docusaurus/utils-validation" "2.4.1" cheerio "^1.0.0-rc.12" feed "^4.2.2" fs-extra "^10.1.0" @@ -1372,18 +1372,18 @@ utility-types "^3.10.0" webpack "^5.73.0" -"@docusaurus/plugin-content-docs@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.4.0.tgz#36e235adf902325735b873b4f535205884363728" - integrity sha512-ic/Z/ZN5Rk/RQo+Io6rUGpToOtNbtPloMR2JcGwC1xT2riMu6zzfSwmBi9tHJgdXH6CB5jG+0dOZZO8QS5tmDg== - dependencies: - "@docusaurus/core" "2.4.0" - "@docusaurus/logger" "2.4.0" - "@docusaurus/mdx-loader" "2.4.0" - "@docusaurus/module-type-aliases" "2.4.0" - "@docusaurus/types" "2.4.0" - "@docusaurus/utils" "2.4.0" - "@docusaurus/utils-validation" "2.4.0" +"@docusaurus/plugin-content-docs@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.4.1.tgz#ed94d9721b5ce7a956fb01cc06c40d8eee8dfca7" + integrity sha512-Lo7lSIcpswa2Kv4HEeUcGYqaasMUQNpjTXpV0N8G6jXgZaQurqp7E8NGYeGbDXnb48czmHWbzDL4S3+BbK0VzA== + dependencies: + "@docusaurus/core" "2.4.1" + "@docusaurus/logger" "2.4.1" + "@docusaurus/mdx-loader" "2.4.1" + "@docusaurus/module-type-aliases" "2.4.1" + "@docusaurus/types" "2.4.1" + "@docusaurus/utils" "2.4.1" + "@docusaurus/utils-validation" "2.4.1" "@types/react-router-config" "^5.0.6" combine-promises "^1.1.0" fs-extra "^10.1.0" @@ -1394,95 +1394,95 @@ utility-types "^3.10.0" webpack "^5.73.0" -"@docusaurus/plugin-content-pages@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.4.0.tgz#6169909a486e1eae0ddffff0b1717ce4332db4d4" - integrity sha512-Pk2pOeOxk8MeU3mrTU0XLIgP9NZixbdcJmJ7RUFrZp1Aj42nd0RhIT14BGvXXyqb8yTQlk4DmYGAzqOfBsFyGw== - dependencies: - "@docusaurus/core" "2.4.0" - "@docusaurus/mdx-loader" "2.4.0" - "@docusaurus/types" "2.4.0" - "@docusaurus/utils" "2.4.0" - "@docusaurus/utils-validation" "2.4.0" +"@docusaurus/plugin-content-pages@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.4.1.tgz#c534f7e49967699a45bbe67050d1605ebbf3d285" + integrity sha512-/UjuH/76KLaUlL+o1OvyORynv6FURzjurSjvn2lbWTFc4tpYY2qLYTlKpTCBVPhlLUQsfyFnshEJDLmPneq2oA== + dependencies: + "@docusaurus/core" "2.4.1" + "@docusaurus/mdx-loader" "2.4.1" + "@docusaurus/types" "2.4.1" + "@docusaurus/utils" "2.4.1" + "@docusaurus/utils-validation" "2.4.1" fs-extra "^10.1.0" tslib "^2.4.0" webpack "^5.73.0" -"@docusaurus/plugin-debug@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-2.4.0.tgz#1ad513fe9bcaf017deccf62df8b8843faeeb7d37" - integrity sha512-KC56DdYjYT7Txyux71vXHXGYZuP6yYtqwClvYpjKreWIHWus5Zt6VNi23rMZv3/QKhOCrN64zplUbdfQMvddBQ== +"@docusaurus/plugin-debug@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-2.4.1.tgz#461a2c77b0c5a91b2c05257c8f9585412aaa59dc" + integrity sha512-7Yu9UPzRShlrH/G8btOpR0e6INFZr0EegWplMjOqelIwAcx3PKyR8mgPTxGTxcqiYj6hxSCRN0D8R7YrzImwNA== dependencies: - "@docusaurus/core" "2.4.0" - "@docusaurus/types" "2.4.0" - "@docusaurus/utils" "2.4.0" + "@docusaurus/core" "2.4.1" + "@docusaurus/types" "2.4.1" + "@docusaurus/utils" "2.4.1" fs-extra "^10.1.0" react-json-view "^1.21.3" tslib "^2.4.0" -"@docusaurus/plugin-google-analytics@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.4.0.tgz#8062d7a09d366329dfd3ce4e8a619da8624b6cc3" - integrity sha512-uGUzX67DOAIglygdNrmMOvEp8qG03X20jMWadeqVQktS6nADvozpSLGx4J0xbkblhJkUzN21WiilsP9iVP+zkw== +"@docusaurus/plugin-google-analytics@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.4.1.tgz#30de1c35773bf9d52bb2d79b201b23eb98022613" + integrity sha512-dyZJdJiCoL+rcfnm0RPkLt/o732HvLiEwmtoNzOoz9MSZz117UH2J6U2vUDtzUzwtFLIf32KkeyzisbwUCgcaQ== dependencies: - "@docusaurus/core" "2.4.0" - "@docusaurus/types" "2.4.0" - "@docusaurus/utils-validation" "2.4.0" + "@docusaurus/core" "2.4.1" + "@docusaurus/types" "2.4.1" + "@docusaurus/utils-validation" "2.4.1" tslib "^2.4.0" -"@docusaurus/plugin-google-gtag@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.4.0.tgz#a8efda476f971410dfb3aab1cfe1f0f7d269adc5" - integrity sha512-adj/70DANaQs2+TF/nRdMezDXFAV/O/pjAbUgmKBlyOTq5qoMe0Tk4muvQIwWUmiUQxFJe+sKlZGM771ownyOg== +"@docusaurus/plugin-google-gtag@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.4.1.tgz#6a3eb91022714735e625c7ca70ef5188fa7bd0dc" + integrity sha512-mKIefK+2kGTQBYvloNEKtDmnRD7bxHLsBcxgnbt4oZwzi2nxCGjPX6+9SQO2KCN5HZbNrYmGo5GJfMgoRvy6uA== dependencies: - "@docusaurus/core" "2.4.0" - "@docusaurus/types" "2.4.0" - "@docusaurus/utils-validation" "2.4.0" + "@docusaurus/core" "2.4.1" + "@docusaurus/types" "2.4.1" + "@docusaurus/utils-validation" "2.4.1" tslib "^2.4.0" -"@docusaurus/plugin-google-tag-manager@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-2.4.0.tgz#9a94324ac496835fc34e233cc60441df4e04dfdd" - integrity sha512-E66uGcYs4l7yitmp/8kMEVQftFPwV9iC62ORh47Veqzs6ExwnhzBkJmwDnwIysHBF1vlxnzET0Fl2LfL5fRR3A== +"@docusaurus/plugin-google-tag-manager@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-2.4.1.tgz#b99f71aec00b112bbf509ef2416e404a95eb607e" + integrity sha512-Zg4Ii9CMOLfpeV2nG74lVTWNtisFaH9QNtEw48R5QE1KIwDBdTVaiSA18G1EujZjrzJJzXN79VhINSbOJO/r3g== dependencies: - "@docusaurus/core" "2.4.0" - "@docusaurus/types" "2.4.0" - "@docusaurus/utils-validation" "2.4.0" + "@docusaurus/core" "2.4.1" + "@docusaurus/types" "2.4.1" + "@docusaurus/utils-validation" "2.4.1" tslib "^2.4.0" -"@docusaurus/plugin-sitemap@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.4.0.tgz#ba0eb43565039fe011bdd874b5c5d7252b19d709" - integrity sha512-pZxh+ygfnI657sN8a/FkYVIAmVv0CGk71QMKqJBOfMmDHNN1FeDeFkBjWP49ejBqpqAhjufkv5UWq3UOu2soCw== - dependencies: - "@docusaurus/core" "2.4.0" - "@docusaurus/logger" "2.4.0" - "@docusaurus/types" "2.4.0" - "@docusaurus/utils" "2.4.0" - "@docusaurus/utils-common" "2.4.0" - "@docusaurus/utils-validation" "2.4.0" +"@docusaurus/plugin-sitemap@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.4.1.tgz#8a7a76ed69dc3e6b4474b6abb10bb03336a9de6d" + integrity sha512-lZx+ijt/+atQ3FVE8FOHV/+X3kuok688OydDXrqKRJyXBJZKgGjA2Qa8RjQ4f27V2woaXhtnyrdPop/+OjVMRg== + dependencies: + "@docusaurus/core" "2.4.1" + "@docusaurus/logger" "2.4.1" + "@docusaurus/types" "2.4.1" + "@docusaurus/utils" "2.4.1" + "@docusaurus/utils-common" "2.4.1" + "@docusaurus/utils-validation" "2.4.1" fs-extra "^10.1.0" sitemap "^7.1.1" tslib "^2.4.0" -"@docusaurus/preset-classic@^2.2.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-2.4.0.tgz#92fdcfab35d8d0ffb8c38bcbf439e4e1cb0566a3" - integrity sha512-/5z5o/9bc6+P5ool2y01PbJhoGddEGsC0ej1MF6mCoazk8A+kW4feoUd68l7Bnv01rCnG3xy7kHUQP97Y0grUA== - dependencies: - "@docusaurus/core" "2.4.0" - "@docusaurus/plugin-content-blog" "2.4.0" - "@docusaurus/plugin-content-docs" "2.4.0" - "@docusaurus/plugin-content-pages" "2.4.0" - "@docusaurus/plugin-debug" "2.4.0" - "@docusaurus/plugin-google-analytics" "2.4.0" - "@docusaurus/plugin-google-gtag" "2.4.0" - "@docusaurus/plugin-google-tag-manager" "2.4.0" - "@docusaurus/plugin-sitemap" "2.4.0" - "@docusaurus/theme-classic" "2.4.0" - "@docusaurus/theme-common" "2.4.0" - "@docusaurus/theme-search-algolia" "2.4.0" - "@docusaurus/types" "2.4.0" +"@docusaurus/preset-classic@^2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-2.4.1.tgz#072f22d0332588e9c5f512d4bded8d7c99f91497" + integrity sha512-P4//+I4zDqQJ+UDgoFrjIFaQ1MeS9UD1cvxVQaI6O7iBmiHQm0MGROP1TbE7HlxlDPXFJjZUK3x3cAoK63smGQ== + dependencies: + "@docusaurus/core" "2.4.1" + "@docusaurus/plugin-content-blog" "2.4.1" + "@docusaurus/plugin-content-docs" "2.4.1" + "@docusaurus/plugin-content-pages" "2.4.1" + "@docusaurus/plugin-debug" "2.4.1" + "@docusaurus/plugin-google-analytics" "2.4.1" + "@docusaurus/plugin-google-gtag" "2.4.1" + "@docusaurus/plugin-google-tag-manager" "2.4.1" + "@docusaurus/plugin-sitemap" "2.4.1" + "@docusaurus/theme-classic" "2.4.1" + "@docusaurus/theme-common" "2.4.1" + "@docusaurus/theme-search-algolia" "2.4.1" + "@docusaurus/types" "2.4.1" "@docusaurus/react-loadable@5.5.2", "react-loadable@npm:@docusaurus/react-loadable@5.5.2": version "5.5.2" @@ -1492,23 +1492,23 @@ "@types/react" "*" prop-types "^15.6.2" -"@docusaurus/theme-classic@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-2.4.0.tgz#a5404967b00adec3472efca4c3b3f6a5e2021c78" - integrity sha512-GMDX5WU6Z0OC65eQFgl3iNNEbI9IMJz9f6KnOyuMxNUR6q0qVLsKCNopFUDfFNJ55UU50o7P7o21yVhkwpfJ9w== - dependencies: - "@docusaurus/core" "2.4.0" - "@docusaurus/mdx-loader" "2.4.0" - "@docusaurus/module-type-aliases" "2.4.0" - "@docusaurus/plugin-content-blog" "2.4.0" - "@docusaurus/plugin-content-docs" "2.4.0" - "@docusaurus/plugin-content-pages" "2.4.0" - "@docusaurus/theme-common" "2.4.0" - "@docusaurus/theme-translations" "2.4.0" - "@docusaurus/types" "2.4.0" - "@docusaurus/utils" "2.4.0" - "@docusaurus/utils-common" "2.4.0" - "@docusaurus/utils-validation" "2.4.0" +"@docusaurus/theme-classic@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-2.4.1.tgz#0060cb263c1a73a33ac33f79bb6bc2a12a56ad9e" + integrity sha512-Rz0wKUa+LTW1PLXmwnf8mn85EBzaGSt6qamqtmnh9Hflkc+EqiYMhtUJeLdV+wsgYq4aG0ANc+bpUDpsUhdnwg== + dependencies: + "@docusaurus/core" "2.4.1" + "@docusaurus/mdx-loader" "2.4.1" + "@docusaurus/module-type-aliases" "2.4.1" + "@docusaurus/plugin-content-blog" "2.4.1" + "@docusaurus/plugin-content-docs" "2.4.1" + "@docusaurus/plugin-content-pages" "2.4.1" + "@docusaurus/theme-common" "2.4.1" + "@docusaurus/theme-translations" "2.4.1" + "@docusaurus/types" "2.4.1" + "@docusaurus/utils" "2.4.1" + "@docusaurus/utils-common" "2.4.1" + "@docusaurus/utils-validation" "2.4.1" "@mdx-js/react" "^1.6.22" clsx "^1.2.1" copy-text-to-clipboard "^3.0.1" @@ -1523,18 +1523,18 @@ tslib "^2.4.0" utility-types "^3.10.0" -"@docusaurus/theme-common@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-2.4.0.tgz#626096fe9552d240a2115b492c7e12099070cf2d" - integrity sha512-IkG/l5f/FLY6cBIxtPmFnxpuPzc5TupuqlOx+XDN+035MdQcAh8wHXXZJAkTeYDeZ3anIUSUIvWa7/nRKoQEfg== - dependencies: - "@docusaurus/mdx-loader" "2.4.0" - "@docusaurus/module-type-aliases" "2.4.0" - "@docusaurus/plugin-content-blog" "2.4.0" - "@docusaurus/plugin-content-docs" "2.4.0" - "@docusaurus/plugin-content-pages" "2.4.0" - "@docusaurus/utils" "2.4.0" - "@docusaurus/utils-common" "2.4.0" +"@docusaurus/theme-common@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-2.4.1.tgz#03e16f7aa96455e952f3243ac99757b01a3c83d4" + integrity sha512-G7Zau1W5rQTaFFB3x3soQoZpkgMbl/SYNG8PfMFIjKa3M3q8n0m/GRf5/H/e5BqOvt8c+ZWIXGCiz+kUCSHovA== + dependencies: + "@docusaurus/mdx-loader" "2.4.1" + "@docusaurus/module-type-aliases" "2.4.1" + "@docusaurus/plugin-content-blog" "2.4.1" + "@docusaurus/plugin-content-docs" "2.4.1" + "@docusaurus/plugin-content-pages" "2.4.1" + "@docusaurus/utils" "2.4.1" + "@docusaurus/utils-common" "2.4.1" "@types/history" "^4.7.11" "@types/react" "*" "@types/react-router-config" "*" @@ -1545,19 +1545,19 @@ use-sync-external-store "^1.2.0" utility-types "^3.10.0" -"@docusaurus/theme-search-algolia@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.4.0.tgz#07d297d50c44446d6bc5a37be39afb8f014084e1" - integrity sha512-pPCJSCL1Qt4pu/Z0uxBAuke0yEBbxh0s4fOvimna7TEcBLPq0x06/K78AaABXrTVQM6S0vdocFl9EoNgU17hqA== +"@docusaurus/theme-search-algolia@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.4.1.tgz#906bd2cca3fced0241985ef502c892f58ff380fc" + integrity sha512-6BcqW2lnLhZCXuMAvPRezFs1DpmEKzXFKlYjruuas+Xy3AQeFzDJKTJFIm49N77WFCTyxff8d3E4Q9pi/+5McQ== dependencies: "@docsearch/react" "^3.1.1" - "@docusaurus/core" "2.4.0" - "@docusaurus/logger" "2.4.0" - "@docusaurus/plugin-content-docs" "2.4.0" - "@docusaurus/theme-common" "2.4.0" - "@docusaurus/theme-translations" "2.4.0" - "@docusaurus/utils" "2.4.0" - "@docusaurus/utils-validation" "2.4.0" + "@docusaurus/core" "2.4.1" + "@docusaurus/logger" "2.4.1" + "@docusaurus/plugin-content-docs" "2.4.1" + "@docusaurus/theme-common" "2.4.1" + "@docusaurus/theme-translations" "2.4.1" + "@docusaurus/utils" "2.4.1" + "@docusaurus/utils-validation" "2.4.1" algoliasearch "^4.13.1" algoliasearch-helper "^3.10.0" clsx "^1.2.1" @@ -1567,18 +1567,18 @@ tslib "^2.4.0" utility-types "^3.10.0" -"@docusaurus/theme-translations@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-2.4.0.tgz#62dacb7997322f4c5a828b3ab66177ec6769eb33" - integrity sha512-kEoITnPXzDPUMBHk3+fzEzbopxLD3fR5sDoayNH0vXkpUukA88/aDL1bqkhxWZHA3LOfJ3f0vJbOwmnXW5v85Q== +"@docusaurus/theme-translations@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-2.4.1.tgz#4d49df5865dae9ef4b98a19284ede62ae6f98726" + integrity sha512-T1RAGP+f86CA1kfE8ejZ3T3pUU3XcyvrGMfC/zxCtc2BsnoexuNI9Vk2CmuKCb+Tacvhxjv5unhxXce0+NKyvA== dependencies: fs-extra "^10.1.0" tslib "^2.4.0" -"@docusaurus/types@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-2.4.0.tgz#f94f89a0253778b617c5d40ac6f16b17ec55ce41" - integrity sha512-xaBXr+KIPDkIaef06c+i2HeTqVNixB7yFut5fBXPGI2f1rrmEV2vLMznNGsFwvZ5XmA3Quuefd4OGRkdo97Dhw== +"@docusaurus/types@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-2.4.1.tgz#d8e82f9e0f704984f98df1f93d6b4554d5458705" + integrity sha512-0R+cbhpMkhbRXX138UOc/2XZFF8hiZa6ooZAEEJFp5scytzCw4tC1gChMFXrpa3d2tYE6AX8IrOEpSonLmfQuQ== dependencies: "@types/history" "^4.7.11" "@types/react" "*" @@ -1589,30 +1589,30 @@ webpack "^5.73.0" webpack-merge "^5.8.0" -"@docusaurus/utils-common@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-2.4.0.tgz#eb2913871860ed32e73858b4c7787dd820c5558d" - integrity sha512-zIMf10xuKxddYfLg5cS19x44zud/E9I7lj3+0bv8UIs0aahpErfNrGhijEfJpAfikhQ8tL3m35nH3hJ3sOG82A== +"@docusaurus/utils-common@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-2.4.1.tgz#7f72e873e49bd5179588869cc3ab7449a56aae63" + integrity sha512-bCVGdZU+z/qVcIiEQdyx0K13OC5mYwxhSuDUR95oFbKVuXYRrTVrwZIqQljuo1fyJvFTKHiL9L9skQOPokuFNQ== dependencies: tslib "^2.4.0" -"@docusaurus/utils-validation@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-2.4.0.tgz#1ed92bfab5da321c4a4d99cad28a15627091aa90" - integrity sha512-IrBsBbbAp6y7mZdJx4S4pIA7dUyWSA0GNosPk6ZJ0fX3uYIEQgcQSGIgTeSC+8xPEx3c16o03en1jSDpgQgz/w== +"@docusaurus/utils-validation@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-2.4.1.tgz#19959856d4a886af0c5cfb357f4ef68b51151244" + integrity sha512-unII3hlJlDwZ3w8U+pMO3Lx3RhI4YEbY3YNsQj4yzrkZzlpqZOLuAiZK2JyULnD+TKbceKU0WyWkQXtYbLNDFA== dependencies: - "@docusaurus/logger" "2.4.0" - "@docusaurus/utils" "2.4.0" + "@docusaurus/logger" "2.4.1" + "@docusaurus/utils" "2.4.1" joi "^17.6.0" js-yaml "^4.1.0" tslib "^2.4.0" -"@docusaurus/utils@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.4.0.tgz#fdf0c3545819e48bb57eafc5057495fd4d50e900" - integrity sha512-89hLYkvtRX92j+C+ERYTuSUK6nF9bGM32QThcHPg2EDDHVw6FzYQXmX6/p+pU5SDyyx5nBlE4qXR92RxCAOqfg== +"@docusaurus/utils@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.4.1.tgz#9c5f76eae37b71f3819c1c1f0e26e6807c99a4fc" + integrity sha512-1lvEZdAQhKNht9aPXPoh69eeKnV0/62ROhQeFKKxmzd0zkcuE/Oc5Gpnt00y/f5bIsmOsYMY7Pqfm/5rteT5GA== dependencies: - "@docusaurus/logger" "2.4.0" + "@docusaurus/logger" "2.4.1" "@svgr/webpack" "^6.2.1" escape-string-regexp "^4.0.0" file-loader "^6.2.0" From b328ea8aab922fdcb7d2ca836bd98de0291690f0 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Tue, 27 Jun 2023 12:58:25 -0400 Subject: [PATCH 506/578] Update index.md (#1824) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 72d2847d636..2e7876f4212 100644 --- a/applications/index.md +++ b/applications/index.md @@ -63,7 +63,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Gloslab](https://github.com/smiasojed) | [Contracts performance measurement tool proposal](contracts-tool.md) | [GitHub](https://github.com/smiasojed) | ☐ | ☐ | ☐ | | [Nikita Orlov PR](https://github.com/stringnick) | [Faucet chat based bot](faucet-bot.md) | [GitHub](https://github.com/stringnick) | ☐ | ☐ | ☐ | | [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal Saas Pricing](societal_saas_pricing.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☐ | ☐ | -| [MASTER UNION LLC.](https://github.com/TheDotflow) | [Dotflow](Dotflow.md) | [GitHub](https://github.com/TheDotflow) | ☐ | ☐ | ☐ | +| [MASTER UNION LLC.](https://github.com/TheDotflow) | [Dotflow](Dotflow.md) | [GitHub](https://github.com/TheDotflow) | ☐ | ☒ | ☐ | | [Antier Solutions](https://www.antiersolutions.com/) | [RFP/securityMarketPlace](Security_Marketplace.md) | [GitHub](https://github.com/ParthChaudhary31) | ☐ | ☐ | ☐ | | [SO/DA zone](https://github.com/mfornos) | [Ocelloids Monitoring SDK grant application](ocelloids_monitoring_sdk.md) | [GitHub](https://github.com/mfornos) | ☐ | ☐ | ☐ | | [Antier Solutions Pvt. Ltd.](https://github.com/kulwindersingh-ant)| [Grants webapp](Grant_management_webapp.md) | [GitHub](https://github.com/kulwindersingh-ant) | ☐ | ☐ | ☐ | From eebc837c11163572b9b7bc036084d15ac037a604 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Wed, 28 Jun 2023 04:37:05 -0400 Subject: [PATCH 507/578] Update index.md (#1826) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 2e7876f4212..ecfb09d6fb1 100644 --- a/applications/index.md +++ b/applications/index.md @@ -111,7 +111,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Off-Narrative Labs](https://github.com/Off-Narrative-Labs) | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☒ | ☒ | | [FuzzLand](https://fuzz.land/) | [FuzzLand](FuzzLand.md) | [GitHub](https://github.com/fuzzland) | ☐ | ☐ | ☐ | | [Fuu](https://github.com/ff13dfly/) | [Anchor, On-chain Linked List pallet and Name Service](Anchor.md) | [GitHub](https://github.com/ff13dfly/Anchor) | ☐ | ☒ | ☒ | -| [hack-ink](https://hack.ink/) | [Slothunter](slothunter.md) | [GitHub](https://github.com/hack-ink) | ☐ | ☐ | ☐ | +| [hack-ink](https://hack.ink/) | [Slothunter](slothunter.md) | [GitHub](https://github.com/hack-ink) | ☐ | ☒ | ☐ | | [Invers Inc](https://invers.tech/) | [Zkwasm Rollups Transfer](zkwasm-rollups-transfer.md) | [GitHub](https://github.com/zero-network) | ☐ | ☐ | ☐ | | [decentraDOT](https://decentradot.com/) | [Cyclops Validator Dashboard](cyclops.md) | [GitHub](https://github.com/ArthurHoeke?tab=repositories) | ☐ | ☒ | ☒ | | [Anwesh Nayak](https://github.com/muddlebee) | [Mempool Dashboard - Version 2](polkadot-mempool-explorer-v2.md) | [GitHub](https://github.com/muddlebee) | ☐ | ☐ | ☐ | From 693e419ef756c0e3b1b3e4a9b1431c9a11300c62 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Wed, 28 Jun 2023 04:37:27 -0400 Subject: [PATCH 508/578] Update index.md (#1825) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index ecfb09d6fb1..f6a8fc094d7 100644 --- a/applications/index.md +++ b/applications/index.md @@ -46,7 +46,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Valletech AB](https://valletech.eu/) | [DINFRA](./DINFRA.md) | [GitHub](https://gitlab.com/polkawatch) | ☐ | ☐ | ☐ | | [DAuth](https://github.com/DAuth-Network) | [DAuth](./dauth_network.md) | [GitHub](https://github.com/DAuth-Network) | ☐ | ☐ | ☐ | | [Galaxy.Do](https://galaxy.do) | [Galaxy: Three-dimensional Web for Polkadot Users](./galaxy.md) | [GitHub](https://github.com/7flash) | ☐ | ☒ | ☐ | -| [Web3 Labs Ltd](https://www.web3labs.com/) | [Sirato (Epirus) Substrate Explorer - Phase III](./sirato_substrate_phase3.md) | [GitHub](https://github.com/web3labs) | ☐ | ☐ | ☐ | +| [Web3 Labs Ltd](https://www.web3labs.com/) | [Sirato (Epirus) Substrate Explorer - Phase III](./sirato_substrate_phase3.md) | [GitHub](https://github.com/web3labs) | ☐ | ☒ | ☒ | | [Collective Intelligence Labs](https://collectiveintelligence.dev/)| [Omnichain Infrastructure](./CILA-omnichain-infrastructure.md) | [GitHub](https://github.com/Collective-Intelligence-Labs) | ☐ | ☐ | ☐ | | [TradeLink](https://tradelink.pro/) | [Sandox](./sandox.md) | [GitHub](https://github.com/BEARlogin) | ☐ | ☐ | ☐ | | [Wunderbar Network](https://wunderbar.network/) | [Vue.js + TypeScript Substrate Front-End Template](./vue-typescript-substrate-frontend-template.md) | [GitHub](https://github.com/WunderbarNetwork) | ☐ | ☐ | ☐ | From 8b2326fd40bfd524985973cb39680c3f92abcf80 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Wed, 28 Jun 2023 11:20:24 +0200 Subject: [PATCH 509/578] Update analysis RFP status --- .../analysis-website-and-data-platform.md | 2 +- docs/rfps.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename docs/RFPs/{Open => Under Development}/analysis-website-and-data-platform.md (94%) diff --git a/docs/RFPs/Open/analysis-website-and-data-platform.md b/docs/RFPs/Under Development/analysis-website-and-data-platform.md similarity index 94% rename from docs/RFPs/Open/analysis-website-and-data-platform.md rename to docs/RFPs/Under Development/analysis-website-and-data-platform.md index 79935c631b7..3bbc1cc0696 100644 --- a/docs/RFPs/Open/analysis-website-and-data-platform.md +++ b/docs/RFPs/Under Development/analysis-website-and-data-platform.md @@ -1,6 +1,6 @@ # Analytics Website/Data Platform -* **Status:** Open +* **Status:** [Under Development 1](https://github.com/w3f/Grants-Program/pull/1716), [Under Development 2](https://github.com/w3f/Grants-Program/pull/1768) * **Proposer:** [Keegan Quigley](https://github.com/keeganquigley) * **Teams/People that could deliver the RFP**: @web3go-xyz diff --git a/docs/rfps.md b/docs/rfps.md index 4c6c130c1ca..a455232952c 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -24,7 +24,6 @@ If you find an open RFP here that you think you can address, feel free to [submi | RFP | Last Updated | | :-- | :----------: | | [a-and-v-topology.md](RFPs/Open/a-and-v-topology.md) | 29.11.2021 | -| [analysis-website-and-data-platform.md](RFPs/Open/analysis-website-and-data-platform.md) | 17.02.2023 | | [anti-collusion_infrastructure.md](RFPs/Open/anti-collusion_infrastructure.md) | 29.11.2021 | | [bpf-contracts.md](RFPs/Open/bpf-contracts.md) | 06.01.2023 | | [data_analysis_tools.md](RFPs/Open/data_analysis_tools.md) | 25.01.2023 | @@ -48,6 +47,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | RFP | Last Updated | | :-- | :----------: | | [alternative_polkadot_host_implementations.md](RFPs/Open/alternative_polkadot_host_implementations.md) | 02.03.2023 | +| [analysis-website-and-data-platform.md](RFPs/Open/analysis-website-and-data-platform.md) | 28.06.2023 | | [grant_management_webapp.md](RFPs/Under%20Development/grant_management_webapp.md) | 06.06.2023 | | [identity-directory.md](RFPs/Under%20Development/identity-directory.md) | 30.05.2022 | | [IDE_for_ink_Smart_Contracts.md](RFPs/Under%20Development/IDE_for_ink_Smart_Contracts.md) | 05.04.2023 | From 11b6ba4f4e7fc7c20c2822ddeab50f36b2c08248 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 28 Jun 2023 14:36:00 +0200 Subject: [PATCH 510/578] Cancel Openbrush (#1827) --- applications/openbrush-follow-up.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/openbrush-follow-up.md b/applications/openbrush-follow-up.md index 6958d9d4682..ee03b18b8a6 100644 --- a/applications/openbrush-follow-up.md +++ b/applications/openbrush-follow-up.md @@ -3,6 +3,7 @@ * **Team Name:** [SuperColony](https://github.com/Supercolony-net) * **Payment Address:** ERC 20 ADDRESS: 0xE1B19cE32866cDE87F8f59C7C2C5f90E093A6942 * **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2, It is follow-up grant for [first grant](https://github.com/w3f/Grants-Program/pull/497). +- **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/621#issuecomment-1611059800) ## Project Overview :page_facing_up: From 590febb0be9094f690c20299fbdbca83acf76400 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 28 Jun 2023 17:06:36 +0200 Subject: [PATCH 511/578] Move data analysis RFPs to Under Development --- .../RFPs/{Open => Under Development}/data_analysis_tools.md | 6 +++--- docs/rfps.md | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) rename docs/RFPs/{Open => Under Development}/data_analysis_tools.md (92%) diff --git a/docs/RFPs/Open/data_analysis_tools.md b/docs/RFPs/Under Development/data_analysis_tools.md similarity index 92% rename from docs/RFPs/Open/data_analysis_tools.md rename to docs/RFPs/Under Development/data_analysis_tools.md index ab2211d29a2..67ba67103d1 100644 --- a/docs/RFPs/Open/data_analysis_tools.md +++ b/docs/RFPs/Under Development/data_analysis_tools.md @@ -1,9 +1,9 @@ # Data Analysis Tools for Substrate-based Blockchains -* **Status:** Open -* **Proposer:** [dsm-w3f](https://github.com/dsm-w3f), [michalisFr](https://github.com/michalisFr) +- **Status:** [Under Development 1](https://github.com/w3f/Grants-Program/pull/1716), [Under Development 2](https://github.com/w3f/Grants-Program/pull/1768) +- **Proposer:** [dsm-w3f](https://github.com/dsm-w3f), [michalisFr](https://github.com/michalisFr) -## Project Description :page_facing_up: +## Project Description :page_facing_up: Block Explorers are tools that index blockchain data and allow people to easily exhibit it using a web user interface. Examples of Block Explorers in the Polkadot/Kusama ecosystem are (not exhaustive) Subscan, Calamar, and Statescan. For common users, the features commonly found in block explorers are enough. However, for advanced users, the data analysis involves accessing many screens and following long paths through blockchain data. diff --git a/docs/rfps.md b/docs/rfps.md index a455232952c..914e0c2ed89 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -26,7 +26,6 @@ If you find an open RFP here that you think you can address, feel free to [submi | [a-and-v-topology.md](RFPs/Open/a-and-v-topology.md) | 29.11.2021 | | [anti-collusion_infrastructure.md](RFPs/Open/anti-collusion_infrastructure.md) | 29.11.2021 | | [bpf-contracts.md](RFPs/Open/bpf-contracts.md) | 06.01.2023 | -| [data_analysis_tools.md](RFPs/Open/data_analysis_tools.md) | 25.01.2023 | | [formal_guarantees_for_grandpa.md](RFPs/Open/formal_guarantees_for_grandpa.md) | 07.10.2022 | | [ISO_20022.md](RFPs/Open/ISO_20022.md) | 31.05.2022 | | [move_smart_contract_pallet.md](RFPs/Open/move_smart_contract_pallet.md) | 22.12.2022 | @@ -47,7 +46,8 @@ If you find an open RFP here that you think you can address, feel free to [submi | RFP | Last Updated | | :-- | :----------: | | [alternative_polkadot_host_implementations.md](RFPs/Open/alternative_polkadot_host_implementations.md) | 02.03.2023 | -| [analysis-website-and-data-platform.md](RFPs/Open/analysis-website-and-data-platform.md) | 28.06.2023 | +| [analysis-website-and-data-platform.md](RFPs/Under%20Development/analysis-website-and-data-platform.md) | 28.06.2023 | +| [data_analysis_tools.md](RFPs/Under%20Development/data_analysis_tools.md) | 28.06.2023 | | [grant_management_webapp.md](RFPs/Under%20Development/grant_management_webapp.md) | 06.06.2023 | | [identity-directory.md](RFPs/Under%20Development/identity-directory.md) | 30.05.2022 | | [IDE_for_ink_Smart_Contracts.md](RFPs/Under%20Development/IDE_for_ink_Smart_Contracts.md) | 05.04.2023 | From 8f3a8bcbca623baa8f9b212d81987414ed845fb7 Mon Sep 17 00:00:00 2001 From: Mark Van de Vyver Date: Thu, 29 Jun 2023 02:12:20 +1000 Subject: [PATCH 512/578] Tokeneconomics survey: Post approval changes (#1812) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Scope: Top-6 The existing literature was deeper than expected, but also much narrower than expected. Unfortunately, this means there are not 10 articles that fit the grant scope. It has also meant that distilling the analysis has taken much more time than expected. I have expanded the scope of published articles from Dec 2022 to the current date to capture one article I judge to be significant. The current articles cover bubble-coins, dampened-coins, breakable-coins and redeemable-coins. These cover most, if not all, characteristics of existing coins. Signed-off-by: Mark Van de Vyver * Delivery extensions The existing literature was deeper than expected. This meant that distilling the analysis has taken much more time than expected. I have also had delays in setting up the legal entities through my accountant - its tax season right now - hence the delay in submitting the details for the Milestone payments. Signed-off-by: Mark Van de Vyver * Expanded scope of application Substrate is being merged into Polkadot and is now formaly and practically under the rubric of the 'Parity Polkadot SDK ... (basically, that’s Substrate, Polkadot, Cumulus and XCM)'. See: https://web.archive.org/web/20230621013047/https://forum.polkadot.network/t/psa-parity-is-currently-working-on-merging-the-polkadot-stack-repositories-into-one-single-repository/2883/13 Polkadot uses one specific coin model. This project envisions/contemplates token designs that improve on DOT or even conflict with DOT. These changes address that broader audience. Signed-off-by: Mark Van de Vyver * Reviewer feedback Signed-off-by: Mark Van de Vyver --------- Signed-off-by: Mark Van de Vyver --- applications/tokenomics-survey-2022.md | 28 ++++++++++++-------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/applications/tokenomics-survey-2022.md b/applications/tokenomics-survey-2022.md index 6423ece3a34..23e8c82b5f7 100644 --- a/applications/tokenomics-survey-2022.md +++ b/applications/tokenomics-survey-2022.md @@ -1,4 +1,4 @@ -# Substrate Tokenomics +# Tokenomics Scoping Review: Annotated Bibliogrphy - **Team Name:** Mark Van de Vyver [PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) - **Payment Address:** 15WoVugRLfBAogS1FBmhzxVv8WZqZK1z4KKHALijTZfdVcCm (USDC) @@ -14,21 +14,20 @@ This is a survey, hence limited to topics the existing literature addresses. Wit The report/working paper will be posted to [SSRN (e.g. FEN - Cryptocurrency Research eJournal)](https://papers.ssrn.com/sol3/JELJOUR_Results.cfm?form_name=journalBrowse&journal_id=3839004), [IDEAS](https://ideas.repec.org/), [Arxiv (q-fin.GN)](https://arxiv.org/list/q-fin.GN/recent). - Description: - The decision making of Substrate developers (and other stakeholders) is assisted if a hypothetical/proposed token-economy can be described by reference, or analogy, to a known working/successful token-economy. Absent an existing implementation, developers are left to invent a token-economy, try to adapt an existing non-blockchain experience to a blockchain, or try to adapt non-blockchain ideas to a blockchain. + The decision making of developers (and other stakeholders) is assisted if a hypothetical/proposed token-economy can be described by reference, or analogy, to a known working/successful token-economy. Absent an existing implementation, developers are left to invent a token-economy, try to adapt an existing non-blockchain experience to a blockchain, or try to adapt non-blockchain ideas to a blockchain. - This project provides a annotated bibliography to help think through various choices and their trade-offs. It does so by reviewing the current state of play, as it is described in: a) published general-blockchain research, b) Polkadot whitepapers. It does not offer the answer to any particular token-economy design question. -- Substrate integration: - With Substrate Token-Economy networks in mind, I aim to provide a annotated bibliography of existing general-blockchain token-economy research. - Specifically, the central features and concerns across Polkadot Parachain Token-Economy networks will be identified. +- With general Token-Economy networks in mind, I aim to provide a annotated bibliography of existing general-blockchain token-economy research. + For practical context, the central features and concerns across Polkadot Parachain Token-Economy networks will be identified. Ultimately, the reader should learn something about those features of the token-economies of Polkadot Parachain networks and understand how some of the issues raised by the general-blockchain token-economy research are addressed by Polkadot Parachain token-economy designs, while others are not. Summary tables will highlight the key differentiating characteristics of different Polkadot Parachain network token-economies. - Motivation: - A project we are developing envisions the use of Substrate relay and Parachains in such a manner that our (imagined) token use is, apparently, novel. The state of play in Polkadot Parachain token-economics appears to be a debate [around staking and inflation](https://forum.polkadot.network/t/should-parachains-have-staking-inflation/806). A search of docs.substrate.io for "tokenomics" and "token-economics" returns no results. We had expected a reference to, or high-level summary of, the token-economies of parachains elected to the Polkadot relay chain. Ideally, we hoped to find high level descriptions of some token-economy features that are enabled by the distinct features of Substrate and its pallets, possibly with links to case studies or other resources. This annotated bibliography will provide some of that information. + A project we are developing envisions the use of the [Open Web3 Stack](https://github.com/open-web3-stack) relay and Parachains in such a manner that our (imagined) token use is, apparently, novel. The state of play in Polkadot Parachain token-economics appears to be a debate [around staking and inflation](https://forum.polkadot.network/t/should-parachains-have-staking-inflation/806). A search of docs.substrate.io for "tokenomics" and "token-economics" returns no results. We had expected a reference to, or high-level summary of, the token-economies of parachains elected to the Polkadot relay chain. Ideally, we hoped to find high level descriptions of some token-economy features that are enabled by the distinct features of the [Open Web3 Stack](https://github.com/open-web3-stack) and its pallets, possibly with links to case studies or other resources. This annotated bibliography will provide some of that information. ## Project Details ### The problem -A search of docs.substrate.io for "tokenomics" and "token-economics" returns no results. We had expected a reference to, or high-level summary of, the token-economies of parachains elected to the Polkadot relay chain. Ideally, we hoped to find high level descriptions of some token-economy features that are enabled by the distinct features of Substrate and its pallets, possibly with links to case studies or other resources. This annotated bibliography will provide some of that information. Inclusion of any of this information in Substrate/Polkadot documentation is out of scope. +A search of docs.substrate.io for "tokenomics" and "token-economics" returns no results. We had expected a reference to, or high-level summary of, the token-economies of parachains elected to the Polkadot relay chain. Ideally, we hoped to find high level descriptions of some token-economy features, possibly with links to case studies or other resources. This annotated bibliography will provide some of that information. Inclusion of this information in any documentation is out of scope. ### Research questions/hypothesis @@ -67,7 +66,7 @@ Each section of the report/working paper will be developed using some subset of #### Published articles -The initial source of the published research will be the top-10 articles selected by the grantee, using the commercial research databases available from the State Library of New South Wales by operationalizing the following inquiry, "Refereed articles on block-chain token-economics using rational expectations equilibrium (a.k.a. no-arbitrage) arguments/analysis, ranked by journal impact factors". This initial source may be adjusted at the grantees discretion based on his expertise. The selection process will be fully described and documented. +The initial source of the published research will be the top-6 articles selected by the grantee, using the commercial research databases available from the State Library of New South Wales by operationalizing the following inquiry, "Refereed articles on block-chain token-economics using rational expectations equilibrium (a.k.a. no-arbitrage) arguments/analysis, ranked by journal impact factors". This initial source may be adjusted at the grantees discretion based on his expertise. The selection process will be fully described and documented. #### Polkadot Parachain whitepapers @@ -123,10 +122,9 @@ The report/working paper will be posted to [SSRN (e.g. FEN - Cryptocurrency Rese - Game theory, behavioral economics/finance. - Empirical inference of token-economy attributes from time-series or cross-sectional regression analysis. - A review of the general economic modeling literature i.e. not related to blockchains. -- Substrate/Polkadot documentation. - Verifying the network token-economy has been implemented as specified in the network whitepaper. - Verifying the network whitepaper assumptions are a reasonable/plausible description of the network participants. -- Inclusion of any of this information in Substrate/Polkadot documentation. +- Inclusion of any of this information in any project documentation. #### Crypto-Currencies @@ -138,7 +136,7 @@ Equilibria are generally explicitly constructed (which proves existence) using c - Where and how does your project fit into the ecosystem? - Research into the design of a token-economy and survey of Polkadot token-economies. - Who is your target audience? - - Polkadot/Substrate Relay and Parachain developers. Industry analysts/advisors (media and investors). + - Blockchain developers. Industry analysts/advisors (media and investors). - What need(s) does your project meet? Developers and analysts need to understand the relevant literature available when developing their token-economy. The literature we canvas both theoretical (refereed articles) and applied (network whitepapers). @@ -203,7 +201,7 @@ Personal - As requested, I have adjusted the source of the research to eliminate myself as the source of bias in the collection of research papers. - academic publications relevant to the problem: One of the products from this research will be such a listing under these categories: - 1. Published articles: As requested, to eliminate bias (and constrain budget) in the collection of research papers, the initial source of the published research will be the top-10 articles provided by the State Library of New South Wales information search service in response to the following query, "Refereed articles on block-chain token-economics using rational expectations equilibrium (a.k.a. no-arbitrage) arguments/analysis, ranked by journal impact factors" + 1. Published articles: As requested, to eliminate bias (and constrain budget) in the collection of research papers, the initial source of the published research will be the top-6 articles provided by the State Library of New South Wales information search service in response to the following query, "Refereed articles on block-chain token-economics using rational expectations equilibrium (a.k.a. no-arbitrage) arguments/analysis, ranked by journal impact factors" 2. Polkadot Parachain whitepapers: These are from projects that are Polkadot-Parachains as at 19 December 2022. - links to your research diary, blog posts, articles, forum discussions or open GitHub issues: - [Tokenomics: Grant models](https://forum.polkadot.network/t/tokenomics-grant-models/1266) @@ -251,7 +249,7 @@ Initial flow-chart/decision-tree development that will help developers place the ### Milestone 2 — Outline Article -- **Estimated duration:** 1 month +- **Estimated duration:** 2 month - **FTE:** 0.2 - **Costs:** 3,000 USD @@ -268,7 +266,7 @@ Initial flow-chart/decision-tree development that will help developers place the ### Milestone 3 — Finalize Article -- **Estimated Duration:** 1 month +- **Estimated Duration:** 2 month - **FTE:** 0.2 - **Costs:** 4,000 USD @@ -307,7 +305,7 @@ Please include here - how you intend to use, enhance, promote and support your project in the short term, and - The working paper will be posted to [SSRN (e.g. FEN - Cryptocurrency Research eJournal)](https://papers.ssrn.com/sol3/JELJOUR_Results.cfm?form_name=journalBrowse&journal_id=3839004), [IDEAS](https://ideas.repec.org/), [Arxiv (q-fin.GN)](https://arxiv.org/list/q-fin.GN/recent) and the Polkadot forum. - the team's long-term plans and intentions in relation to it. - - Engage in a more forward-looking/positive analysis of how to design an aspect of the Substrate/Polkadot token-economy that addresses a current need. + - W3F Grant Proposal to implement and document one token model as an example/template of building a blockchain on the W3F [Open Web3 Stack](https://github.com/open-web3-stack) having known 'on-paper' coin characteristics. - Create RFP's addressing pallet functionality gaps that are identified in the course of the above. ## Additional Information :heavy_plus_sign: From 0b342e8061ca22826670782a91f37aa5d85f6ec7 Mon Sep 17 00:00:00 2001 From: Conor Svensson Date: Thu, 29 Jun 2023 17:47:34 +0100 Subject: [PATCH 513/578] Update sirato_substrate_phase3.md (#1828) Add correct payment details. --- applications/sirato_substrate_phase3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/sirato_substrate_phase3.md b/applications/sirato_substrate_phase3.md index 4066c541717..cd0bdffc984 100644 --- a/applications/sirato_substrate_phase3.md +++ b/applications/sirato_substrate_phase3.md @@ -2,7 +2,7 @@ - **Project Name:** Sirato (Epirus) Substrate Explorer - Phase III - **Team Name:** Web3 Labs Ltd -- **Payment Address:** 0xc905c448db9942c662fcb1680f3ecfcd0592409c +- **Payment Address:** Fiat payment address provided on invoice dated 23/06/2023. - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 ## Project Overview From e65edbbbb95ba4fde7cbf0662b0b5bd4e754697a Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Fri, 30 Jun 2023 04:39:44 -0300 Subject: [PATCH 514/578] Update index.md (#1829) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index f6a8fc094d7..63ad90d52cb 100644 --- a/applications/index.md +++ b/applications/index.md @@ -85,7 +85,7 @@ Use this page for an overview of all public grants and their status. Use the sid | Team | Project | Link | Terminated | First Delivery | Completed | | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------------------------------- | :--------- | :------------: | :--------: | -| [Deep Ink Ventures GmbH](http://deep-ink.ventures/) | [GenesisDAO](GenesisDAO.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☒ | ☐ | +| [Deep Ink Ventures GmbH](http://deep-ink.ventures/) | [GenesisDAO](GenesisDAO.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☒ | ☒ | | [ArtZero](https://artzero.io/) | [ArtZero & InkWhale](ArtZero_InkWhale.md) | [GitHub](https://github.com/artzero-io) | ☐ | ☒ | ☐ | | [EightFish](https://github.com/eightfish-org/eightfish) | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☒ | ☒ | | [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☒ | ☒ | From 18a3f3cf9cae72e77ae359b8d2d7f83f1929cd07 Mon Sep 17 00:00:00 2001 From: Cyril Carlier Date: Fri, 30 Jun 2023 09:45:14 +0200 Subject: [PATCH 515/578] Update Maki - Terminate due to lack of significant progression (#1830) --- applications/Maki.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/applications/Maki.md b/applications/Maki.md index 6e6e14e7fa5..54ebf93670b 100644 --- a/applications/Maki.md +++ b/applications/Maki.md @@ -3,7 +3,8 @@ - **Team Name:** Cyril Carlier (Individual) - **Payment Address:** 0x8a0cFA1DE5c26e3Cd553F33Dc560fBfa5267867C (ERC-20 USDC) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 - +- **Status:** Terminated + ## Project Overview :page_facing_up: This application is a response from the [anti-collusion infrastructure RFP](https://github.com/w3f/Grants-Program/blob/master/rfps/open/anti-collusion_infrastructure.md). From 208579ab0423ded6aa8bb19a9b3ebcc6945eaff8 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Fri, 30 Jun 2023 09:49:58 +0200 Subject: [PATCH 516/578] Statemine -> Asset Hub --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e96de8f3139..87130862957 100644 --- a/README.md +++ b/README.md @@ -148,7 +148,7 @@ The W3F Grants Program offers different grant levels to help you best depending ## :pencil: Process -> **:loudspeaker:** The process below is independent of the [level](#level_slider-levels). Payment is made in fiat, Bitcoin, USDT (on [Statemine/Statemint](https://support.polkadot.network/support/solutions/articles/65000181800-what-is-statemint-and-statemine-and-how-do-i-use-them-)) or USDC/DAI (Ethereum). If you want to apply in **private**, you can apply [:arrow_right: here](https://docs.google.com/forms/d/e/1FAIpQLSfMfjiRmDQDRk-4OhNASM6BAKii7rz_B1jWtbCPkUh6N7M2ww/viewform). Note that this is generally a slower process and imposes stricter requirements on applicants. +> **:loudspeaker:** The process below is independent of the [level](#level_slider-levels). Payment is made in fiat, Bitcoin, USDT (on the [Polkadot and Kusama Asset Hub](https://support.polkadot.network/support/solutions/articles/65000181800-what-is-statemint-and-statemine-and-how-do-i-use-them-)) or USDC/DAI (Ethereum). If you want to apply in **private**, you can apply [:arrow_right: here](https://docs.google.com/forms/d/e/1FAIpQLSfMfjiRmDQDRk-4OhNASM6BAKii7rz_B1jWtbCPkUh6N7M2ww/viewform). Note that this is generally a slower process and imposes stricter requirements on applicants. ### 1. Application From cf98382edc04006cd1e3fd699c6347bc5427be4a Mon Sep 17 00:00:00 2001 From: Noc2 Date: Mon, 3 Jul 2023 15:51:40 +0200 Subject: [PATCH 517/578] yarn lock update --- yarn.lock | 2940 ++++++++++++++++++++++++++++++----------------------- 1 file changed, 1642 insertions(+), 1298 deletions(-) diff --git a/yarn.lock b/yarn.lock index 320ce4eab74..1967817b8e3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,153 +2,161 @@ # yarn lockfile v1 -"@algolia/autocomplete-core@1.7.4": - version "1.7.4" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.7.4.tgz#85ff36b2673654a393c8c505345eaedd6eaa4f70" - integrity sha512-daoLpQ3ps/VTMRZDEBfU8ixXd+amZcNJ4QSP3IERGyzqnL5Ch8uSRFt/4G8pUvW9c3o6GA4vtVv4I4lmnkdXyg== +"@algolia/autocomplete-core@1.9.3": + version "1.9.3" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz#1d56482a768c33aae0868c8533049e02e8961be7" + integrity sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw== dependencies: - "@algolia/autocomplete-shared" "1.7.4" + "@algolia/autocomplete-plugin-algolia-insights" "1.9.3" + "@algolia/autocomplete-shared" "1.9.3" -"@algolia/autocomplete-preset-algolia@1.7.4": - version "1.7.4" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.4.tgz#610ee1d887962f230b987cba2fd6556478000bc3" - integrity sha512-s37hrvLEIfcmKY8VU9LsAXgm2yfmkdHT3DnA3SgHaY93yjZ2qL57wzb5QweVkYuEBZkT2PIREvRoLXC2sxTbpQ== +"@algolia/autocomplete-plugin-algolia-insights@1.9.3": + version "1.9.3" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz#9b7f8641052c8ead6d66c1623d444cbe19dde587" + integrity sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg== dependencies: - "@algolia/autocomplete-shared" "1.7.4" + "@algolia/autocomplete-shared" "1.9.3" -"@algolia/autocomplete-shared@1.7.4": - version "1.7.4" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.4.tgz#78aea1140a50c4d193e1f06a13b7f12c5e2cbeea" - integrity sha512-2VGCk7I9tA9Ge73Km99+Qg87w0wzW4tgUruvWAn/gfey1ZXgmxZtyIRBebk35R1O8TbK77wujVtCnpsGpRy1kg== +"@algolia/autocomplete-preset-algolia@1.9.3": + version "1.9.3" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz#64cca4a4304cfcad2cf730e83067e0c1b2f485da" + integrity sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA== + dependencies: + "@algolia/autocomplete-shared" "1.9.3" + +"@algolia/autocomplete-shared@1.9.3": + version "1.9.3" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz#2e22e830d36f0a9cf2c0ccd3c7f6d59435b77dfa" + integrity sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ== -"@algolia/cache-browser-local-storage@4.17.0": - version "4.17.0" - resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.17.0.tgz#4c54a9b1795dcc1cd9f9533144f7df3057984d39" - integrity sha512-myRSRZDIMYB8uCkO+lb40YKiYHi0fjpWRtJpR/dgkaiBlSD0plRyB6lLOh1XIfmMcSeBOqDE7y9m8xZMrXYfyQ== +"@algolia/cache-browser-local-storage@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.18.0.tgz#7bc0c9d8d346ed01384f4cf0dfaf6ba29ad5c20c" + integrity sha512-rUAs49NLlO8LVLgGzM4cLkw8NJLKguQLgvFmBEe3DyzlinoqxzQMHfKZs6TSq4LZfw/z8qHvRo8NcTAAUJQLcw== dependencies: - "@algolia/cache-common" "4.17.0" + "@algolia/cache-common" "4.18.0" -"@algolia/cache-common@4.17.0": - version "4.17.0" - resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.17.0.tgz#bc3da15548df585b44d76c55e66b0056a2b3f917" - integrity sha512-g8mXzkrcUBIPZaulAuqE7xyHhLAYAcF2xSch7d9dABheybaU3U91LjBX6eJTEB7XVhEsgK4Smi27vWtAJRhIKQ== +"@algolia/cache-common@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.18.0.tgz#aac33afac53e191c595d14a4bb7e6d81aae4836f" + integrity sha512-BmxsicMR4doGbeEXQu8yqiGmiyvpNvejYJtQ7rvzttEAMxOPoWEHrWyzBQw4x7LrBY9pMrgv4ZlUaF8PGzewHg== -"@algolia/cache-in-memory@4.17.0": - version "4.17.0" - resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.17.0.tgz#eb55a92cb8eb8641903a2b23fd6d05ebdaca2010" - integrity sha512-PT32ciC/xI8z919d0oknWVu3kMfTlhQn3MKxDln3pkn+yA7F7xrxSALysxquv+MhFfNAcrtQ/oVvQVBAQSHtdw== +"@algolia/cache-in-memory@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.18.0.tgz#9a40294c734819724a1b4e86afd5a7d4be9bcc2f" + integrity sha512-evD4dA1nd5HbFdufBxLqlJoob7E2ozlqJZuV3YlirNx5Na4q1LckIuzjNYZs2ddLzuTc/Xd5O3Ibf7OwPskHxw== dependencies: - "@algolia/cache-common" "4.17.0" + "@algolia/cache-common" "4.18.0" -"@algolia/client-account@4.17.0": - version "4.17.0" - resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.17.0.tgz#4b13e5a8e50a06be1f3289d9db337096ebc66b73" - integrity sha512-sSEHx9GA6m7wrlsSMNBGfyzlIfDT2fkz2u7jqfCCd6JEEwmxt8emGmxAU/0qBfbhRSuGvzojoLJlr83BSZAKjA== +"@algolia/client-account@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.18.0.tgz#202d9e06b41e06e45cb919107bed0a65106883cc" + integrity sha512-XsDnlROr3+Z1yjxBJjUMfMazi1V155kVdte6496atvBgOEtwCzTs3A+qdhfsAnGUvaYfBrBkL0ThnhMIBCGcew== dependencies: - "@algolia/client-common" "4.17.0" - "@algolia/client-search" "4.17.0" - "@algolia/transporter" "4.17.0" + "@algolia/client-common" "4.18.0" + "@algolia/client-search" "4.18.0" + "@algolia/transporter" "4.18.0" -"@algolia/client-analytics@4.17.0": - version "4.17.0" - resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.17.0.tgz#1b36ffbe913b7b4d8900bc15982ca431f47a473c" - integrity sha512-84ooP8QA3mQ958hQ9wozk7hFUbAO+81CX1CjAuerxBqjKIInh1fOhXKTaku05O/GHBvcfExpPLIQuSuLYziBXQ== +"@algolia/client-analytics@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.18.0.tgz#030b026bd9c13cb15437e35e4456bde25b0f1298" + integrity sha512-chEUSN4ReqU7uRQ1C8kDm0EiPE+eJeAXiWcBwLhEynfNuTfawN9P93rSZktj7gmExz0C8XmkbBU19IQ05wCNrQ== dependencies: - "@algolia/client-common" "4.17.0" - "@algolia/client-search" "4.17.0" - "@algolia/requester-common" "4.17.0" - "@algolia/transporter" "4.17.0" + "@algolia/client-common" "4.18.0" + "@algolia/client-search" "4.18.0" + "@algolia/requester-common" "4.18.0" + "@algolia/transporter" "4.18.0" -"@algolia/client-common@4.17.0": - version "4.17.0" - resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.17.0.tgz#67fd898006e3ac359ea3e3ed61abfc26147ffa53" - integrity sha512-jHMks0ZFicf8nRDn6ma8DNNsdwGgP/NKiAAL9z6rS7CymJ7L0+QqTJl3rYxRW7TmBhsUH40wqzmrG6aMIN/DrQ== +"@algolia/client-common@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.18.0.tgz#e080c393e1becdd5f5f008815c57d3248d3a8483" + integrity sha512-7N+soJFP4wn8tjTr3MSUT/U+4xVXbz4jmeRfWfVAzdAbxLAQbHa0o/POSdTvQ8/02DjCLelloZ1bb4ZFVKg7Wg== dependencies: - "@algolia/requester-common" "4.17.0" - "@algolia/transporter" "4.17.0" + "@algolia/requester-common" "4.18.0" + "@algolia/transporter" "4.18.0" -"@algolia/client-personalization@4.17.0": - version "4.17.0" - resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.17.0.tgz#428d9f4762c22856b6062bb54351eb31834db6c1" - integrity sha512-RMzN4dZLIta1YuwT7QC9o+OeGz2cU6eTOlGNE/6RcUBLOU3l9tkCOdln5dPE2jp8GZXPl2yk54b2nSs1+pAjqw== +"@algolia/client-personalization@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.18.0.tgz#9042ce2773120158ad25e1dfb28d706cebb48dc2" + integrity sha512-+PeCjODbxtamHcPl+couXMeHEefpUpr7IHftj4Y4Nia1hj8gGq4VlIcqhToAw8YjLeCTfOR7r7xtj3pJcYdP8A== dependencies: - "@algolia/client-common" "4.17.0" - "@algolia/requester-common" "4.17.0" - "@algolia/transporter" "4.17.0" + "@algolia/client-common" "4.18.0" + "@algolia/requester-common" "4.18.0" + "@algolia/transporter" "4.18.0" -"@algolia/client-search@4.17.0": - version "4.17.0" - resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.17.0.tgz#0053c682f5f588e006c20791c27e8bcb0aa5b53c" - integrity sha512-x4P2wKrrRIXszT8gb7eWsMHNNHAJs0wE7/uqbufm4tZenAp+hwU/hq5KVsY50v+PfwM0LcDwwn/1DroujsTFoA== +"@algolia/client-search@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.18.0.tgz#83b37aacbe254fd7892154fe7a8f0395bd01c682" + integrity sha512-F9xzQXTjm6UuZtnsLIew6KSraXQ0AzS/Ee+OD+mQbtcA/K1sg89tqb8TkwjtiYZ0oij13u3EapB3gPZwm+1Y6g== dependencies: - "@algolia/client-common" "4.17.0" - "@algolia/requester-common" "4.17.0" - "@algolia/transporter" "4.17.0" + "@algolia/client-common" "4.18.0" + "@algolia/requester-common" "4.18.0" + "@algolia/transporter" "4.18.0" "@algolia/events@^4.0.1": version "4.0.1" resolved "https://registry.yarnpkg.com/@algolia/events/-/events-4.0.1.tgz#fd39e7477e7bc703d7f893b556f676c032af3950" integrity sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ== -"@algolia/logger-common@4.17.0": - version "4.17.0" - resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.17.0.tgz#0fcea39c9485554edb4cdbfd965c5748b0b837ac" - integrity sha512-DGuoZqpTmIKJFDeyAJ7M8E/LOenIjWiOsg1XJ1OqAU/eofp49JfqXxbfgctlVZVmDABIyOz8LqEoJ6ZP4DTyvw== +"@algolia/logger-common@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.18.0.tgz#0e6a14e8b91fcb7861595169e1ca57cf219f8255" + integrity sha512-46etYgSlkoKepkMSyaoriSn2JDgcrpc/nkOgou/lm0y17GuMl9oYZxwKKTSviLKI5Irk9nSKGwnBTQYwXOYdRg== -"@algolia/logger-console@4.17.0": - version "4.17.0" - resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.17.0.tgz#8ac56ef4259c4fa3eb9eb6586c7b4b4ed942e8da" - integrity sha512-zMPvugQV/gbXUvWBCzihw6m7oxIKp48w37QBIUu/XqQQfxhjoOE9xyfJr1KldUt5FrYOKZJVsJaEjTsu+bIgQg== +"@algolia/logger-console@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.18.0.tgz#3636e4b3e2154ee2ee2db2e5be2857203c9f7047" + integrity sha512-3P3VUYMl9CyJbi/UU1uUNlf6Z8N2ltW3Oqhq/nR7vH0CjWv32YROq3iGWGxB2xt3aXobdUPXs6P0tHSKRmNA6g== dependencies: - "@algolia/logger-common" "4.17.0" + "@algolia/logger-common" "4.18.0" -"@algolia/requester-browser-xhr@4.17.0": - version "4.17.0" - resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.17.0.tgz#f52fdeeac2f3c531f00838920af33a73066a159b" - integrity sha512-aSOX/smauyTkP21Pf52pJ1O2LmNFJ5iHRIzEeTh0mwBeADO4GdG94cAWDILFA9rNblq/nK3EDh3+UyHHjplZ1A== +"@algolia/requester-browser-xhr@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.18.0.tgz#90ac575946e0ab196cdd87593b3fed563a32a9af" + integrity sha512-/AcWHOBub2U4TE/bPi4Gz1XfuLK6/7dj4HJG+Z2SfQoS1RjNLshZclU3OoKIkFp8D2NC7+BNsPvr9cPLyW8nyQ== dependencies: - "@algolia/requester-common" "4.17.0" + "@algolia/requester-common" "4.18.0" -"@algolia/requester-common@4.17.0": - version "4.17.0" - resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.17.0.tgz#746020d2cbc829213e7cede8eef2182c7a71e32b" - integrity sha512-XJjmWFEUlHu0ijvcHBoixuXfEoiRUdyzQM6YwTuB8usJNIgShua8ouFlRWF8iCeag0vZZiUm4S2WCVBPkdxFgg== +"@algolia/requester-common@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.18.0.tgz#12984aa4b10679ffa863536ceeae33cdd0ee4d42" + integrity sha512-xlT8R1qYNRBCi1IYLsx7uhftzdfsLPDGudeQs+xvYB4sQ3ya7+ppolB/8m/a4F2gCkEO6oxpp5AGemM7kD27jA== -"@algolia/requester-node-http@4.17.0": - version "4.17.0" - resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.17.0.tgz#262276d94c25a4ec2128b1bdfb9471529528d8b9" - integrity sha512-bpb/wDA1aC6WxxM8v7TsFspB7yBN3nqCGs2H1OADolQR/hiAIjAxusbuMxVbRFOdaUvAIqioIIkWvZdpYNIn8w== +"@algolia/requester-node-http@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.18.0.tgz#8046b141c784cc7778bcf51e8a7888cce463754b" + integrity sha512-TGfwj9aeTVgOUhn5XrqBhwUhUUDnGIKlI0kCBMdR58XfXcfdwomka+CPIgThRbfYw04oQr31A6/95ZH2QVJ9UQ== dependencies: - "@algolia/requester-common" "4.17.0" + "@algolia/requester-common" "4.18.0" -"@algolia/transporter@4.17.0": - version "4.17.0" - resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.17.0.tgz#6aabdbc20c475d72d83c8e6519f1191f1a51fb37" - integrity sha512-6xL6H6fe+Fi0AEP3ziSgC+G04RK37iRb4uUUqVAH9WPYFI8g+LYFq6iv5HS8Cbuc5TTut+Bwj6G+dh/asdb9uA== +"@algolia/transporter@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.18.0.tgz#18de645c20fc5703196b2ad4fec55e98c315a1d8" + integrity sha512-xbw3YRUGtXQNG1geYFEDDuFLZt4Z8YNKbamHPkzr3rWc6qp4/BqEeXcI2u/P/oMq2yxtXgMxrCxOPA8lyIe5jw== dependencies: - "@algolia/cache-common" "4.17.0" - "@algolia/logger-common" "4.17.0" - "@algolia/requester-common" "4.17.0" + "@algolia/cache-common" "4.18.0" + "@algolia/logger-common" "4.18.0" + "@algolia/requester-common" "4.18.0" "@ampproject/remapping@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" - integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + version "2.2.1" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== dependencies: - "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.21.4", "@babel/code-frame@^7.8.3": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" - integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.22.5", "@babel/code-frame@^7.8.3": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658" + integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ== dependencies: - "@babel/highlight" "^7.18.6" + "@babel/highlight" "^7.22.5" -"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.4.tgz#457ffe647c480dff59c2be092fc3acf71195c87f" - integrity sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g== +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.5.tgz#b1f6c86a02d85d2dd3368a2b67c09add8cd0c255" + integrity sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA== "@babel/core@7.12.9": version "7.12.9" @@ -173,88 +181,89 @@ source-map "^0.5.0" "@babel/core@^7.18.6", "@babel/core@^7.19.6", "@babel/core@^7.21.3": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.4.tgz#c6dc73242507b8e2a27fd13a9c1814f9fa34a659" - integrity sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA== + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.5.tgz#d67d9747ecf26ee7ecd3ebae1ee22225fe902a89" + integrity sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.21.4" - "@babel/generator" "^7.21.4" - "@babel/helper-compilation-targets" "^7.21.4" - "@babel/helper-module-transforms" "^7.21.2" - "@babel/helpers" "^7.21.0" - "@babel/parser" "^7.21.4" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.4" - "@babel/types" "^7.21.4" + "@babel/code-frame" "^7.22.5" + "@babel/generator" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helpers" "^7.22.5" + "@babel/parser" "^7.22.5" + "@babel/template" "^7.22.5" + "@babel/traverse" "^7.22.5" + "@babel/types" "^7.22.5" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.2" semver "^6.3.0" -"@babel/generator@^7.12.5", "@babel/generator@^7.18.7", "@babel/generator@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.4.tgz#64a94b7448989f421f919d5239ef553b37bb26bc" - integrity sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA== +"@babel/generator@^7.12.5", "@babel/generator@^7.18.7", "@babel/generator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.5.tgz#1e7bf768688acfb05cf30b2369ef855e82d984f7" + integrity sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA== dependencies: - "@babel/types" "^7.21.4" + "@babel/types" "^7.22.5" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/helper-annotate-as-pure@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" - integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== +"@babel/helper-annotate-as-pure@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" + integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== dependencies: - "@babel/types" "^7.18.6" + "@babel/types" "^7.22.5" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz#acd4edfd7a566d1d51ea975dff38fd52906981bb" - integrity sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz#a3f4758efdd0190d8927fcffd261755937c71878" + integrity sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw== dependencies: - "@babel/helper-explode-assignable-expression" "^7.18.6" - "@babel/types" "^7.18.9" + "@babel/types" "^7.22.5" -"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz#770cd1ce0889097ceacb99418ee6934ef0572656" - integrity sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg== +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz#fc7319fc54c5e2fa14b2909cf3c5fd3046813e02" + integrity sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw== dependencies: - "@babel/compat-data" "^7.21.4" - "@babel/helper-validator-option" "^7.21.0" + "@babel/compat-data" "^7.22.5" + "@babel/helper-validator-option" "^7.22.5" browserslist "^4.21.3" lru-cache "^5.1.1" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.4.tgz#3a017163dc3c2ba7deb9a7950849a9586ea24c18" - integrity sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.21.0" - "@babel/helper-member-expression-to-functions" "^7.21.0" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-replace-supers" "^7.20.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" - "@babel/helper-split-export-declaration" "^7.18.6" - -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.20.5": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.4.tgz#40411a8ab134258ad2cf3a3d987ec6aa0723cee5" - integrity sha512-M00OuhU+0GyZ5iBBN9czjugzWrEq2vDpf/zCYHxxf93ul/Q5rv+a5h+/+0WnI1AebHNVtl5bFV0qsJoH23DbfA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" +"@babel/helper-create-class-features-plugin@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz#2192a1970ece4685fbff85b48da2c32fcb130b7c" + integrity sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-member-expression-to-functions" "^7.22.5" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.5" + semver "^6.3.0" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz#bb2bf0debfe39b831986a4efbf4066586819c6e4" + integrity sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" regexpu-core "^5.3.1" + semver "^6.3.0" -"@babel/helper-define-polyfill-provider@^0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a" - integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww== +"@babel/helper-define-polyfill-provider@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz#487053f103110f25b9755c5980e031e93ced24d8" + integrity sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg== dependencies: "@babel/helper-compilation-targets" "^7.17.7" "@babel/helper-plugin-utils" "^7.16.7" @@ -263,259 +272,177 @@ resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-environment-visitor@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" - integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== +"@babel/helper-environment-visitor@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98" + integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== -"@babel/helper-explode-assignable-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096" - integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg== +"@babel/helper-function-name@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be" + integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== dependencies: - "@babel/types" "^7.18.6" + "@babel/template" "^7.22.5" + "@babel/types" "^7.22.5" -"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0", "@babel/helper-function-name@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4" - integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg== +"@babel/helper-hoist-variables@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== dependencies: - "@babel/template" "^7.20.7" - "@babel/types" "^7.21.0" + "@babel/types" "^7.22.5" -"@babel/helper-hoist-variables@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" - integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== +"@babel/helper-member-expression-to-functions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz#0a7c56117cad3372fbf8d2fb4bf8f8d64a1e76b2" + integrity sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ== dependencies: - "@babel/types" "^7.18.6" + "@babel/types" "^7.22.5" -"@babel/helper-member-expression-to-functions@^7.20.7", "@babel/helper-member-expression-to-functions@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz#319c6a940431a133897148515877d2f3269c3ba5" - integrity sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q== +"@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c" + integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg== dependencies: - "@babel/types" "^7.21.0" + "@babel/types" "^7.22.5" -"@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz#ac88b2f76093637489e718a90cec6cf8a9b029af" - integrity sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg== +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz#0f65daa0716961b6e96b164034e737f60a80d2ef" + integrity sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw== dependencies: - "@babel/types" "^7.21.4" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.5" + "@babel/template" "^7.22.5" + "@babel/traverse" "^7.22.5" + "@babel/types" "^7.22.5" -"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.20.11", "@babel/helper-module-transforms@^7.21.2": - version "7.21.2" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz#160caafa4978ac8c00ac66636cb0fa37b024e2d2" - integrity sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-simple-access" "^7.20.2" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.19.1" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.2" - "@babel/types" "^7.21.2" - -"@babel/helper-optimise-call-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" - integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== +"@babel/helper-optimise-call-expression@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" + integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== dependencies: - "@babel/types" "^7.18.6" + "@babel/types" "^7.22.5" "@babel/helper-plugin-utils@7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" - integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== - -"@babel/helper-remap-async-to-generator@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" - integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-wrap-function" "^7.18.9" - "@babel/types" "^7.18.9" - -"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz#243ecd2724d2071532b2c8ad2f0f9f083bcae331" - integrity sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-member-expression-to-functions" "^7.20.7" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.7" - "@babel/types" "^7.20.7" - -"@babel/helper-simple-access@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" - integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== - dependencies: - "@babel/types" "^7.20.2" - -"@babel/helper-skip-transparent-expression-wrappers@^7.20.0": - version "7.20.0" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684" - integrity sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg== - dependencies: - "@babel/types" "^7.20.0" - -"@babel/helper-split-export-declaration@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" - integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-string-parser@^7.19.4": - version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" - integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== - -"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" - integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== - -"@babel/helper-validator-option@^7.18.6", "@babel/helper-validator-option@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" - integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== - -"@babel/helper-wrap-function@^7.18.9": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz#75e2d84d499a0ab3b31c33bcfe59d6b8a45f62e3" - integrity sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q== - dependencies: - "@babel/helper-function-name" "^7.19.0" - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.20.5" - "@babel/types" "^7.20.5" - -"@babel/helpers@^7.12.5", "@babel/helpers@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.21.0.tgz#9dd184fb5599862037917cdc9eecb84577dc4e7e" - integrity sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA== - dependencies: - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.0" - "@babel/types" "^7.21.0" - -"@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== - dependencies: - "@babel/helper-validator-identifier" "^7.18.6" +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" + integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== + +"@babel/helper-remap-async-to-generator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz#14a38141a7bf2165ad38da61d61cf27b43015da2" + integrity sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-wrap-function" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/helper-replace-supers@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz#71bc5fb348856dea9fdc4eafd7e2e49f585145dc" + integrity sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg== + dependencies: + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-member-expression-to-functions" "^7.22.5" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/template" "^7.22.5" + "@babel/traverse" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/helper-simple-access@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" + integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-skip-transparent-expression-wrappers@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" + integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-split-export-declaration@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz#88cf11050edb95ed08d596f7a044462189127a08" + integrity sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-string-parser@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" + integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== + +"@babel/helper-validator-identifier@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193" + integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== + +"@babel/helper-validator-option@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz#de52000a15a177413c8234fa3a8af4ee8102d0ac" + integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw== + +"@babel/helper-wrap-function@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz#44d205af19ed8d872b4eefb0d2fa65f45eb34f06" + integrity sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw== + dependencies: + "@babel/helper-function-name" "^7.22.5" + "@babel/template" "^7.22.5" + "@babel/traverse" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/helpers@^7.12.5", "@babel/helpers@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.5.tgz#74bb4373eb390d1ceed74a15ef97767e63120820" + integrity sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q== + dependencies: + "@babel/template" "^7.22.5" + "@babel/traverse" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/highlight@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031" + integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw== + dependencies: + "@babel/helper-validator-identifier" "^7.22.5" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.12.7", "@babel/parser@^7.18.8", "@babel/parser@^7.20.7", "@babel/parser@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.4.tgz#94003fdfc520bbe2875d4ae557b43ddb6d880f17" - integrity sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw== - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" - integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" +"@babel/parser@^7.12.7", "@babel/parser@^7.18.8", "@babel/parser@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.5.tgz#721fd042f3ce1896238cf1b341c77eb7dee7dbea" + integrity sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q== -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz#d9c85589258539a22a901033853101a6198d4ef1" - integrity sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz#87245a21cd69a73b0b81bcda98d443d6df08f05e" + integrity sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" - "@babel/plugin-proposal-optional-chaining" "^7.20.7" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-proposal-async-generator-functions@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz#bfb7276d2d573cb67ba379984a2334e262ba5326" - integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz#fef09f9499b1f1c930da8a0c419db42167d792ca" + integrity sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g== dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-remap-async-to-generator" "^7.18.9" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-proposal-class-properties@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" - integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-proposal-class-static-block@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz#77bdd66fb7b605f3a61302d224bdfacf5547977d" - integrity sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.21.0" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-proposal-dynamic-import@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" - integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-proposal-export-namespace-from@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" - integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-proposal-json-strings@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" - integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-proposal-logical-assignment-operators@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz#dfbcaa8f7b4d37b51e8bfb46d94a5aea2bb89d83" - integrity sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" - integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-proposal-numeric-separator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" - integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.22.5" "@babel/plugin-proposal-object-rest-spread@7.12.1": version "7.12.1" @@ -526,53 +453,12 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.0" "@babel/plugin-transform-parameters" "^7.12.1" -"@babel/plugin-proposal-object-rest-spread@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a" - integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== - dependencies: - "@babel/compat-data" "^7.20.5" - "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.20.7" - -"@babel/plugin-proposal-optional-catch-binding@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" - integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-proposal-optional-chaining@^7.20.7", "@babel/plugin-proposal-optional-chaining@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" - integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-proposal-private-methods@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" - integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-proposal-private-property-in-object@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz#19496bd9883dd83c23c7d7fc45dcd9ad02dfa1dc" - integrity sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-create-class-features-plugin" "^7.21.0" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== -"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": +"@babel/plugin-proposal-unicode-property-regex@^7.4.4": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== @@ -615,12 +501,26 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-import-assertions@^7.20.0": - version "7.20.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz#bb50e0d4bea0957235390641209394e87bdb9cc4" - integrity sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ== +"@babel/plugin-syntax-import-assertions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98" + integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg== dependencies: - "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-import-attributes@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz#ab840248d834410b829f569f5262b9e517555ecb" + integrity sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-import-meta@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" @@ -636,12 +536,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-jsx@^7.18.6", "@babel/plugin-syntax-jsx@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz#f264ed7bf40ffc9ec239edabc17a50c4f5b6fea2" - integrity sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ== +"@babel/plugin-syntax-jsx@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918" + integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" @@ -699,358 +599,491 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.20.0": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz#2751948e9b7c6d771a8efa59340c15d4a2891ff8" - integrity sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA== +"@babel/plugin-syntax-typescript@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" + integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-arrow-functions@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz#bea332b0e8b2dab3dafe55a163d8227531ab0551" - integrity sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ== +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-async-to-generator@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz#dfee18623c8cb31deb796aa3ca84dda9cea94354" - integrity sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q== +"@babel/plugin-transform-arrow-functions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958" + integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== dependencies: - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-remap-async-to-generator" "^7.18.9" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-block-scoped-functions@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" - integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== +"@babel/plugin-transform-async-generator-functions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz#7336356d23380eda9a56314974f053a020dab0c3" + integrity sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.5" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-transform-async-to-generator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775" + integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== + dependencies: + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.5" -"@babel/plugin-transform-block-scoping@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz#e737b91037e5186ee16b76e7ae093358a5634f02" - integrity sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - -"@babel/plugin-transform-classes@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz#f469d0b07a4c5a7dbb21afad9e27e57b47031665" - integrity sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.21.0" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-replace-supers" "^7.20.7" - "@babel/helper-split-export-declaration" "^7.18.6" +"@babel/plugin-transform-block-scoped-functions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024" + integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-block-scoping@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz#8bfc793b3a4b2742c0983fadc1480d843ecea31b" + integrity sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-class-properties@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77" + integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-class-static-block@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz#3e40c46f048403472d6f4183116d5e46b1bff5ba" + integrity sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-transform-classes@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz#635d4e98da741fad814984639f4c0149eb0135e1" + integrity sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.5" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz#704cc2fd155d1c996551db8276d55b9d46e4d0aa" - integrity sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ== +"@babel/plugin-transform-computed-properties@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869" + integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/template" "^7.20.7" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/template" "^7.22.5" -"@babel/plugin-transform-destructuring@^7.21.3": - version "7.21.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz#73b46d0fd11cd6ef57dea8a381b1215f4959d401" - integrity sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA== +"@babel/plugin-transform-destructuring@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz#d3aca7438f6c26c78cdd0b0ba920a336001b27cc" + integrity sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" - integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== +"@babel/plugin-transform-dotall-regex@^7.22.5", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165" + integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-duplicate-keys@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" - integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== +"@babel/plugin-transform-duplicate-keys@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz#b6e6428d9416f5f0bba19c70d1e6e7e0b88ab285" + integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-exponentiation-operator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd" - integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== +"@babel/plugin-transform-dynamic-import@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz#d6908a8916a810468c4edff73b5b75bda6ad393e" + integrity sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-transform-for-of@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz#964108c9988de1a60b4be2354a7d7e245f36e86e" - integrity sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ== +"@babel/plugin-transform-exponentiation-operator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz#402432ad544a1f9a480da865fda26be653e48f6a" + integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-function-name@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0" - integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== +"@babel/plugin-transform-export-namespace-from@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz#57c41cb1d0613d22f548fddd8b288eedb9973a5b" + integrity sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg== dependencies: - "@babel/helper-compilation-targets" "^7.18.9" - "@babel/helper-function-name" "^7.18.9" - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-transform-literals@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc" - integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== +"@babel/plugin-transform-for-of@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz#ab1b8a200a8f990137aff9a084f8de4099ab173f" + integrity sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-member-expression-literals@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" - integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== +"@babel/plugin-transform-function-name@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143" + integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-amd@^7.20.11": - version "7.20.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz#3daccca8e4cc309f03c3a0c4b41dc4b26f55214a" - integrity sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g== +"@babel/plugin-transform-json-strings@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz#14b64352fdf7e1f737eed68de1a1468bd2a77ec0" + integrity sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A== dependencies: - "@babel/helper-module-transforms" "^7.20.11" - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-transform-modules-commonjs@^7.21.2": - version "7.21.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz#6ff5070e71e3192ef2b7e39820a06fb78e3058e7" - integrity sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA== +"@babel/plugin-transform-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920" + integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== dependencies: - "@babel/helper-module-transforms" "^7.21.2" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-simple-access" "^7.20.2" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-systemjs@^7.20.11": - version "7.20.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz#467ec6bba6b6a50634eea61c9c232654d8a4696e" - integrity sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw== +"@babel/plugin-transform-logical-assignment-operators@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz#66ae5f068fd5a9a5dc570df16f56c2a8462a9d6c" + integrity sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA== dependencies: - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-module-transforms" "^7.20.11" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-validator-identifier" "^7.19.1" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-transform-modules-umd@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" - integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== +"@babel/plugin-transform-member-expression-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def" + integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== dependencies: - "@babel/helper-module-transforms" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-named-capturing-groups-regex@^7.20.5": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz#626298dd62ea51d452c3be58b285d23195ba69a8" - integrity sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA== +"@babel/plugin-transform-modules-amd@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz#4e045f55dcf98afd00f85691a68fc0780704f526" + integrity sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.20.5" - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-new-target@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8" - integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== +"@babel/plugin-transform-modules-commonjs@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz#7d9875908d19b8c0536085af7b053fd5bd651bfa" + integrity sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-simple-access" "^7.22.5" -"@babel/plugin-transform-object-super@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" - integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== +"@babel/plugin-transform-modules-systemjs@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz#18c31410b5e579a0092638f95c896c2a98a5d496" + integrity sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-replace-supers" "^7.18.6" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.5" -"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.21.3": - version "7.21.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz#18fc4e797cf6d6d972cb8c411dbe8a809fa157db" - integrity sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ== +"@babel/plugin-transform-modules-umd@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz#4694ae40a87b1745e3775b6a7fe96400315d4f98" + integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-property-literals@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" - integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== +"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" + integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-new-target@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d" + integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-nullish-coalescing-operator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz#f8872c65776e0b552e0849d7596cddd416c3e381" + integrity sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-transform-numeric-separator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz#57226a2ed9e512b9b446517ab6fa2d17abb83f58" + integrity sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-transform-object-rest-spread@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz#9686dc3447df4753b0b2a2fae7e8bc33cdc1f2e1" + integrity sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ== + dependencies: + "@babel/compat-data" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.22.5" + +"@babel/plugin-transform-object-super@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c" + integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.5" + +"@babel/plugin-transform-optional-catch-binding@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz#842080be3076703be0eaf32ead6ac8174edee333" + integrity sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-transform-optional-chaining@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz#1003762b9c14295501beb41be72426736bedd1e0" + integrity sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz#c3542dd3c39b42c8069936e48717a8d179d63a18" + integrity sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-private-methods@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722" + integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-private-property-in-object@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz#07a77f28cbb251546a43d175a1dda4cf3ef83e32" + integrity sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-transform-property-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766" + integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-react-constant-elements@^7.18.12", "@babel/plugin-transform-react-constant-elements@^7.21.3": - version "7.21.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.21.3.tgz#b32a5556100d424b25e388dd689050d78396884d" - integrity sha512-4DVcFeWe/yDYBLp0kBmOGFJ6N2UYg7coGid1gdxb4co62dy/xISDMaYBXBVXEDhfgMk7qkbcYiGtwd5Q/hwDDQ== + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.22.5.tgz#6dfa7c1c37f7d7279e417ceddf5a04abb8bb9c29" + integrity sha512-BF5SXoO+nX3h5OhlN78XbbDrBOffv+AxPP2ENaJOVqjWCgBDeOY3WcaUcddutGSfoap+5NEQ/q/4I3WZIvgkXA== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-react-display-name@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz#8b1125f919ef36ebdfff061d664e266c666b9415" - integrity sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA== +"@babel/plugin-transform-react-display-name@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz#3c4326f9fce31c7968d6cb9debcaf32d9e279a2b" + integrity sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-react-jsx-development@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5" - integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA== +"@babel/plugin-transform-react-jsx-development@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz#e716b6edbef972a92165cd69d92f1255f7e73e87" + integrity sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A== dependencies: - "@babel/plugin-transform-react-jsx" "^7.18.6" + "@babel/plugin-transform-react-jsx" "^7.22.5" -"@babel/plugin-transform-react-jsx@^7.18.6": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.0.tgz#656b42c2fdea0a6d8762075d58ef9d4e3c4ab8a2" - integrity sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg== +"@babel/plugin-transform-react-jsx@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz#932c291eb6dd1153359e2a90cb5e557dcf068416" + integrity sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA== dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-jsx" "^7.18.6" - "@babel/types" "^7.21.0" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-jsx" "^7.22.5" + "@babel/types" "^7.22.5" -"@babel/plugin-transform-react-pure-annotations@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz#561af267f19f3e5d59291f9950fd7b9663d0d844" - integrity sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ== +"@babel/plugin-transform-react-pure-annotations@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz#1f58363eef6626d6fa517b95ac66fe94685e32c0" + integrity sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA== dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-regenerator@^7.20.5": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz#57cda588c7ffb7f4f8483cc83bdcea02a907f04d" - integrity sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ== +"@babel/plugin-transform-regenerator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz#cd8a68b228a5f75fa01420e8cc2fc400f0fc32aa" + integrity sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-plugin-utils" "^7.22.5" regenerator-transform "^0.15.1" -"@babel/plugin-transform-reserved-words@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" - integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== +"@babel/plugin-transform-reserved-words@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb" + integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-runtime@^7.18.6": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.21.4.tgz#2e1da21ca597a7d01fc96b699b21d8d2023191aa" - integrity sha512-1J4dhrw1h1PqnNNpzwxQ2UBymJUF8KuPjAAnlLwZcGhHAIqUigFW7cdK6GHoB64ubY4qXQNYknoUeks4Wz7CUA== - dependencies: - "@babel/helper-module-imports" "^7.21.4" - "@babel/helper-plugin-utils" "^7.20.2" - babel-plugin-polyfill-corejs2 "^0.3.3" - babel-plugin-polyfill-corejs3 "^0.6.0" - babel-plugin-polyfill-regenerator "^0.4.1" + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz#ca975fb5e260044473c8142e1b18b567d33c2a3b" + integrity sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw== + dependencies: + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + babel-plugin-polyfill-corejs2 "^0.4.3" + babel-plugin-polyfill-corejs3 "^0.8.1" + babel-plugin-polyfill-regenerator "^0.5.0" semver "^6.3.0" -"@babel/plugin-transform-shorthand-properties@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" - integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== +"@babel/plugin-transform-shorthand-properties@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624" + integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-spread@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz#c2d83e0b99d3bf83e07b11995ee24bf7ca09401e" - integrity sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw== +"@babel/plugin-transform-spread@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b" + integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -"@babel/plugin-transform-sticky-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc" - integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== +"@babel/plugin-transform-sticky-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa" + integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-template-literals@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e" - integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== +"@babel/plugin-transform-template-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff" + integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-typeof-symbol@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0" - integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== +"@babel/plugin-transform-typeof-symbol@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz#5e2ba478da4b603af8673ff7c54f75a97b716b34" + integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-typescript@^7.21.3": - version "7.21.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.3.tgz#316c5be579856ea890a57ebc5116c5d064658f2b" - integrity sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw== +"@babel/plugin-transform-typescript@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.5.tgz#5c0f7adfc1b5f38c4dbc8f79b1f0f8074134bd7d" + integrity sha512-SMubA9S7Cb5sGSFFUlqxyClTA9zWJ8qGQrppNUm05LtFuN1ELRFNndkix4zUJrC9F+YivWwa1dHMSyo0e0N9dA== dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-create-class-features-plugin" "^7.21.0" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-typescript" "^7.20.0" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-typescript" "^7.22.5" -"@babel/plugin-transform-unicode-escapes@^7.18.10": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz#1ecfb0eda83d09bbcb77c09970c2dd55832aa246" - integrity sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ== +"@babel/plugin-transform-unicode-escapes@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz#ce0c248522b1cb22c7c992d88301a5ead70e806c" + integrity sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" - integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== +"@babel/plugin-transform-unicode-property-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz#098898f74d5c1e86660dc112057b2d11227f1c81" + integrity sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183" + integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-sets-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz#77788060e511b708ffc7d42fdfbc5b37c3004e91" + integrity sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/preset-env@^7.18.6", "@babel/preset-env@^7.19.4", "@babel/preset-env@^7.20.2": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.21.4.tgz#a952482e634a8dd8271a3fe5459a16eb10739c58" - integrity sha512-2W57zHs2yDLm6GD5ZpvNn71lZ0B/iypSdIeq25OurDKji6AdzV07qp4s3n1/x5BqtiGaTrPN3nerlSCaC5qNTw== - dependencies: - "@babel/compat-data" "^7.21.4" - "@babel/helper-compilation-targets" "^7.21.4" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-validator-option" "^7.21.0" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.20.7" - "@babel/plugin-proposal-async-generator-functions" "^7.20.7" - "@babel/plugin-proposal-class-properties" "^7.18.6" - "@babel/plugin-proposal-class-static-block" "^7.21.0" - "@babel/plugin-proposal-dynamic-import" "^7.18.6" - "@babel/plugin-proposal-export-namespace-from" "^7.18.9" - "@babel/plugin-proposal-json-strings" "^7.18.6" - "@babel/plugin-proposal-logical-assignment-operators" "^7.20.7" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" - "@babel/plugin-proposal-numeric-separator" "^7.18.6" - "@babel/plugin-proposal-object-rest-spread" "^7.20.7" - "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" - "@babel/plugin-proposal-optional-chaining" "^7.21.0" - "@babel/plugin-proposal-private-methods" "^7.18.6" - "@babel/plugin-proposal-private-property-in-object" "^7.21.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.5.tgz#3da66078b181f3d62512c51cf7014392c511504e" + integrity sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A== + dependencies: + "@babel/compat-data" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.5" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.5" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.5" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.20.0" + "@babel/plugin-syntax-import-assertions" "^7.22.5" + "@babel/plugin-syntax-import-attributes" "^7.22.5" + "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" @@ -1060,44 +1093,61 @@ "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.20.7" - "@babel/plugin-transform-async-to-generator" "^7.20.7" - "@babel/plugin-transform-block-scoped-functions" "^7.18.6" - "@babel/plugin-transform-block-scoping" "^7.21.0" - "@babel/plugin-transform-classes" "^7.21.0" - "@babel/plugin-transform-computed-properties" "^7.20.7" - "@babel/plugin-transform-destructuring" "^7.21.3" - "@babel/plugin-transform-dotall-regex" "^7.18.6" - "@babel/plugin-transform-duplicate-keys" "^7.18.9" - "@babel/plugin-transform-exponentiation-operator" "^7.18.6" - "@babel/plugin-transform-for-of" "^7.21.0" - "@babel/plugin-transform-function-name" "^7.18.9" - "@babel/plugin-transform-literals" "^7.18.9" - "@babel/plugin-transform-member-expression-literals" "^7.18.6" - "@babel/plugin-transform-modules-amd" "^7.20.11" - "@babel/plugin-transform-modules-commonjs" "^7.21.2" - "@babel/plugin-transform-modules-systemjs" "^7.20.11" - "@babel/plugin-transform-modules-umd" "^7.18.6" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.20.5" - "@babel/plugin-transform-new-target" "^7.18.6" - "@babel/plugin-transform-object-super" "^7.18.6" - "@babel/plugin-transform-parameters" "^7.21.3" - "@babel/plugin-transform-property-literals" "^7.18.6" - "@babel/plugin-transform-regenerator" "^7.20.5" - "@babel/plugin-transform-reserved-words" "^7.18.6" - "@babel/plugin-transform-shorthand-properties" "^7.18.6" - "@babel/plugin-transform-spread" "^7.20.7" - "@babel/plugin-transform-sticky-regex" "^7.18.6" - "@babel/plugin-transform-template-literals" "^7.18.9" - "@babel/plugin-transform-typeof-symbol" "^7.18.9" - "@babel/plugin-transform-unicode-escapes" "^7.18.10" - "@babel/plugin-transform-unicode-regex" "^7.18.6" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.22.5" + "@babel/plugin-transform-async-generator-functions" "^7.22.5" + "@babel/plugin-transform-async-to-generator" "^7.22.5" + "@babel/plugin-transform-block-scoped-functions" "^7.22.5" + "@babel/plugin-transform-block-scoping" "^7.22.5" + "@babel/plugin-transform-class-properties" "^7.22.5" + "@babel/plugin-transform-class-static-block" "^7.22.5" + "@babel/plugin-transform-classes" "^7.22.5" + "@babel/plugin-transform-computed-properties" "^7.22.5" + "@babel/plugin-transform-destructuring" "^7.22.5" + "@babel/plugin-transform-dotall-regex" "^7.22.5" + "@babel/plugin-transform-duplicate-keys" "^7.22.5" + "@babel/plugin-transform-dynamic-import" "^7.22.5" + "@babel/plugin-transform-exponentiation-operator" "^7.22.5" + "@babel/plugin-transform-export-namespace-from" "^7.22.5" + "@babel/plugin-transform-for-of" "^7.22.5" + "@babel/plugin-transform-function-name" "^7.22.5" + "@babel/plugin-transform-json-strings" "^7.22.5" + "@babel/plugin-transform-literals" "^7.22.5" + "@babel/plugin-transform-logical-assignment-operators" "^7.22.5" + "@babel/plugin-transform-member-expression-literals" "^7.22.5" + "@babel/plugin-transform-modules-amd" "^7.22.5" + "@babel/plugin-transform-modules-commonjs" "^7.22.5" + "@babel/plugin-transform-modules-systemjs" "^7.22.5" + "@babel/plugin-transform-modules-umd" "^7.22.5" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" + "@babel/plugin-transform-new-target" "^7.22.5" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.5" + "@babel/plugin-transform-numeric-separator" "^7.22.5" + "@babel/plugin-transform-object-rest-spread" "^7.22.5" + "@babel/plugin-transform-object-super" "^7.22.5" + "@babel/plugin-transform-optional-catch-binding" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.22.5" + "@babel/plugin-transform-parameters" "^7.22.5" + "@babel/plugin-transform-private-methods" "^7.22.5" + "@babel/plugin-transform-private-property-in-object" "^7.22.5" + "@babel/plugin-transform-property-literals" "^7.22.5" + "@babel/plugin-transform-regenerator" "^7.22.5" + "@babel/plugin-transform-reserved-words" "^7.22.5" + "@babel/plugin-transform-shorthand-properties" "^7.22.5" + "@babel/plugin-transform-spread" "^7.22.5" + "@babel/plugin-transform-sticky-regex" "^7.22.5" + "@babel/plugin-transform-template-literals" "^7.22.5" + "@babel/plugin-transform-typeof-symbol" "^7.22.5" + "@babel/plugin-transform-unicode-escapes" "^7.22.5" + "@babel/plugin-transform-unicode-property-regex" "^7.22.5" + "@babel/plugin-transform-unicode-regex" "^7.22.5" + "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.21.4" - babel-plugin-polyfill-corejs2 "^0.3.3" - babel-plugin-polyfill-corejs3 "^0.6.0" - babel-plugin-polyfill-regenerator "^0.4.1" - core-js-compat "^3.25.1" + "@babel/types" "^7.22.5" + babel-plugin-polyfill-corejs2 "^0.4.3" + babel-plugin-polyfill-corejs3 "^0.8.1" + babel-plugin-polyfill-regenerator "^0.5.0" + core-js-compat "^3.30.2" semver "^6.3.0" "@babel/preset-modules@^0.1.5": @@ -1112,27 +1162,27 @@ esutils "^2.0.2" "@babel/preset-react@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d" - integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg== + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.22.5.tgz#c4d6058fbf80bccad02dd8c313a9aaa67e3c3dd6" + integrity sha512-M+Is3WikOpEJHgR385HbuCITPTaPRaNkibTEa9oiofmJvIsrceb4yp9RL9Kb+TE8LznmeyZqpP+Lopwcx59xPQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-validator-option" "^7.18.6" - "@babel/plugin-transform-react-display-name" "^7.18.6" - "@babel/plugin-transform-react-jsx" "^7.18.6" - "@babel/plugin-transform-react-jsx-development" "^7.18.6" - "@babel/plugin-transform-react-pure-annotations" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.5" + "@babel/plugin-transform-react-display-name" "^7.22.5" + "@babel/plugin-transform-react-jsx" "^7.22.5" + "@babel/plugin-transform-react-jsx-development" "^7.22.5" + "@babel/plugin-transform-react-pure-annotations" "^7.22.5" "@babel/preset-typescript@^7.18.6", "@babel/preset-typescript@^7.21.0": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.21.4.tgz#b913ac8e6aa8932e47c21b01b4368d8aa239a529" - integrity sha512-sMLNWY37TCdRH/bJ6ZeeOH1nPuanED7Ai9Y/vH31IPqalioJ6ZNFUWONsakhv4r4n+I6gm5lmoE0olkgib/j/A== + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.22.5.tgz#16367d8b01d640e9a507577ed4ee54e0101e51c8" + integrity sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-validator-option" "^7.21.0" - "@babel/plugin-syntax-jsx" "^7.21.4" - "@babel/plugin-transform-modules-commonjs" "^7.21.2" - "@babel/plugin-transform-typescript" "^7.21.3" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.5" + "@babel/plugin-syntax-jsx" "^7.22.5" + "@babel/plugin-transform-modules-commonjs" "^7.22.5" + "@babel/plugin-transform-typescript" "^7.22.5" "@babel/regjsgen@^0.8.0": version "0.8.0" @@ -1140,55 +1190,55 @@ integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== "@babel/runtime-corejs3@^7.18.6": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.21.0.tgz#6e4939d9d9789ff63e2dc58e88f13a3913a24eba" - integrity sha512-TDD4UJzos3JJtM+tHX+w2Uc+KWj7GV+VKKFdMVd2Rx8sdA19hcc3P3AHFYd5LVOw+pYuSd5lICC3gm52B6Rwxw== + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.22.5.tgz#bbc769b48edb2bdfd404b65ad1fc3952bf33e3c2" + integrity sha512-TNPDN6aBFaUox2Lu+H/Y1dKKQgr4ucz/FGyCz67RVYLsBpVpUFf1dDngzg+Od8aqbrqwyztkaZjtWCZEUOT8zA== dependencies: - core-js-pure "^3.25.1" + core-js-pure "^3.30.2" regenerator-runtime "^0.13.11" "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.6", "@babel/runtime@^7.20.13", "@babel/runtime@^7.8.4": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673" - integrity sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw== + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.5.tgz#8564dd588182ce0047d55d7a75e93921107b57ec" + integrity sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA== dependencies: regenerator-runtime "^0.13.11" -"@babel/template@^7.12.7", "@babel/template@^7.18.10", "@babel/template@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" - integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - -"@babel/traverse@^7.12.9", "@babel/traverse@^7.18.8", "@babel/traverse@^7.20.5", "@babel/traverse@^7.20.7", "@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2", "@babel/traverse@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.4.tgz#a836aca7b116634e97a6ed99976236b3282c9d36" - integrity sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q== - dependencies: - "@babel/code-frame" "^7.21.4" - "@babel/generator" "^7.21.4" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.21.0" - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.21.4" - "@babel/types" "^7.21.4" +"@babel/template@^7.12.7", "@babel/template@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec" + integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw== + dependencies: + "@babel/code-frame" "^7.22.5" + "@babel/parser" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/traverse@^7.12.9", "@babel/traverse@^7.18.8", "@babel/traverse@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.5.tgz#44bd276690db6f4940fdb84e1cb4abd2f729ccd1" + integrity sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ== + dependencies: + "@babel/code-frame" "^7.22.5" + "@babel/generator" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.5" + "@babel/parser" "^7.22.5" + "@babel/types" "^7.22.5" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.12.7", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.21.3", "@babel/types@^7.21.4", "@babel/types@^7.4.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.4.tgz#2d5d6bb7908699b3b416409ffd3b5daa25b030d4" - integrity sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA== +"@babel/types@^7.12.7", "@babel/types@^7.20.0", "@babel/types@^7.21.3", "@babel/types@^7.22.5", "@babel/types@^7.4.4": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.5.tgz#cd93eeaab025880a3a47ec881f4b096a5b786fbe" + integrity sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA== dependencies: - "@babel/helper-string-parser" "^7.19.4" - "@babel/helper-validator-identifier" "^7.19.1" + "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.5" to-fast-properties "^2.0.0" -"@braintree/sanitize-url@^6.0.0": +"@braintree/sanitize-url@^6.0.2": version "6.0.2" resolved "https://registry.yarnpkg.com/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz#6110f918d273fe2af8ea1c4398a88774bb9fc12f" integrity sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg== @@ -1203,19 +1253,19 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== -"@docsearch/css@3.3.3": - version "3.3.3" - resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.3.3.tgz#f9346c9e24602218341f51b8ba91eb9109add434" - integrity sha512-6SCwI7P8ao+se1TUsdZ7B4XzL+gqeQZnBc+2EONZlcVa0dVrk0NjETxozFKgMv0eEGH8QzP1fkN+A1rH61l4eg== +"@docsearch/css@3.5.1": + version "3.5.1" + resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.5.1.tgz#4adf9884735bbfea621c3716e80ea97baa419b73" + integrity sha512-2Pu9HDg/uP/IT10rbQ+4OrTQuxIWdKVUEdcw9/w7kZJv9NeHS6skJx1xuRiFyoGKwAzcHXnLp7csE99sj+O1YA== "@docsearch/react@^3.1.1": - version "3.3.3" - resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.3.3.tgz#907b6936a565f880b4c0892624b4f7a9f132d298" - integrity sha512-pLa0cxnl+G0FuIDuYlW+EBK6Rw2jwLw9B1RHIeS4N4s2VhsfJ/wzeCi3CWcs5yVfxLd5ZK50t//TMA5e79YT7Q== + version "3.5.1" + resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.5.1.tgz#35f4a75f948211d8bb6830d2147c575f96a85274" + integrity sha512-t5mEODdLzZq4PTFAm/dvqcvZFdPDMdfPE5rJS5SC8OUq9mPzxEy6b+9THIqNM9P0ocCb4UC5jqBrxKclnuIbzQ== dependencies: - "@algolia/autocomplete-core" "1.7.4" - "@algolia/autocomplete-preset-algolia" "1.7.4" - "@docsearch/css" "3.3.3" + "@algolia/autocomplete-core" "1.9.3" + "@algolia/autocomplete-preset-algolia" "1.9.3" + "@docsearch/css" "3.5.1" algoliasearch "^4.0.0" "@docusaurus/core@2.4.1", "@docusaurus/core@^2.4.1": @@ -1660,18 +1710,10 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" - integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== - dependencies: - "@jridgewell/set-array" "^1.0.0" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" - integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== dependencies: "@jridgewell/set-array" "^1.0.1" "@jridgewell/sourcemap-codec" "^1.4.10" @@ -1682,39 +1724,34 @@ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== -"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": +"@jridgewell/set-array@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== -"@jridgewell/source-map@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" - integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" +"@jridgewell/source-map@^0.3.3": + version "0.3.4" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.4.tgz#856a142864530d4059dda415659b48d37db2d556" + integrity sha512-KE/SxsDqNs3rrWwFHcRh15ZLVFrI0YoZtgAdIyIq9k5hUNmiWRXXThPomIxHuL20sLdgzbDFyvkUMna14bvtrw== -"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": +"@jridgewell/sourcemap-codec@1.4.14": version "1.4.14" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.17" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" - integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== + version "0.3.18" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" + integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== dependencies: "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" -"@khanacademy/simple-markdown@^0.8.6": - version "0.8.6" - resolved "https://registry.yarnpkg.com/@khanacademy/simple-markdown/-/simple-markdown-0.8.6.tgz#9c9aef1f5ce2ce60292d13849165965a57c26f25" - integrity sha512-mAUlR9lchzfqunR89pFvNI51jQKsMpJeWYsYWw0DQcUXczn/T/V6510utgvm7X0N3zN87j1SvuKk8cMbl9IAFw== - dependencies: - "@types/react" ">=16.0.0" - "@leichtgewicht/ip-codec@^2.0.1": version "2.0.4" resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" @@ -1844,12 +1881,22 @@ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-7.0.0.tgz#80856c1b7a3b7422d232f6e079f0beb90c4a13e9" integrity sha512-khWbXesWIP9v8HuKCl2NU2HNAyqpSQ/vkIl36Nbn4HIwEYSRWL0H7Gs6idJdha2DkpFDWlsqMELvoCE8lfFY6Q== -"@svgr/babel-plugin-remove-jsx-attribute@*", "@svgr/babel-plugin-remove-jsx-attribute@^7.0.0": +"@svgr/babel-plugin-remove-jsx-attribute@*": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz#69177f7937233caca3a1afb051906698f2f59186" + integrity sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA== + +"@svgr/babel-plugin-remove-jsx-attribute@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-7.0.0.tgz#91da77a009dc38e8d30da45d9b62ef8736f2d90a" integrity sha512-iiZaIvb3H/c7d3TH2HBeK91uI2rMhZNwnsIrvd7ZwGLkFw6mmunOCoVnjdYua662MqGFxlN9xTq4fv9hgR4VXQ== -"@svgr/babel-plugin-remove-jsx-empty-expression@*", "@svgr/babel-plugin-remove-jsx-empty-expression@^7.0.0": +"@svgr/babel-plugin-remove-jsx-empty-expression@*": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz#c2c48104cfd7dcd557f373b70a56e9e3bdae1d44" + integrity sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA== + +"@svgr/babel-plugin-remove-jsx-empty-expression@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-7.0.0.tgz#5154ff1213509e36ab315974c8c2fd48dafb827b" integrity sha512-sQQmyo+qegBx8DfFc04PFmIO1FP1MHI1/QEpzcIcclo5OAISsOJPW76ZIs0bDyO/DBSJEa/tDa1W26pVtt0FRw== @@ -2063,9 +2110,9 @@ "@types/node" "*" "@types/connect-history-api-fallback@^1.3.5": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae" - integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw== + version "1.5.0" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#9fd20b3974bdc2bcd4ac6567e2e0f6885cb2cf41" + integrity sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig== dependencies: "@types/express-serve-static-core" "*" "@types/node" "*" @@ -2077,6 +2124,13 @@ dependencies: "@types/node" "*" +"@types/debug@^4.0.0": + version "4.1.8" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.8.tgz#cef723a5d0a90990313faec2d1e22aee5eecb317" + integrity sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ== + dependencies: + "@types/ms" "*" + "@types/eslint-scope@^3.7.3": version "3.7.4" resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" @@ -2086,31 +2140,27 @@ "@types/estree" "*" "@types/eslint@*": - version "8.37.0" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.37.0.tgz#29cebc6c2a3ac7fea7113207bf5a828fdf4d7ef1" - integrity sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ== + version "8.40.2" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.40.2.tgz#2833bc112d809677864a4b0e7d1de4f04d7dac2d" + integrity sha512-PRVjQ4Eh9z9pmmtaq8nTjZjQwKFk7YIHIud3lRoKRBgUQjgjRmoGxxGEPXQkF+lH7QkHJRNr5F4aBgYCW0lqpQ== dependencies: "@types/estree" "*" "@types/json-schema" "*" "@types/estree@*", "@types/estree@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" - integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== - -"@types/estree@^0.0.51": - version "0.0.51" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" - integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" + integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": - version "4.17.33" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz#de35d30a9d637dc1450ad18dd583d75d5733d543" - integrity sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA== + version "4.17.35" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz#c95dd4424f0d32e525d23812aa8ab8e4d3906c4f" + integrity sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg== dependencies: "@types/node" "*" "@types/qs" "*" "@types/range-parser" "*" + "@types/send" "*" "@types/express@*", "@types/express@^4.17.13": version "4.17.17" @@ -2139,10 +2189,15 @@ resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== +"@types/http-errors@*": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.1.tgz#20172f9578b225f6c7da63446f56d4ce108d5a65" + integrity sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ== + "@types/http-proxy@^1.17.8": - version "1.17.10" - resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.10.tgz#e576c8e4a0cc5c6a138819025a88e167ebb38d6c" - integrity sha512-Qs5aULi+zV1bwKAg5z1PWnDXWmsn+LxIvUGv6E2+OOMYhclZMO+OXd9pYVf2gLykf2I7IV2u7oTHwChPNsvJ7g== + version "1.17.11" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.11.tgz#0ca21949a5588d55ac2b659b69035c84bd5da293" + integrity sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA== dependencies: "@types/node" "*" @@ -2166,9 +2221,9 @@ "@types/istanbul-lib-report" "*" "@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": - version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + version "7.0.12" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" + integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== "@types/mdast@^3.0.0": version "3.0.11" @@ -2182,15 +2237,25 @@ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== +"@types/mime@^1": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" + integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== + "@types/minimatch@^3.0.3": version "3.0.5" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== +"@types/ms@*": + version "0.7.31" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" + integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== + "@types/node@*": - version "18.15.11" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.11.tgz#b3b790f09cb1696cffcec605de025b088fa4225f" - integrity sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q== + version "20.3.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.3.tgz#329842940042d2b280897150e023e604d11657d6" + integrity sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw== "@types/node@^17.0.5": version "17.0.45" @@ -2223,13 +2288,13 @@ integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== "@types/react-router-config@*", "@types/react-router-config@^5.0.6": - version "5.0.6" - resolved "https://registry.yarnpkg.com/@types/react-router-config/-/react-router-config-5.0.6.tgz#87c5c57e72d241db900d9734512c50ccec062451" - integrity sha512-db1mx37a1EJDf1XeX8jJN7R3PZABmJQXR8r28yUjVMFSjkmnQo6X6pOEEmNl+Tp2gYQOGPdYbFIipBtdElZ3Yg== + version "5.0.7" + resolved "https://registry.yarnpkg.com/@types/react-router-config/-/react-router-config-5.0.7.tgz#36207a3fe08b271abee62b26993ee932d13cbb02" + integrity sha512-pFFVXUIydHlcJP6wJm7sDii5mD/bCmmAY0wQzq+M+uX7bqS95AQqHZWP1iNMKrWVQSuHIzj5qi9BvrtLX2/T4w== dependencies: "@types/history" "^4.7.11" "@types/react" "*" - "@types/react-router" "*" + "@types/react-router" "^5.1.0" "@types/react-router-dom@*": version "5.3.3" @@ -2240,7 +2305,7 @@ "@types/react" "*" "@types/react-router" "*" -"@types/react-router@*": +"@types/react-router@*", "@types/react-router@^5.1.0": version "5.1.20" resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.20.tgz#88eccaa122a82405ef3efbcaaa5dcdd9f021387c" integrity sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q== @@ -2248,10 +2313,10 @@ "@types/history" "^4.7.11" "@types/react" "*" -"@types/react@*", "@types/react@>=16.0.0": - version "18.0.33" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.33.tgz#a1575160cb4376787c2f5fe0312302f824baa61e" - integrity sha512-sHxzVxeanvQyQ1lr8NSHaj0kDzcNiGpILEVt69g9S31/7PfMvNCKLKcsHw4lYKjs3cGNJjXSP4mYzX43QlnjNA== +"@types/react@*": + version "18.2.14" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.14.tgz#fa7a6fecf1ce35ca94e74874f70c56ce88f7a127" + integrity sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -2274,6 +2339,14 @@ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5" integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== +"@types/send@*": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.1.tgz#ed4932b8a2a805f1fe362a70f4e62d0ac994e301" + integrity sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + "@types/serve-index@^1.9.1": version "1.9.1" resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" @@ -2282,10 +2355,11 @@ "@types/express" "*" "@types/serve-static@*", "@types/serve-static@^1.13.10": - version "1.15.1" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.1.tgz#86b1753f0be4f9a1bee68d459fcda5be4ea52b5d" - integrity sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ== + version "1.15.2" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.2.tgz#3e5419ecd1e40e7405d34093f10befb43f63381a" + integrity sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw== dependencies: + "@types/http-errors" "*" "@types/mime" "*" "@types/node" "*" @@ -2301,10 +2375,10 @@ resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== -"@types/ws@^8.5.1": - version "8.5.4" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.4.tgz#bb10e36116d6e570dd943735f86c933c1587b8a5" - integrity sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg== +"@types/ws@^8.5.5": + version "8.5.5" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.5.tgz#af587964aa06682702ee6dcbc7be41a80e4b28eb" + integrity sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg== dependencies: "@types/node" "*" @@ -2320,125 +2394,125 @@ dependencies: "@types/yargs-parser" "*" -"@webassemblyjs/ast@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" - integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== +"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24" + integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== dependencies: - "@webassemblyjs/helper-numbers" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/helper-numbers" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" -"@webassemblyjs/floating-point-hex-parser@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" - integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== +"@webassemblyjs/floating-point-hex-parser@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" + integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== -"@webassemblyjs/helper-api-error@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" - integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== +"@webassemblyjs/helper-api-error@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" + integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== -"@webassemblyjs/helper-buffer@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" - integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== +"@webassemblyjs/helper-buffer@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093" + integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== -"@webassemblyjs/helper-numbers@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" - integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== +"@webassemblyjs/helper-numbers@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" + integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.1" - "@webassemblyjs/helper-api-error" "1.11.1" + "@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.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" - integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== +"@webassemblyjs/helper-wasm-bytecode@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" + integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== -"@webassemblyjs/helper-wasm-section@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" - integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== +"@webassemblyjs/helper-wasm-section@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577" + integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" -"@webassemblyjs/ieee754@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" - integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== +"@webassemblyjs/ieee754@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" + integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/leb128@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" - integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== +"@webassemblyjs/leb128@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" + integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== dependencies: "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" - integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== - -"@webassemblyjs/wasm-edit@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" - integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/helper-wasm-section" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - "@webassemblyjs/wasm-opt" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - "@webassemblyjs/wast-printer" "1.11.1" - -"@webassemblyjs/wasm-gen@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" - integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/ieee754" "1.11.1" - "@webassemblyjs/leb128" "1.11.1" - "@webassemblyjs/utf8" "1.11.1" - -"@webassemblyjs/wasm-opt@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" - integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - -"@webassemblyjs/wasm-parser@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" - integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-api-error" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/ieee754" "1.11.1" - "@webassemblyjs/leb128" "1.11.1" - "@webassemblyjs/utf8" "1.11.1" - -"@webassemblyjs/wast-printer@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" - integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== - dependencies: - "@webassemblyjs/ast" "1.11.1" +"@webassemblyjs/utf8@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" + integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== + +"@webassemblyjs/wasm-edit@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab" + integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/helper-wasm-section" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/wasm-opt" "1.11.6" + "@webassemblyjs/wasm-parser" "1.11.6" + "@webassemblyjs/wast-printer" "1.11.6" + +"@webassemblyjs/wasm-gen@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268" + integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== + dependencies: + "@webassemblyjs/ast" "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/wasm-opt@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2" + integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/wasm-parser" "1.11.6" + +"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1" + integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@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.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20" + integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== + dependencies: + "@webassemblyjs/ast" "1.11.6" "@xtuc/long" "4.2.2" "@xtuc/ieee754@^1.2.0": @@ -2459,20 +2533,20 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: mime-types "~2.1.34" negotiator "0.6.3" -acorn-import-assertions@^1.7.6: - version "1.8.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" - integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== +acorn-import-assertions@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" + integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== acorn-walk@^8.0.0: version "8.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -acorn@^8.0.4, acorn@^8.5.0, acorn@^8.7.1: - version "8.8.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" - integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== +acorn@^8.0.4, acorn@^8.7.1, acorn@^8.8.2: + version "8.9.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.9.0.tgz#78a16e3b2bcc198c10822786fa6679e245db5b59" + integrity sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ== address@^1.0.1, address@^1.1.2: version "1.2.2" @@ -2499,7 +2573,7 @@ ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv-keywords@^5.0.0: +ajv-keywords@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== @@ -2516,7 +2590,7 @@ ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.8.0: +ajv@^8.0.0, ajv@^8.9.0: version "8.12.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== @@ -2527,31 +2601,31 @@ ajv@^8.0.0, ajv@^8.8.0: uri-js "^4.2.2" algoliasearch-helper@^3.10.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.12.0.tgz#0fe39d49b0290e4aa5e1fe733bd24d857d258e94" - integrity sha512-/j1U3PEwdan0n6P/QqSnSpNSLC5+cEMvyljd5CnmNmUjDlGrys+vFEOwjVEnqELIiAGMHEA/Nl3CiKVFBUYqyQ== + version "3.13.3" + resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.13.3.tgz#d23341fb88f490c9b2b83fc2362d1551d52117b6" + integrity sha512-jhbbuYZ+fheXpaJlqdJdFa1jOsrTWKmRRTYDM3oVTto5VodZzM7tT+BHzslAotaJf/81CKrm6yLRQn8WIr/K4A== dependencies: "@algolia/events" "^4.0.1" algoliasearch@^4.0.0, algoliasearch@^4.13.1: - version "4.17.0" - resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.17.0.tgz#46ed58b2b99509d041f11cd1ea83623edf84355f" - integrity sha512-JMRh2Mw6sEnVMiz6+APsi7lx9a2jiDFF+WUtANaUVCv6uSU9UOLdo5h9K3pdP6frRRybaM2fX8b1u0nqICS9aA== - dependencies: - "@algolia/cache-browser-local-storage" "4.17.0" - "@algolia/cache-common" "4.17.0" - "@algolia/cache-in-memory" "4.17.0" - "@algolia/client-account" "4.17.0" - "@algolia/client-analytics" "4.17.0" - "@algolia/client-common" "4.17.0" - "@algolia/client-personalization" "4.17.0" - "@algolia/client-search" "4.17.0" - "@algolia/logger-common" "4.17.0" - "@algolia/logger-console" "4.17.0" - "@algolia/requester-browser-xhr" "4.17.0" - "@algolia/requester-common" "4.17.0" - "@algolia/requester-node-http" "4.17.0" - "@algolia/transporter" "4.17.0" + version "4.18.0" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.18.0.tgz#1183ad0384a5b2c14f381c3a361da611acc8edb3" + integrity sha512-pCuVxC1SVcpc08ENH32T4sLKSyzoU7TkRIDBMwSLfIiW+fq4znOmWDkAygHZ6pRcO9I1UJdqlfgnV7TRj+MXrA== + dependencies: + "@algolia/cache-browser-local-storage" "4.18.0" + "@algolia/cache-common" "4.18.0" + "@algolia/cache-in-memory" "4.18.0" + "@algolia/client-account" "4.18.0" + "@algolia/client-analytics" "4.18.0" + "@algolia/client-common" "4.18.0" + "@algolia/client-personalization" "4.18.0" + "@algolia/client-search" "4.18.0" + "@algolia/logger-common" "4.18.0" + "@algolia/logger-console" "4.18.0" + "@algolia/requester-browser-xhr" "4.18.0" + "@algolia/requester-common" "4.18.0" + "@algolia/requester-node-http" "4.18.0" + "@algolia/transporter" "4.18.0" ansi-align@^3.0.0, ansi-align@^3.0.1: version "3.0.1" @@ -2705,29 +2779,29 @@ babel-plugin-extract-import-names@1.6.22: dependencies: "@babel/helper-plugin-utils" "7.10.4" -babel-plugin-polyfill-corejs2@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122" - integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== +babel-plugin-polyfill-corejs2@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz#75044d90ba5043a5fb559ac98496f62f3eb668fd" + integrity sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw== dependencies: "@babel/compat-data" "^7.17.7" - "@babel/helper-define-polyfill-provider" "^0.3.3" + "@babel/helper-define-polyfill-provider" "^0.4.0" semver "^6.1.1" -babel-plugin-polyfill-corejs3@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz#56ad88237137eade485a71b52f72dbed57c6230a" - integrity sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA== +babel-plugin-polyfill-corejs3@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz#39248263c38191f0d226f928d666e6db1b4b3a8a" + integrity sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.3" - core-js-compat "^3.25.1" + "@babel/helper-define-polyfill-provider" "^0.4.0" + core-js-compat "^3.30.1" -babel-plugin-polyfill-regenerator@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz#390f91c38d90473592ed43351e801a9d3e0fd747" - integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw== +babel-plugin-polyfill-regenerator@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz#e7344d88d9ef18a3c47ded99362ae4a757609380" + integrity sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.3" + "@babel/helper-define-polyfill-provider" "^0.4.0" bail@^1.0.0: version "1.0.5" @@ -2836,14 +2910,14 @@ braces@^3.0.2, braces@~3.0.2: fill-range "^7.0.1" browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5: - version "4.21.5" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" - integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== + version "4.21.9" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635" + integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg== dependencies: - caniuse-lite "^1.0.30001449" - electron-to-chromium "^1.4.284" - node-releases "^2.0.8" - update-browserslist-db "^1.0.10" + caniuse-lite "^1.0.30001503" + electron-to-chromium "^1.4.431" + node-releases "^2.0.12" + update-browserslist-db "^1.0.11" buffer-from@^1.0.0: version "1.1.2" @@ -2914,10 +2988,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001464: - version "1.0.30001474" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001474.tgz#13b6fe301a831fe666cce8ca4ef89352334133d5" - integrity sha512-iaIZ8gVrWfemh5DG3T9/YqarVZoYf0r188IjaGwx68j4Pf0SGY6CQkmJUIE+NZHkkecQGohzXmBGEwWDr9aM3Q== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001503: + version "1.0.30001511" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001511.tgz#e6e2a1614275c6fb8e3acfd74a8c3a70e53ed233" + integrity sha512-NaWPJawcoedlghN4P7bDNeADD7K+rZaY6V8ZcME7PkEZo/nfOg+lnrUgRWiKbNxcQ4/toFKSxnS4WdbyPZnKkw== ccount@^1.0.0: version "1.1.0" @@ -2959,6 +3033,11 @@ character-entities@^1.0.0: resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== +character-entities@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" + integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== + character-reference-invalid@^1.0.0: version "1.1.4" resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" @@ -3106,9 +3185,9 @@ colord@^2.9.1: integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== colorette@^2.0.10: - version "2.0.19" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" - integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== combine-promises@^1.1.0: version "1.1.0" @@ -3241,22 +3320,22 @@ copy-webpack-plugin@^11.0.0: schema-utils "^4.0.0" serialize-javascript "^6.0.0" -core-js-compat@^3.25.1: - version "3.30.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.30.0.tgz#99aa2789f6ed2debfa1df3232784126ee97f4d80" - integrity sha512-P5A2h/9mRYZFIAP+5Ab8ns6083IyVpSclU74UNvbGVQ8VM7n3n3/g2yF3AkKQ9NXz2O+ioxLbEWKnDtgsFamhg== +core-js-compat@^3.30.1, core-js-compat@^3.30.2: + version "3.31.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.31.0.tgz#4030847c0766cc0e803dcdfb30055d7ef2064bf1" + integrity sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw== dependencies: browserslist "^4.21.5" -core-js-pure@^3.25.1: - version "3.30.0" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.30.0.tgz#41b6c42e5f363bd53d79999bd35093b17e42e1bf" - integrity sha512-+2KbMFGeBU0ln/csoPqTe0i/yfHbrd2EUhNMObsGtXMKS/RTtlkYyi+/3twLcevbgNR0yM/r0Psa3TEoQRpFMQ== +core-js-pure@^3.30.2: + version "3.31.0" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.31.0.tgz#052fd9e82fbaaf86457f5db1fadcd06f15966ff2" + integrity sha512-/AnE9Y4OsJZicCzIe97JP5XoPKQJfTuEG43aEVLFJGOJpyqELod+pE6LEl63DfG1Mp8wX97LDaDpy1GmLEUxlg== core-js@^3.23.3: - version "3.30.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.30.0.tgz#64ac6f83bc7a49fd42807327051701d4b1478dea" - integrity sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg== + version "3.31.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.31.0.tgz#4471dd33e366c79d8c0977ed2d940821719db344" + integrity sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ== core-util-is@~1.0.0: version "1.0.3" @@ -3277,11 +3356,6 @@ cose-base@^2.2.0: dependencies: layout-base "^2.0.0" -cosmiconfig-typescript-loader@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.3.0.tgz#c4259ce474c9df0f32274ed162c0447c951ef073" - integrity sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q== - cosmiconfig@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" @@ -3304,10 +3378,10 @@ cosmiconfig@^7.0.1: path-type "^4.0.0" yaml "^1.10.0" -cosmiconfig@^8.1.3: - version "8.1.3" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.1.3.tgz#0e614a118fcc2d9e5afc2f87d53cd09931015689" - integrity sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw== +cosmiconfig@^8.1.3, cosmiconfig@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.2.0.tgz#f7d17c56a590856cd1e7cee98734dca272b0d8fd" + integrity sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ== dependencies: import-fresh "^3.2.1" js-yaml "^4.1.0" @@ -3315,16 +3389,16 @@ cosmiconfig@^8.1.3: path-type "^4.0.0" countup.js@^2.5.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/countup.js/-/countup.js-2.6.0.tgz#db25f37653c5ee996b4dfa03d1ab2f430c903fd1" - integrity sha512-GeORCrCcaFUHP3RNf0/dWK+XQX+fsdtrMO31mNvsbKXNNG+DMTcgZ4dWpIG9BnOS8t5+iJbaRXgaaG9oLs0N4g== + version "2.7.0" + resolved "https://registry.yarnpkg.com/countup.js/-/countup.js-2.7.0.tgz#a5521bd935f0ae83417d0128e73f2a2d2543c9c7" + integrity sha512-IP9nYLGgW//0If73eXQdFlReGhpFGHaStqB1v82FknxnUWueF6HFuuOXySW4sEDMc88PsZL1EOn/NPkfTZalmQ== cross-fetch@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" - integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== + version "3.1.8" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" + integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== dependencies: - node-fetch "2.6.7" + node-fetch "^2.6.12" cross-spawn@^7.0.0, cross-spawn@^7.0.3: version "7.0.3" @@ -3346,14 +3420,14 @@ css-declaration-sorter@^6.3.1: integrity sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew== css-loader@^6.7.1: - version "6.7.3" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.7.3.tgz#1e8799f3ccc5874fdd55461af51137fcc5befbcd" - integrity sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ== + version "6.8.1" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.8.1.tgz#0f8f52699f60f5e679eab4ec0fcd68b8e8a50a88" + integrity sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g== dependencies: icss-utils "^5.1.0" - postcss "^8.4.19" + postcss "^8.4.21" postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.0" + postcss-modules-local-by-default "^4.0.3" postcss-modules-scope "^3.0.0" postcss-modules-values "^4.0.0" postcss-value-parser "^4.2.0" @@ -3522,17 +3596,17 @@ cytoscape-fcose@^2.1.0: cose-base "^2.2.0" cytoscape@^3.23.0: - version "3.23.0" - resolved "https://registry.yarnpkg.com/cytoscape/-/cytoscape-3.23.0.tgz#054ee05a6d0aa3b4f139382bbf2f4e5226df3c6d" - integrity sha512-gRZqJj/1kiAVPkrVFvz/GccxsXhF3Qwpptl32gKKypO4IlqnKBjTOu+HbXtEggSGzC5KCaHp3/F7GgENrtsFkA== + version "3.25.0" + resolved "https://registry.yarnpkg.com/cytoscape/-/cytoscape-3.25.0.tgz#5289e9d18be0293b073bfe93f83bb95b908b2dc1" + integrity sha512-7MW3Iz57mCUo6JQCho6CmPBCbTlJr7LzyEtIkutG255HLVd4XuBg2I9BkTZLI/e4HoaOB/BiAzXuQybQ95+r9Q== dependencies: heap "^0.2.6" lodash "^4.17.21" "d3-array@2 - 3", "d3-array@2.10.0 - 3", "d3-array@2.5.0 - 3", d3-array@3, d3-array@^3.2.0: - version "3.2.3" - resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-3.2.3.tgz#39f1f4954e4a09ff69ac597c2d61906b04e84740" - integrity sha512-JRHwbQQ84XuAESWhvIPaUV4/1UYTBOLiOPGWqgFDHZS1D5QN9c57FbH3QpEnQMYiOXNzKUQyGTZf+EVO7RT5TQ== + version "3.2.4" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-3.2.4.tgz#15fec33b237f97ac5d7c986dc77da273a8ed0bb5" + integrity sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg== dependencies: internmap "1 - 2" @@ -3738,9 +3812,9 @@ d3-zoom@3: d3-transition "2 - 3" d3@^7.4.0, d3@^7.8.2: - version "7.8.4" - resolved "https://registry.yarnpkg.com/d3/-/d3-7.8.4.tgz#e35d45800e4068cab07e59e5d883a4bb42ab217f" - integrity sha512-q2WHStdhiBtD8DMmhDPyJmXUxr6VWRngKyiJ5EfXMxPw+tqT6BhNjhJZ4w3BHsNm3QoVfZLY8Orq/qPFczwKRA== + version "7.8.5" + resolved "https://registry.yarnpkg.com/d3/-/d3-7.8.5.tgz#fde4b760d4486cdb6f0cc8e2cbff318af844635c" + integrity sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA== dependencies: d3-array "3" d3-axis "3" @@ -3782,9 +3856,9 @@ dagre-d3-es@7.0.10: lodash-es "^4.17.21" dayjs@^1.11.7: - version "1.11.7" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.7.tgz#4b296922642f70999544d1144a2c25730fce63e2" - integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ== + version "1.11.9" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.9.tgz#9ca491933fadd0a60a2c19f6c237c03517d71d1a" + integrity sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA== debug@2.6.9, debug@^2.6.0: version "2.6.9" @@ -3793,13 +3867,20 @@ debug@2.6.9, debug@^2.6.0: dependencies: ms "2.0.0" -debug@4, debug@^4.1.0, debug@^4.1.1: +debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" +decode-named-character-reference@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz#daabac9690874c394c81e4162a0304b35d824f0e" + integrity sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg== + dependencies: + character-entities "^2.0.0" + decompress-response@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" @@ -3873,6 +3954,11 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== +dequal@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + destroy@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" @@ -3906,6 +3992,11 @@ detect-port@^1.3.0: address "^1.0.1" debug "4" +diff@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" + integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -3919,9 +4010,9 @@ dns-equal@^1.0.0: integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== dns-packet@^5.2.2: - version "5.5.0" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.5.0.tgz#f59cbf3396c130957c56a6ad5fd3959ccdc30065" - integrity sha512-USawdAUzRkV6xrqTjiAEp6M9YagZEzWcSUaZTcIFAiyQWW1SoI6KyId8y2+/71wbgHKQAKd+iupLv4YvEwYWvA== + version "5.6.0" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.0.tgz#2202c947845c7a63c23ece58f2f70ff6ab4c2f7d" + integrity sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ== dependencies: "@leichtgewicht/ip-codec" "^2.0.1" @@ -3962,17 +4053,17 @@ domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: dependencies: domelementtype "^2.2.0" -domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3: +domhandler@^5.0.2, domhandler@^5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== dependencies: domelementtype "^2.3.0" -dompurify@2.4.5: - version "2.4.5" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.4.5.tgz#0e89a27601f0bad978f9a924e7a05d5d2cccdd87" - integrity sha512-jggCCd+8Iqp4Tsz0nIvpcb22InKEBrGz5dw3EQJMs8HPJDsKbFIO3STYtAvCfDx26Muevn1MHVI0XxjgFfmiSA== +dompurify@3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.0.3.tgz#4b115d15a091ddc96f232bcef668550a2f6f1430" + integrity sha512-axQ9zieHLnAnHh0sfAamKYiqXMJAVwu+LM/alQ7WDagoWessyWvMSFyW65CqF3owufNu8HBcE4cM2Vflu7YWcQ== domutils@^2.5.2, domutils@^2.8.0: version "2.8.0" @@ -3984,13 +4075,13 @@ domutils@^2.5.2, domutils@^2.8.0: domhandler "^4.2.0" domutils@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c" - integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q== + version "3.1.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" + integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== dependencies: dom-serializer "^2.0.0" domelementtype "^2.3.0" - domhandler "^5.0.1" + domhandler "^5.0.3" dot-case@^3.0.4: version "3.0.4" @@ -4027,10 +4118,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.4.284: - version "1.4.352" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.352.tgz#be96bd7c2f4b980deebc9338a49a67430a33ed73" - integrity sha512-ikFUEyu5/q+wJpMOxWxTaEVk2M1qKqTGKKyfJmod1CPZxKfYnxVS41/GCBQg21ItBpZybyN8sNpRqCUGm+Zc4Q== +electron-to-chromium@^1.4.431: + version "1.4.447" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.447.tgz#ac69d3a7b3713e9ae94bb30ba65c3114e4d76a38" + integrity sha512-sxX0LXh+uL41hSJsujAN86PjhrV/6c79XmpY0TvjZStV6VxIgarf8SRkUoUTuYmFcZQTemsoqo8qXOGw5npWfw== elkjs@^0.8.2: version "0.8.2" @@ -4069,10 +4160,10 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enhanced-resolve@^5.10.0: - version "5.12.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634" - integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ== +enhanced-resolve@^5.15.0: + version "5.15.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" + integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -4083,9 +4174,9 @@ entities@^2.0.0: integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== entities@^4.2.0, entities@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174" - integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== error-ex@^1.3.1: version "1.3.2" @@ -4094,10 +4185,10 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-module-lexer@^0.9.0: - version "0.9.3" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" - integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== +es-module-lexer@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.3.0.tgz#6be9c9e0b4543a60cd166ff6f8b4e9dae0b0c16f" + integrity sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA== escalade@^3.1.1: version "3.1.1" @@ -4165,9 +4256,9 @@ esutils@^2.0.2: integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== eta@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/eta/-/eta-2.0.1.tgz#199e675359cb6e19d38f29e1f405e1ba0e79a6df" - integrity sha512-46E2qDPDm7QA+usjffUWz9KfXsxVZclPOuKsXs4ZWZdI/X1wpDF7AO424pt7fdYohCzWsIkXAhNGXSlwo5naAg== + version "2.2.0" + resolved "https://registry.yarnpkg.com/eta/-/eta-2.2.0.tgz#eb8b5f8c4e8b6306561a455e62cd7492fe3a9b8a" + integrity sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g== etag@~1.8.1: version "1.8.1" @@ -4277,9 +4368,9 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-glob@^3.2.11, fast-glob@^3.2.9: - version "3.2.12" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" - integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + version "3.3.0" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.0.tgz#7c40cb491e1e2ed5664749e87bfb516dbe8727c0" + integrity sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -4326,9 +4417,9 @@ fbjs-css-vars@^1.0.0: integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== fbjs@^3.0.0, fbjs@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-3.0.4.tgz#e1871c6bd3083bac71ff2da868ad5067d37716c6" - integrity sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ== + version "3.0.5" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-3.0.5.tgz#aa0edb7d5caa6340011790bd9249dbef8a81128d" + integrity sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg== dependencies: cross-fetch "^3.1.5" fbjs-css-vars "^1.0.0" @@ -4336,7 +4427,7 @@ fbjs@^3.0.0, fbjs@^3.0.1: object-assign "^4.1.0" promise "^7.1.1" setimmediate "^1.0.5" - ua-parser-js "^0.7.30" + ua-parser-js "^1.0.35" feed@^4.2.2: version "4.2.2" @@ -4476,10 +4567,10 @@ fs-extra@^9.0.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-monkey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" - integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== +fs-monkey@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.4.tgz#ee8c1b53d3fe8bb7e5d2c5c5dfc0168afdd2f747" + integrity sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ== fs.realpath@^1.0.0: version "1.0.0" @@ -4502,12 +4593,13 @@ gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" - integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== + version "1.2.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" + integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== dependencies: function-bind "^1.1.1" has "^1.0.3" + has-proto "^1.0.1" has-symbols "^1.0.3" get-own-enumerable-property-symbols@^3.0.0: @@ -4611,9 +4703,9 @@ globby@^11.0.1, globby@^11.0.4, globby@^11.1.0: slash "^3.0.0" globby@^13.1.1: - version "13.1.3" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.3.tgz#f62baf5720bcb2c1330c8d4ef222ee12318563ff" - integrity sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw== + version "13.2.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.1.tgz#986d44187ba6a9fc4aa9b16caf0ab9a04db94ae9" + integrity sha512-DPCBxctI7dN4EeIqjW2KGqgdcUMbrhJ9AzON+PlxCtvppWhubTLD4+a0GFxiym14ZvacUydTPjLPc2DlKz7EIg== dependencies: dir-glob "^3.0.1" fast-glob "^3.2.11" @@ -4682,6 +4774,11 @@ has-property-descriptors@^1.0.0: dependencies: get-intrinsic "^1.1.1" +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" @@ -4807,9 +4904,9 @@ hpack.js@^2.1.6: wbuf "^1.1.0" html-entities@^2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" - integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== + version "2.4.0" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.4.0.tgz#edd0cee70402584c8c76cc2c0556db09d1f45061" + integrity sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ== html-minifier-terser@^6.0.2, html-minifier-terser@^6.1.0: version "6.1.0" @@ -4835,9 +4932,9 @@ html-void-elements@^1.0.0: integrity sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w== html-webpack-plugin@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz#c3911936f57681c1f9f4d8b68c158cd9dfe52f50" - integrity sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw== + version "5.5.3" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.3.tgz#72270f4a78e222b5825b296e5e3e1328ad525a3e" + integrity sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg== dependencies: "@types/html-minifier-terser" "^6.0.0" html-minifier-terser "^6.0.2" @@ -5051,9 +5148,9 @@ ipaddr.js@1.9.1: integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== ipaddr.js@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0" - integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== + version "2.1.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz#2119bc447ff8c257753b196fc5f1ce08a4cdf39f" + integrity sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ== is-alphabetical@1.0.4, is-alphabetical@^1.0.0: version "1.0.4" @@ -5092,10 +5189,10 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-core-module@^2.9.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" - integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== +is-core-module@^2.11.0: + version "2.12.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" + integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== dependencies: has "^1.0.3" @@ -5284,10 +5381,15 @@ jest-worker@^29.1.2: merge-stream "^2.0.0" supports-color "^8.0.0" +jiti@^1.18.2: + version "1.18.2" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.18.2.tgz#80c3ef3d486ebf2450d9335122b32d121f2a83cd" + integrity sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg== + joi@^17.6.0: - version "17.9.1" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.9.1.tgz#74899b9fa3646904afa984a11df648eca66c9018" - integrity sha512-FariIi9j6QODKATGBrEX7HZcja8Bsh3rfdGYy/Sb65sGlZWK/QWesU1ghk7aJWDj95knjXlQfSmzFSPPkLVsfw== + version "17.9.2" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.9.2.tgz#8b2e4724188369f55451aebd1d0b1d9482470690" + integrity sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw== dependencies: "@hapi/hoek" "^9.0.0" "@hapi/topo" "^5.0.0" @@ -5381,10 +5483,10 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -klona@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22" - integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== +kleur@^4.0.3: + version "4.1.5" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" + integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== latest-version@^5.1.0: version "5.1.0" @@ -5566,6 +5668,24 @@ mdast-util-definitions@^4.0.0: dependencies: unist-util-visit "^2.0.0" +mdast-util-from-markdown@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz#9421a5a247f10d31d2faed2a30df5ec89ceafcf0" + integrity sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + decode-named-character-reference "^1.0.0" + mdast-util-to-string "^3.1.0" + micromark "^3.0.0" + micromark-util-decode-numeric-character-reference "^1.0.0" + micromark-util-decode-string "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + unist-util-stringify-position "^3.0.0" + uvu "^0.5.0" + mdast-util-to-hast@10.0.1: version "10.0.1" resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz#0cfc82089494c52d46eb0e3edb7a4eb2aea021eb" @@ -5585,6 +5705,13 @@ mdast-util-to-string@^2.0.0: resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== +mdast-util-to-string@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz#66f7bb6324756741c5f47a53557f0cbf16b6f789" + integrity sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg== + dependencies: + "@types/mdast" "^3.0.0" + mdn-data@2.0.14: version "2.0.14" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" @@ -5616,11 +5743,11 @@ media-typer@0.3.0: integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== memfs@^3.1.2, memfs@^3.4.3: - version "3.4.13" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.13.tgz#248a8bd239b3c240175cd5ec548de5227fc4f345" - integrity sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg== + version "3.6.0" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6" + integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ== dependencies: - fs-monkey "^1.0.3" + fs-monkey "^1.0.4" merge-descriptors@1.0.1: version "1.0.1" @@ -5638,24 +5765,24 @@ merge2@^1.3.0, merge2@^1.4.1: integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== mermaid@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/mermaid/-/mermaid-10.1.0.tgz#6e40d5250174f4750ca6548e4ee00f6ae210855a" - integrity sha512-LYekSMNJygI1VnMizAPUddY95hZxOjwZxr7pODczILInO0dhQKuhXeu4sargtnuTwCilSuLS7Uiq/Qn7HTVrmA== + version "10.2.4" + resolved "https://registry.yarnpkg.com/mermaid/-/mermaid-10.2.4.tgz#3358adc61346ce51858b1b5b1078c20411efabdc" + integrity sha512-zHGjEI7lBvWZX+PQYmlhSA2p40OzW6QbGodTCSzDeVpqaTnyAC+2sRGqrpXO+uQk3CnoeClHQPraQUMStdqy2g== dependencies: - "@braintree/sanitize-url" "^6.0.0" - "@khanacademy/simple-markdown" "^0.8.6" + "@braintree/sanitize-url" "^6.0.2" cytoscape "^3.23.0" cytoscape-cose-bilkent "^4.1.0" cytoscape-fcose "^2.1.0" d3 "^7.4.0" dagre-d3-es "7.0.10" dayjs "^1.11.7" - dompurify "2.4.5" + dompurify "3.0.3" elkjs "^0.8.2" khroma "^2.0.0" lodash-es "^4.17.21" + mdast-util-from-markdown "^1.3.0" non-layered-tidy-tree-layout "^2.0.2" - stylis "^4.1.2" + stylis "^4.1.3" ts-dedent "^2.2.0" uuid "^9.0.0" web-worker "^1.2.0" @@ -5665,6 +5792,200 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== +micromark-core-commonmark@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz#1386628df59946b2d39fb2edfd10f3e8e0a75bb8" + integrity sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw== + dependencies: + decode-named-character-reference "^1.0.0" + micromark-factory-destination "^1.0.0" + micromark-factory-label "^1.0.0" + micromark-factory-space "^1.0.0" + micromark-factory-title "^1.0.0" + micromark-factory-whitespace "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-chunked "^1.0.0" + micromark-util-classify-character "^1.0.0" + micromark-util-html-tag-name "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-resolve-all "^1.0.0" + micromark-util-subtokenize "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.1" + uvu "^0.5.0" + +micromark-factory-destination@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz#eb815957d83e6d44479b3df640f010edad667b9f" + integrity sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-factory-label@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz#cc95d5478269085cfa2a7282b3de26eb2e2dec68" + integrity sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-factory-space@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz#c8f40b0640a0150751d3345ed885a080b0d15faf" + integrity sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-factory-title@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz#dd0fe951d7a0ac71bdc5ee13e5d1465ad7f50ea1" + integrity sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ== + dependencies: + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-factory-whitespace@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz#798fb7489f4c8abafa7ca77eed6b5745853c9705" + integrity sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ== + dependencies: + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-character@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-1.2.0.tgz#4fedaa3646db249bc58caeb000eb3549a8ca5dcc" + integrity sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg== + dependencies: + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-chunked@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz#37a24d33333c8c69a74ba12a14651fd9ea8a368b" + integrity sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ== + dependencies: + micromark-util-symbol "^1.0.0" + +micromark-util-classify-character@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz#6a7f8c8838e8a120c8e3c4f2ae97a2bff9190e9d" + integrity sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-combine-extensions@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz#192e2b3d6567660a85f735e54d8ea6e3952dbe84" + integrity sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA== + dependencies: + micromark-util-chunked "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-decode-numeric-character-reference@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz#b1e6e17009b1f20bc652a521309c5f22c85eb1c6" + integrity sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw== + dependencies: + micromark-util-symbol "^1.0.0" + +micromark-util-decode-string@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz#dc12b078cba7a3ff690d0203f95b5d5537f2809c" + integrity sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ== + dependencies: + decode-named-character-reference "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-decode-numeric-character-reference "^1.0.0" + micromark-util-symbol "^1.0.0" + +micromark-util-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz#92e4f565fd4ccb19e0dcae1afab9a173bbeb19a5" + integrity sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw== + +micromark-util-html-tag-name@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz#48fd7a25826f29d2f71479d3b4e83e94829b3588" + integrity sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q== + +micromark-util-normalize-identifier@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz#7a73f824eb9f10d442b4d7f120fecb9b38ebf8b7" + integrity sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q== + dependencies: + micromark-util-symbol "^1.0.0" + +micromark-util-resolve-all@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz#4652a591ee8c8fa06714c9b54cd6c8e693671188" + integrity sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA== + dependencies: + micromark-util-types "^1.0.0" + +micromark-util-sanitize-uri@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz#613f738e4400c6eedbc53590c67b197e30d7f90d" + integrity sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-encode "^1.0.0" + micromark-util-symbol "^1.0.0" + +micromark-util-subtokenize@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz#941c74f93a93eaf687b9054aeb94642b0e92edb1" + integrity sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A== + dependencies: + micromark-util-chunked "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-util-symbol@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz#813cd17837bdb912d069a12ebe3a44b6f7063142" + integrity sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag== + +micromark-util-types@^1.0.0, micromark-util-types@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-1.1.0.tgz#e6676a8cae0bb86a2171c498167971886cb7e283" + integrity sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg== + +micromark@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/micromark/-/micromark-3.2.0.tgz#1af9fef3f995ea1ea4ac9c7e2f19c48fd5c006e9" + integrity sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA== + dependencies: + "@types/debug" "^4.0.0" + debug "^4.0.0" + decode-named-character-reference "^1.0.0" + micromark-core-commonmark "^1.0.1" + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-chunked "^1.0.0" + micromark-util-combine-extensions "^1.0.0" + micromark-util-decode-numeric-character-reference "^1.0.0" + micromark-util-encode "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-resolve-all "^1.0.0" + micromark-util-sanitize-uri "^1.0.0" + micromark-util-subtokenize "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.1" + uvu "^0.5.0" + micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" @@ -5713,9 +6034,9 @@ mimic-response@^1.0.0, mimic-response@^1.0.1: integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== mini-css-extract-plugin@^2.6.1: - version "2.7.5" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.5.tgz#afbb344977659ec0f1f6e050c7aea456b121cfc5" - integrity sha512-9HaR++0mlgom81s95vvNjxkg52n2b5s//3ZTI1EtzFb98awsLSivs2LMsVqnQ3ay0PVhqWcGNyDaTE961FOcjQ== + version "2.7.6" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz#282a3d38863fddcd2e0c220aaed5b90bc156564d" + integrity sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw== dependencies: schema-utils "^4.0.0" @@ -5736,7 +6057,7 @@ minimist@^1.2.0, minimist@^1.2.5: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== -mri@^1.1.5: +mri@^1.1.0, mri@^1.1.5: version "1.2.0" resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== @@ -5780,7 +6101,7 @@ multimatch@^4.0.0: arrify "^2.0.1" minimatch "^3.0.4" -nanoid@^3.3.4: +nanoid@^3.3.6: version "3.3.6" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== @@ -5810,10 +6131,10 @@ node-emoji@^1.10.0: dependencies: lodash "^4.17.21" -node-fetch@2.6.7: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== +node-fetch@^2.6.12: + version "2.6.12" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.12.tgz#02eb8e22074018e3d5a83016649d04df0e348fba" + integrity sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g== dependencies: whatwg-url "^5.0.0" @@ -5822,10 +6143,10 @@ node-forge@^1: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== -node-releases@^2.0.8: - version "2.0.10" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" - integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== +node-releases@^2.0.12: + version "2.0.12" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039" + integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ== non-layered-tidy-tree-layout@^2.0.2: version "2.0.2" @@ -6216,13 +6537,12 @@ postcss-discard-unused@^5.1.0: postcss-selector-parser "^6.0.5" postcss-loader@^7.0.0: - version "7.2.4" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.2.4.tgz#2884f4ca172de633b2cf1f93dc852968f0632ba9" - integrity sha512-F88rpxxNspo5hatIc+orYwZDtHFaVFOSIVAx+fBfJC1GmhWbVmPWtmg2gXKE1OxJbneOSGn8PWdIwsZFcruS+w== + version "7.3.3" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.3.3.tgz#6da03e71a918ef49df1bb4be4c80401df8e249dd" + integrity sha512-YgO/yhtevGO/vJePCQmTxiaEwER94LABZN0ZMT4A0vsak9TpO+RvKRs7EmJ8peIlB9xfXCsS7M8LjqncsUZ5HA== dependencies: - cosmiconfig "^8.1.3" - cosmiconfig-typescript-loader "^4.3.0" - klona "^2.0.6" + cosmiconfig "^8.2.0" + jiti "^1.18.2" semver "^7.3.8" postcss-merge-idents@^5.1.1: @@ -6288,10 +6608,10 @@ postcss-modules-extract-imports@^3.0.0: resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== -postcss-modules-local-by-default@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" - integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== +postcss-modules-local-by-default@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz#b08eb4f083050708998ba2c6061b50c2870ca524" + integrity sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA== dependencies: icss-utils "^5.0.0" postcss-selector-parser "^6.0.2" @@ -6405,17 +6725,17 @@ postcss-reduce-transforms@^5.1.0: postcss-value-parser "^4.2.0" postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: - version "6.0.11" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" - integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== + version "6.0.13" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" + integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" postcss-sort-media-queries@^4.2.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/postcss-sort-media-queries/-/postcss-sort-media-queries-4.3.0.tgz#f48a77d6ce379e86676fc3f140cf1b10a06f6051" - integrity sha512-jAl8gJM2DvuIJiI9sL1CuiHtKM4s5aEIomkU8G3LFvbP+p8i7Sz8VV63uieTgoewGqKbi+hxBTiOKJlB35upCg== + version "4.4.1" + resolved "https://registry.yarnpkg.com/postcss-sort-media-queries/-/postcss-sort-media-queries-4.4.1.tgz#04a5a78db3921eb78f28a1a781a2e68e65258128" + integrity sha512-QDESFzDDGKgpiIh4GYXsSy6sek2yAwQx1JASl5AxBtU1Lq2JfKBljIPNdil989NcSKRQX1ToiaKphImtBuhXWw== dependencies: sort-css-media-queries "2.1.0" @@ -6444,12 +6764,12 @@ postcss-zindex@^5.1.0: resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-5.1.0.tgz#4a5c7e5ff1050bd4c01d95b1847dfdcc58a496ff" integrity sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A== -postcss@^8.3.11, postcss@^8.4.14, postcss@^8.4.17, postcss@^8.4.19: - version "8.4.21" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" - integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== +postcss@^8.3.11, postcss@^8.4.14, postcss@^8.4.17, postcss@^8.4.21: + version "8.4.24" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.24.tgz#f714dba9b2284be3cc07dbd2fc57ee4dc972d2df" + integrity sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg== dependencies: - nanoid "^3.3.4" + nanoid "^3.3.6" picocolors "^1.0.0" source-map-js "^1.0.2" @@ -6459,9 +6779,9 @@ prepend-http@^2.0.0: integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== prettier@^2.6.2: - version "2.8.7" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.7.tgz#bb79fc8729308549d28fe3a98fce73d2c0656450" - integrity sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw== + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== pretty-error@^4.0.0: version "4.0.0" @@ -6690,9 +7010,9 @@ react-error-overlay@^6.0.11: integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== react-fast-compare@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.1.tgz#53933d9e14f364281d6cba24bfed7a4afb808b5f" - integrity sha512-xTYf9zFim2pEif/Fw16dBiXpe0hoy5PxcD8+OwBnTtNLfIm3g6WxhKNurY+6OmdH1u6Ta/W/Vl6vjbYP1MFnDg== + version "3.2.2" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz#929a97a532304ce9fee4bcae44234f1ce2c21d49" + integrity sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ== react-helmet-async@*, react-helmet-async@^1.3.0: version "1.3.0" @@ -6768,9 +7088,9 @@ react-router@5.3.4, react-router@^5.3.3: tiny-warning "^1.0.0" react-textarea-autosize@^8.3.2: - version "8.4.1" - resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.4.1.tgz#bcfc5462727014b808b14ee916c01e275e8a8335" - integrity sha512-aD2C+qK6QypknC+lCMzteOdIjoMbNlgSFmJjCV+DrfTPwp59i/it9mMNf2HDzvRjQgKAyBDPyLJhcrzElf2U4Q== + version "8.5.1" + resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.5.1.tgz#e1e815ac6715c6dbe01c715fd980a7a97031e2a2" + integrity sha512-3GdXBRT2m12xqH7ysRUquzFZYasYQrH/I+BofmT9sdMG5oI+GNfrsiTV1MvZGk3DLmZ72OUCiV5XGMEPKJ7Pog== dependencies: "@babel/runtime" "^7.20.13" use-composed-ref "^1.3.0" @@ -6992,11 +7312,11 @@ resolve-pathname@^3.0.0: integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== resolve@^1.1.6, resolve@^1.14.2, resolve@^1.3.2: - version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + version "1.22.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== dependencies: - is-core-module "^2.9.0" + is-core-module "^2.11.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -7025,9 +7345,9 @@ rimraf@^3.0.2: glob "^7.1.3" robust-predicates@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/robust-predicates/-/robust-predicates-3.0.1.tgz#ecde075044f7f30118682bd9fb3f123109577f9a" - integrity sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g== + version "3.0.2" + resolved "https://registry.yarnpkg.com/robust-predicates/-/robust-predicates-3.0.2.tgz#d5b28528c4824d20fc48df1928d41d9efa1ad771" + integrity sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg== rtl-detect@^1.0.4: version "1.0.4" @@ -7057,12 +7377,19 @@ rw@1: integrity sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ== rxjs@^7.5.4: - version "7.8.0" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.0.tgz#90a938862a82888ff4c7359811a595e14e1e09a4" - integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== dependencies: tslib "^2.1.0" +sade@^1.7.3: + version "1.8.1" + resolved "https://registry.yarnpkg.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701" + integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A== + dependencies: + mri "^1.1.0" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -7108,24 +7435,24 @@ schema-utils@^2.6.5: ajv "^6.12.4" ajv-keywords "^3.5.2" -schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" - integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== +schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" + integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== dependencies: "@types/json-schema" "^7.0.8" ajv "^6.12.5" ajv-keywords "^3.5.2" schema-utils@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7" - integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== + version "4.2.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b" + integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== dependencies: "@types/json-schema" "^7.0.9" - ajv "^8.8.0" + ajv "^8.9.0" ajv-formats "^2.1.1" - ajv-keywords "^5.0.0" + ajv-keywords "^5.1.0" section-matter@^1.0.0: version "1.0.0" @@ -7165,9 +7492,9 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== semver@^7.3.2, semver@^7.3.4, semver@^7.3.7, semver@^7.3.8: - version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + version "7.5.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" + integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== dependencies: lru-cache "^6.0.0" @@ -7274,9 +7601,9 @@ shebang-regex@^3.0.0: integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shell-quote@^1.7.3: - version "1.8.0" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.0.tgz#20d078d0eaf71d54f43bd2ba14a1b5b9bfa5c8ba" - integrity sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ== + version "1.8.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" + integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== shelljs@^0.8.5: version "0.8.5" @@ -7426,9 +7753,9 @@ statuses@2.0.1: integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== std-env@^3.0.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.3.2.tgz#af27343b001616015534292178327b202b9ee955" - integrity sha512-uUZI65yrV2Qva5gqE0+A7uVAvO40iPo6jGhs7s8keRfHCmtg+uB2X6EiLGCI9IgL1J17xGhvoOqSz79lzICPTA== + version "3.3.3" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.3.3.tgz#a54f06eb245fdcfef53d56f3c0251f1d5c3d01fe" + integrity sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg== string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2: version "4.2.3" @@ -7479,9 +7806,9 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: ansi-regex "^5.0.1" strip-ansi@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" - integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: ansi-regex "^6.0.1" @@ -7520,10 +7847,10 @@ stylehacks@^5.1.1: browserslist "^4.21.4" postcss-selector-parser "^6.0.4" -stylis@^4.1.2: - version "4.1.3" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.1.3.tgz#fd2fbe79f5fed17c55269e16ed8da14c84d069f7" - integrity sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA== +stylis@^4.1.3: + version "4.3.0" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.3.0.tgz#abe305a669fc3d8777e10eefcfc73ad861c5588c" + integrity sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ== supports-color@^5.3.0: version "5.5.0" @@ -7591,24 +7918,24 @@ tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== -terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.3.3: - version "5.3.7" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz#ef760632d24991760f339fe9290deb936ad1ffc7" - integrity sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw== +terser-webpack-plugin@^5.3.3, terser-webpack-plugin@^5.3.7: + version "5.3.9" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1" + integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== dependencies: "@jridgewell/trace-mapping" "^0.3.17" jest-worker "^27.4.5" schema-utils "^3.1.1" serialize-javascript "^6.0.1" - terser "^5.16.5" + terser "^5.16.8" -terser@^5.10.0, terser@^5.16.5: - version "5.16.8" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.8.tgz#ccde583dabe71df3f4ed02b65eb6532e0fae15d5" - integrity sha512-QI5g1E/ef7d+PsDifb+a6nnVgC4F22Bg6T0xrBrz6iloVB4PUkkunp6V8nzoOOZJIzjWVdAGqCdlKlhLq/TbIA== +terser@^5.10.0, terser@^5.16.8: + version "5.18.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.18.2.tgz#ff3072a0faf21ffd38f99acc9a0ddf7b5f07b948" + integrity sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w== dependencies: - "@jridgewell/source-map" "^0.3.2" - acorn "^8.5.0" + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" commander "^2.20.0" source-map-support "~0.5.20" @@ -7685,9 +8012,9 @@ ts-dedent@^2.2.0: integrity sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ== tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" - integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== + version "2.6.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3" + integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA== type-fest@^0.20.2: version "0.20.2" @@ -7714,10 +8041,10 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -ua-parser-js@^0.7.30: - version "0.7.35" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.35.tgz#8bda4827be4f0b1dda91699a29499575a1f1d307" - integrity sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g== +ua-parser-js@^1.0.35: + version "1.0.35" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.35.tgz#c4ef44343bc3db0a3cbefdf21822f1b1fc1ab011" + integrity sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA== unherit@^1.0.4: version "1.1.3" @@ -7822,6 +8149,13 @@ unist-util-stringify-position@^2.0.0: dependencies: "@types/unist" "^2.0.2" +unist-util-stringify-position@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz#03ad3348210c2d930772d64b489580c13a7db39d" + integrity sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg== + dependencies: + "@types/unist" "^2.0.0" + unist-util-visit-parents@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz#65a6ce698f78a6b0f56aa0e88f13801886cdaef6" @@ -7849,10 +8183,10 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -update-browserslist-db@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" - integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== +update-browserslist-db@^1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" + integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== dependencies: escalade "^3.1.1" picocolors "^1.0.0" @@ -7952,6 +8286,16 @@ uuid@^9.0.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== +uvu@^0.5.0: + version "0.5.6" + resolved "https://registry.yarnpkg.com/uvu/-/uvu-0.5.6.tgz#2754ca20bcb0bb59b64e9985e84d2e81058502df" + integrity sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA== + dependencies: + dequal "^2.0.0" + diff "^5.0.0" + kleur "^4.0.3" + sade "^1.7.3" + value-equal@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" @@ -8027,9 +8371,9 @@ webidl-conversions@^3.0.0: integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== webpack-bundle-analyzer@^4.5.0: - version "4.8.0" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.8.0.tgz#951b8aaf491f665d2ae325d8b84da229157b1d04" - integrity sha512-ZzoSBePshOKhr+hd8u6oCkZVwpVaXgpw23ScGLFpR6SjYI7+7iIWYarjN6OEYOfRt8o7ZyZZQk0DuMizJ+LEIg== + version "4.9.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.0.tgz#fc093c4ab174fd3dcbd1c30b763f56d10141209d" + integrity sha512-+bXGmO1LyiNx0i9enBu3H8mv42sj/BJWhZNFwjz92tVnBa9J3JMGo2an2IXlEleoDOPn/Hofl5hr/xCpObUDtw== dependencies: "@discoveryjs/json-ext" "0.5.7" acorn "^8.0.4" @@ -8054,9 +8398,9 @@ webpack-dev-middleware@^5.3.1: schema-utils "^4.0.0" webpack-dev-server@^4.9.3: - version "4.13.2" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.13.2.tgz#d97445481d78691efe6d9a3b230833d802fc31f9" - integrity sha512-5i6TrGBRxG4vnfDpB6qSQGfnB6skGBXNL5/542w2uRGLimX6qeE5BQMLrzIC3JYV/xlGOv+s+hTleI9AZKUQNw== + version "4.15.1" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz#8944b29c12760b3a45bdaa70799b17cb91b03df7" + integrity sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA== dependencies: "@types/bonjour" "^3.5.9" "@types/connect-history-api-fallback" "^1.3.5" @@ -8064,7 +8408,7 @@ webpack-dev-server@^4.9.3: "@types/serve-index" "^1.9.1" "@types/serve-static" "^1.13.10" "@types/sockjs" "^0.3.33" - "@types/ws" "^8.5.1" + "@types/ws" "^8.5.5" ansi-html-community "^0.0.8" bonjour-service "^1.0.11" chokidar "^3.5.3" @@ -8090,9 +8434,9 @@ webpack-dev-server@^4.9.3: ws "^8.13.0" webpack-merge@^5.8.0: - version "5.8.0" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" - integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== + version "5.9.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.9.0.tgz#dc160a1c4cf512ceca515cc231669e9ddb133826" + integrity sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg== dependencies: clone-deep "^4.0.1" wildcard "^2.0.0" @@ -8103,21 +8447,21 @@ webpack-sources@^3.2.2, webpack-sources@^3.2.3: integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== webpack@^5.73.0: - version "5.77.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.77.0.tgz#dea3ad16d7ea6b84aa55fa42f4eac9f30e7eb9b4" - integrity sha512-sbGNjBr5Ya5ss91yzjeJTLKyfiwo5C628AFjEa6WSXcZa4E+F57om3Cc8xLb1Jh0b243AWuSYRf3dn7HVeFQ9Q== + version "5.88.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.88.1.tgz#21eba01e81bd5edff1968aea726e2fbfd557d3f8" + integrity sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ== dependencies: "@types/eslint-scope" "^3.7.3" - "@types/estree" "^0.0.51" - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/wasm-edit" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" + "@types/estree" "^1.0.0" + "@webassemblyjs/ast" "^1.11.5" + "@webassemblyjs/wasm-edit" "^1.11.5" + "@webassemblyjs/wasm-parser" "^1.11.5" acorn "^8.7.1" - acorn-import-assertions "^1.7.6" + acorn-import-assertions "^1.9.0" browserslist "^4.14.5" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.10.0" - es-module-lexer "^0.9.0" + enhanced-resolve "^5.15.0" + es-module-lexer "^1.2.1" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" @@ -8126,9 +8470,9 @@ webpack@^5.73.0: loader-runner "^4.2.0" mime-types "^2.1.27" neo-async "^2.6.2" - schema-utils "^3.1.0" + schema-utils "^3.2.0" tapable "^2.1.1" - terser-webpack-plugin "^5.1.3" + terser-webpack-plugin "^5.3.7" watchpack "^2.4.0" webpack-sources "^3.2.3" @@ -8193,9 +8537,9 @@ widest-line@^4.0.1: string-width "^5.0.1" wildcard@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" - integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== + version "2.0.1" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" + integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== wrap-ansi@^7.0.0: version "7.0.0" From 13df4710fafb925fdb10e49bf448799280831a03 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 3 Jul 2023 15:57:01 +0200 Subject: [PATCH 518/578] Update index.md Add wave 19 --- applications/index.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/applications/index.md b/applications/index.md index 63ad90d52cb..f34e433fb66 100644 --- a/applications/index.md +++ b/applications/index.md @@ -13,6 +13,7 @@ Use this page for an overview of all public grants and their status. Use the sid - [2023](#2023) + - [🏄‍♀️ Wave 19 - Q3 2023](#️-wave-19---q3-2023) - [🏄‍♀️ Wave 18 - Q2 2023](#️-wave-18---q2-2023) - [🏄‍♀️ Wave 17 - Q1 2023](#️-wave-17---q1-2023) - [2022](#2022) @@ -38,6 +39,13 @@ Use this page for an overview of all public grants and their status. Use the sid ## 2023 +### 🏄‍♀️ Wave 19 - Q3 2023 + +| Team | Project | Link | Terminated | First Delivery | Completed | +| :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------| :--------- | :------------: | :--------: | + +[🔝](#2023) + ### 🏄‍♀️ Wave 18 - Q2 2023 | Team | Project | Link | Terminated | First Delivery | Completed | From b3735e62134d02bb735d7807a2c95534372c9f06 Mon Sep 17 00:00:00 2001 From: caso Date: Mon, 3 Jul 2023 16:49:33 +0200 Subject: [PATCH 519/578] Update index.md (#1831) Fix emoji issue --- applications/index.md | 76 +++++++++++++++++++++---------------------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/applications/index.md b/applications/index.md index f34e433fb66..b6f4bf9b023 100644 --- a/applications/index.md +++ b/applications/index.md @@ -13,40 +13,40 @@ Use this page for an overview of all public grants and their status. Use the sid - [2023](#2023) - - [🏄‍♀️ Wave 19 - Q3 2023](#️-wave-19---q3-2023) - - [🏄‍♀️ Wave 18 - Q2 2023](#️-wave-18---q2-2023) - - [🏄‍♀️ Wave 17 - Q1 2023](#️-wave-17---q1-2023) + - [🏄 Wave 19 - Q3 2023](#️-wave-19---q3-2023) + - [🏄 Wave 18 - Q2 2023](#️-wave-18---q2-2023) + - [🏄 Wave 17 - Q1 2023](#️-wave-17---q1-2023) - [2022](#2022) - - [🏄‍♀️ Wave 16 - Q4 2022](#️-wave-16---q4-2022) - - [🏄‍♀️ Wave 15 - Q3 2022](#️-wave-15---q3-2022) - - [🏄‍♀️ Wave 14 - Q2 2022](#️-wave-14---q2-2022) - - [🏄‍♀️ Wave 13 - Q1 2022](#️-wave-13---q1-2022) + - [🏄 Wave 16 - Q4 2022](#️-wave-16---q4-2022) + - [🏄 Wave 15 - Q3 2022](#️-wave-15---q3-2022) + - [🏄 Wave 14 - Q2 2022](#️-wave-14---q2-2022) + - [🏄 Wave 13 - Q1 2022](#️-wave-13---q1-2022) - [2021](#2021) - - [🏄‍♀️ Wave 12 - Q4 2021](#️-wave-12---q4-2021) - - [🏄‍♀️ Wave 11 - Q3 2021](#️-wave-11---q3-2021) - - [🏄‍♀️ Wave 10 - Q2 2021](#️-wave-10---q2-2021) - - [🏄‍♀️ Wave 9 - Q1 2021](#️-wave-9---q1-2021) + - [🏄 Wave 12 - Q4 2021](#️-wave-12---q4-2021) + - [🏄 Wave 11 - Q3 2021](#️-wave-11---q3-2021) + - [🏄 Wave 10 - Q2 2021](#️-wave-10---q2-2021) + - [🏄 Wave 9 - Q1 2021](#️-wave-9---q1-2021) - [2020](#2020) - - [🏄‍♀️ Wave 8 - Q4 2020](#️-wave-8---q4-2020) - - [🏄‍♀️ Wave 7 - Q3 2020](#️-wave-7---q3-2020) - - [🏄‍♀️ Wave 6 - Q2 2020](#️-wave-6---q2-2020) - - [🏄‍♀️ Wave 5 - Q1 2020](#️-wave-5---q1-2020) + - [🏄 Wave 8 - Q4 2020](#️-wave-8---q4-2020) + - [🏄 Wave 7 - Q3 2020](#️-wave-7---q3-2020) + - [🏄 Wave 6 - Q2 2020](#️-wave-6---q2-2020) + - [🏄 Wave 5 - Q1 2020](#️-wave-5---q1-2020) - [2019](#2019) - - [🏄‍♀️ Wave 4 - Q4 2019](#️-wave-4---q4-2019) - - [🏄‍♀️ Wave 3 - Q3 2019](#️-wave-3---q3-2019) - - [🏄‍♀️ Wave 2 - Q2 2019](#️-wave-2---q2-2019) - - [🏄‍♀️ Wave 1 - Q1 2019](#️-wave-1---q1-2019) + - [🏄 Wave 4 - Q4 2019](#️-wave-4---q4-2019) + - [🏄 Wave 3 - Q3 2019](#️-wave-3---q3-2019) + - [🏄 Wave 2 - Q2 2019](#️-wave-2---q2-2019) + - [🏄 Wave 1 - Q1 2019](#️-wave-1---q1-2019) ## 2023 -### 🏄‍♀️ Wave 19 - Q3 2023 +### 🏄 Wave 19 - Q3 2023 | Team | Project | Link | Terminated | First Delivery | Completed | | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------| :--------- | :------------: | :--------: | [🔝](#2023) -### 🏄‍♀️ Wave 18 - Q2 2023 +### 🏄 Wave 18 - Q2 2023 | Team | Project | Link | Terminated | First Delivery | Completed | | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------| :--------- | :------------: | :--------: | @@ -89,7 +89,7 @@ Use this page for an overview of all public grants and their status. Use the sid [🔝](#2023) -### 🏄‍♀️ Wave 17 - Q1 2023 +### 🏄 Wave 17 - Q1 2023 | Team | Project | Link | Terminated | First Delivery | Completed | | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------------------------------- | :--------- | :------------: | :--------: | @@ -144,7 +144,7 @@ Use this page for an overview of all public grants and their status. Use the sid ## 2022 -### 🏄‍♀️ Wave 16 - Q4 2022 +### 🏄 Wave 16 - Q4 2022 | Team | Project | Link | Terminated | First Delivery | Completed | | :----------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -190,7 +190,7 @@ Use this page for an overview of all public grants and their status. Use the sid [🔝](#2023) -### 🏄‍♀️ Wave 15 - Q3 2022 +### 🏄 Wave 15 - Q3 2022 | Team | Project | Link | Terminated | First Delivery | Completed | | :----------------------------------------------------------- | :-------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -236,7 +236,7 @@ Use this page for an overview of all public grants and their status. Use the sid [🔝](#2023) -### 🏄‍♀️ Wave 14 - Q2 2022 +### 🏄 Wave 14 - Q2 2022 | Team | Project | Link | Terminated | First Delivery | Completed | | :--------------------------------------------------------- | :------------------------------------------------------------------------------------------------------ | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -279,7 +279,7 @@ Use this page for an overview of all public grants and their status. Use the sid [🔝](#2023) -### 🏄‍♀️ Wave 13 - Q1 2022 +### 🏄 Wave 13 - Q1 2022 | Team | Project | Link | Terminated | First Delivery | Completed | | :---------------------------------------------------- | :-------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -320,7 +320,7 @@ Use this page for an overview of all public grants and their status. Use the sid ## 2021 -### 🏄‍♀️ Wave 12 - Q4 2021 +### 🏄 Wave 12 - Q4 2021 | Team | Project | Link | Terminated | First Delivery | Completed | | :--------------------------------------------------------- | :---------------------------------------------------------------------------------------- | :------------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -348,7 +348,7 @@ Use this page for an overview of all public grants and their status. Use the sid [🔝](#2023) -### 🏄‍♀️ Wave 11 - Q3 2021 +### 🏄 Wave 11 - Q3 2021 | Team | Project | Link | Terminated | First Delivery | Completed | | :---------------------------------------------- | :---------------------------------------------------------------------------------------- | :-------------------------------------------------- | :--------- | :------------: | :-------: | @@ -381,7 +381,7 @@ Use this page for an overview of all public grants and their status. Use the sid [🔝](#2023) -### 🏄‍♀️ Wave 10 - Q2 2021 +### 🏄 Wave 10 - Q2 2021 | Team | Project | Link | Terminated | First Delivery | Completed | | :----------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -417,7 +417,7 @@ Use this page for an overview of all public grants and their status. Use the sid [🔝](#2023) -### 🏄‍♀️ Wave 9 - Q1 2021 +### 🏄 Wave 9 - Q1 2021 | Team | Project | Link | Terminated | First Delivery | Completed | | :---------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -474,7 +474,7 @@ Use this page for an overview of all public grants and their status. Use the sid ## 2020 -### 🏄‍♀️ Wave 8 - Q4 2020 +### 🏄 Wave 8 - Q4 2020 | Team | Project | Link | Terminated | First Delivery | Completed | | :---------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -524,7 +524,7 @@ Use this page for an overview of all public grants and their status. Use the sid [🔝](#2023) -### 🏄‍♀️ Wave 7 - Q3 2020 +### 🏄 Wave 7 - Q3 2020 | Team | Project | Link | Terminated | First Delivery | Completed | | :--------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -562,7 +562,7 @@ Use this page for an overview of all public grants and their status. Use the sid [🔝](#2023) -### 🏄‍♀️ Wave 6 - Q2 2020 +### 🏄 Wave 6 - Q2 2020 | Team | Project | Link | Terminated | First Delivery | Completed | | :-------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -602,7 +602,7 @@ Use this page for an overview of all public grants and their status. Use the sid [🔝](#2023) -### 🏄‍♀️ Wave 5 - Q1 2020 +### 🏄 Wave 5 - Q1 2020 | Team | Project | Link | Terminated | First Delivery | Completed | | :---------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -648,7 +648,7 @@ Use this page for an overview of all public grants and their status. Use the sid ## 2019 -### 🏄‍♀️ Wave 4 - Q4 2019 +### 🏄 Wave 4 - Q4 2019 | Team | Project | Link | Terminated | First Delivery | Completed | | :----------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -681,7 +681,7 @@ Use this page for an overview of all public grants and their status. Use the sid [🔝](#2023) -### 🏄‍♀️ Wave 3 - Q3 2019 +### 🏄 Wave 3 - Q3 2019 | Team | Project | Link | Terminated | First Delivery | Completed | | :------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -702,7 +702,7 @@ Use this page for an overview of all public grants and their status. Use the sid [🔝](#2023) -### 🏄‍♀️ Wave 2 - Q2 2019 +### 🏄 Wave 2 - Q2 2019 | Team | Project | Link | Terminated | First Delivery | Completed | | :-------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------ | :--------- | :------------: | :-------: | @@ -721,7 +721,7 @@ Use this page for an overview of all public grants and their status. Use the sid [🔝](#2023) -### 🏄‍♀️ Wave 1 - Q1 2019 +### 🏄 Wave 1 - Q1 2019 | Team | Project | Link | Terminated | First Delivery | Completed | | :-------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------ | :-------------------------------------------------------------------------- | :--------- | :------------: | :-------: | From 9b30d274cc45692b5d3ee69dcb6d36fe672716fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 5 Jul 2023 10:27:05 +0200 Subject: [PATCH 520/578] Update index.md SARP M1 and complete --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index b6f4bf9b023..0af3c7a0eaa 100644 --- a/applications/index.md +++ b/applications/index.md @@ -60,7 +60,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Wunderbar Network](https://wunderbar.network/) | [Vue.js + TypeScript Substrate Front-End Template](./vue-typescript-substrate-frontend-template.md) | [GitHub](https://github.com/WunderbarNetwork) | ☐ | ☐ | ☐ | | [Profond.ai](https://www.profond.ai/) | [Profond](./Profond.md) | [GitHub](https://github.com/emarai) | ☐ | ☐ | ☐ | | [727.ventures](https://727.ventures) | [Patron](./patron.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | -| [Supercomputing Systems AG](https://www.scs.ch) | [SARP - A Static Analysis Tool for Runtime Pallets](./sarp-basic-functionality.md) | [GitHub](https://github.com/scs) | ☐ | ☐ | ☐ | +| [Supercomputing Systems AG](https://www.scs.ch) | [SARP - A Static Analysis Tool for Runtime Pallets](./sarp-basic-functionality.md) | [GitHub](https://github.com/scs) | ☐ | ☒ | ☒ | | [Ed Anderson](https://github.com/eca20) | [Blockchainia](./blockchainia.md) | [GitHub](https://github.com/eca20) | ☐ | ☐ | ☐ | | [CoinFabrik](https://www.coinfabrik.com/) | [ScoutCoinFabrik: Milestone 2](ScoutCoinFabrik_2.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | | [Polytope Labs](https://research.polytope.technology/) | [Interoperable State Machine Protocol](ismp.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | From cf0e23bbb9a6bac69a0efb193a5ebc703b7a6118 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 5 Jul 2023 10:29:50 +0200 Subject: [PATCH 521/578] Update and rename Static-Analysis-for-Runtime-Pallets.md to Static-Analysis-for-Runtime-Pallets.md --- .../Static-Analysis-for-Runtime-Pallets.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename docs/RFPs/{Open => Under Development}/Static-Analysis-for-Runtime-Pallets.md (95%) diff --git a/docs/RFPs/Open/Static-Analysis-for-Runtime-Pallets.md b/docs/RFPs/Under Development/Static-Analysis-for-Runtime-Pallets.md similarity index 95% rename from docs/RFPs/Open/Static-Analysis-for-Runtime-Pallets.md rename to docs/RFPs/Under Development/Static-Analysis-for-Runtime-Pallets.md index f3412e9dfc4..8c88c275f5d 100644 --- a/docs/RFPs/Open/Static-Analysis-for-Runtime-Pallets.md +++ b/docs/RFPs/Under Development/Static-Analysis-for-Runtime-Pallets.md @@ -1,5 +1,5 @@ # Static Analysis of Runtime Pallets -* **Status:** Open +* **Status:** [Under Development](https://github.com/w3f/Grants-Program/blob/master/applications/sarp-basic-functionality.md) * **Proposer:** [Bhargav Bhatt](https://github.com/bhargavbh), [David Hawig](https://github.com/Noc2) ## Project Description :page_facing_up: From dd18ef771b73c8aa018941faf3fd3aa8dbc4b1a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 5 Jul 2023 10:31:33 +0200 Subject: [PATCH 522/578] Update rfps.md Move static analysis to `Under Development` --- docs/rfps.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/rfps.md b/docs/rfps.md index 914e0c2ed89..d6872f13d6e 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -31,7 +31,6 @@ If you find an open RFP here that you think you can address, feel free to [submi | [move_smart_contract_pallet.md](RFPs/Open/move_smart_contract_pallet.md) | 22.12.2022 | | [parachain_validation_conformance_testing.md](RFPs/Open/parachain_validation_conformance_testing.md) | 18.01.2023 | | [polkadot-protocol_conformance_tests.md](RFPs/Open/polkadot-protocol_conformance_tests.md) | 08.05.2023 | -| [Static-Analysis-for-Runtime-Pallets.md](RFPs/Open/Static-Analysis-for-Runtime-Pallets.md) | 06.02.2023 | | [sub-consensus.md](RFPs/Open/sub-consensus.md) | 23.11.2021 | | [uptane-for-substrate-design-and-scope.md](RFPs/Open/uptane-for-substrate-design-and-scope.md) | 04.03.2023 | | [user-account-access-analysis.md](RFPs/Open/user-account-access-analysis.md) | 07.01.2023 | @@ -46,8 +45,10 @@ If you find an open RFP here that you think you can address, feel free to [submi | RFP | Last Updated | | :-- | :----------: | | [alternative_polkadot_host_implementations.md](RFPs/Open/alternative_polkadot_host_implementations.md) | 02.03.2023 | +| [alternative-polkadot-js-api-console.md](RFPs/Under%20Development/alternative-polkadot-js-api-console.md) | 19.05.2023 | | [analysis-website-and-data-platform.md](RFPs/Under%20Development/analysis-website-and-data-platform.md) | 28.06.2023 | | [data_analysis_tools.md](RFPs/Under%20Development/data_analysis_tools.md) | 28.06.2023 | +| [decentralized-security-marketplace.md](RFPs/Under%20Development/decentralized-security-marketplace.md) | 02.06.2023 | | [grant_management_webapp.md](RFPs/Under%20Development/grant_management_webapp.md) | 06.06.2023 | | [identity-directory.md](RFPs/Under%20Development/identity-directory.md) | 30.05.2022 | | [IDE_for_ink_Smart_Contracts.md](RFPs/Under%20Development/IDE_for_ink_Smart_Contracts.md) | 05.04.2023 | @@ -58,10 +59,9 @@ If you find an open RFP here that you think you can address, feel free to [submi | [privacy-enhancement-polkadot-extension.md](RFPs/Under%20Development/privacy-enhancement-polkadot-extension.md) | 27.05.22 | | [raft-validators.md](RFPs/Under%20Development/raft-validators.md) | 23.05.2023 | | [scale-codec-comparator.md](RFPs/Under%20Development/scale-codec-comparator.md) | 30.05.2022 | -| [decentralized-security-marketplace.md](RFPs/Under%20Development/decentralized-security-marketplace.md) | 02.06.2023 | +| [Static-Analysis-for-Runtime-Pallets.md](RFPs/Under%20Development/Static-Analysis-for-Runtime-Pallets.md) | 05.07.2023 | | [validator-setup-maintenance.md](RFPs/Under%20Development/validator-setup-maintenance.md) | 27.04.2023 | | [validator-selection-algorithm.md](RFPs/Under%20Development/validator-selection-algorithm.md) | 07.12.2022 | -| [alternative-polkadot-js-api-console.md](RFPs/Under%20Development/alternative-polkadot-js-api-console.md) | 19.05.2023 | From 231a0f4523dfbd1bb77d7c4f60eef36c36d6f36a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 5 Jul 2023 10:38:23 +0200 Subject: [PATCH 523/578] Update index.md Validated Streams complete --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 0af3c7a0eaa..914ff3c4377 100644 --- a/applications/index.md +++ b/applications/index.md @@ -99,7 +99,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☒ | ☒ | | [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☒ | ☐ | | [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | -| [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☒ | ☐ | +| [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☒ | ☒ | | [Blockcoders](http://blockcoders.io/) | [Kuma Cross-chain Wallet](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☐ | | [OmniBTC](https://omnibtc.finance/) | [Polkadot Smart Chain](psc.md) | [GitHub](https://github.com/OmniBTC/PSC) | ☐ | ☒ | ☒ | | [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☒ | ☒ | From e616e2f2fabb2e6ed7f2bc348ff1304628347078 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 5 Jul 2023 13:09:38 +0200 Subject: [PATCH 524/578] Update index.md QRUCIAL DAO complete --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 914ff3c4377..a37eaf4549e 100644 --- a/applications/index.md +++ b/applications/index.md @@ -194,7 +194,7 @@ Use this page for an overview of all public grants and their status. Use the sid | Team | Project | Link | Terminated | First Delivery | Completed | | :----------------------------------------------------------- | :-------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | -| [QRUCIAL OÜ](https://qrucial.io/) | [QRUCIAL DAO](./QRUCIAL_DAO.md) | [GitHub](https://github.com/Qrucial/QRUCIAL-DAO) | ☐ | ☒ | ☐ | +| [QRUCIAL OÜ](https://qrucial.io/) | [QRUCIAL DAO](./QRUCIAL_DAO.md) | [GitHub](https://github.com/Qrucial/QRUCIAL-DAO) | ☐ | ☒ | ☒ | | [Polkadot js plus](http://polkadotjs.plus/) | [Polkadot js plus / Social Recovery Wallet](./Plus-social-recovery-wallet.md) | [GitHub](https://github.com/Nick-1979/polkadot-Js-Plus-extension/wiki) | ☐ | ☒ | ☐ | | [Lee](https://github.com/rust-0x0) | [Hex Space Social Graph](./hex.md) | [GitHub](https://github.com/rust-0x0) | ☐ | ☒ | ☐ | | [Liberland LLC](https://liberland.org/en/) | [Liberland Pallets](./liberland.md) | [GitHub](https://github.com/liberland/liberland_substrate) | ☐ | ☒ | ☒ | From f7d15f4e5b82b5e02db5c7a734313b46f344fbf2 Mon Sep 17 00:00:00 2001 From: Dusan Morhac <55763425+dudo50@users.noreply.github.com> Date: Mon, 10 Jul 2023 09:29:21 +0200 Subject: [PATCH 525/578] Update LightSpell-proposal.md (#1835) --- applications/LightSpell-proposal.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/applications/LightSpell-proposal.md b/applications/LightSpell-proposal.md index 0e3e7c25365..d4a4a3194ca 100644 --- a/applications/LightSpell-proposal.md +++ b/applications/LightSpell-proposal.md @@ -182,8 +182,8 @@ Michael Absolon - Student, XCM SDK & XCM API Core Dev. Faculty of Informatics an ### Legal Structure -- **Registered Address:** TBA later (Switching to the company) -- **Registered Legal Entity:** TBA later (Switching to the company) +- **Registered Address:** Tomášovská 453/2, Kalinovo 98501, Slovak Republic +- **Registered Legal Entity:** Dušan Morháč ### Team's experience - Dušan is the founder & researcher behind this project and he has successfully presented it at the international conference ICECET2022 held in Prague from which there is an article regarding XCMP & ParaSpell project. It is published by IEEE [link](https://ieeexplore.ieee.org/document/9872938). He also successfully presented it at ICBC 2023 conference held in Dubai. Dušan also studies Blockchain technology and had a bachelor's thesis about cross-blockchain sharing from which this idea was born. Dušan continues research on this idea in his Master's thesis. He is actively working on ParaSpell https://github.com/paraspell full-time & has also participated in other ecosystem projects. Recently he attended Polkadot Blockchain Academy 2023 in Buenos Aires which gave him a lot of insight into the ecosystem and he also graduated from the academy successfully. Here is NFT that was minted as a certificate by Parity - [link](https://singular.app/collectibles/statemine/20/12) From a85cef33bde5f91ed7102b4f18299600d7d80737 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Mon, 10 Jul 2023 10:07:20 -0300 Subject: [PATCH 526/578] Update index.md (#1836) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index a37eaf4549e..56ae0d0809a 100644 --- a/applications/index.md +++ b/applications/index.md @@ -107,7 +107,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☒ | ☒ | ☐ | | [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☒ | ☒ | | [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☒ | -| [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☒ | ☐ | +| [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☒ | ☒ | | [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☒ | ☐ | | [Aviraj Khare](https://github.com/avirajkhare00) | [Polkasearch](polkasearch.md) | [GitHub](https://github.com/avirajkhare00) | ☐ | ☐ | ☐ | | [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib Follow up](php-rpc-lib-follow-up.md) | [GitHub](https://github.com/gmajor-encrypt/php-substrate-api) | ☐ | ☒ | ☒ | From c1c88d5458bdffe2f86371c9ab1f8ece72a1d8d4 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 10 Jul 2023 15:08:27 +0200 Subject: [PATCH 527/578] Update README.md Update team --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 87130862957..e5295e6989b 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,6 @@ The committee consists of individuals who know the funding priorities of the Pol In cases where a niche expert opinion is desirable, one of the committee members may request such a review. -- [Nabil Abdellaoui](https://github.com/randombishop) - [Santiago Balaguer](https://github.com/SBalaguer) - [Aeron Buchanan](https://github.com/aeronbuchanan) - [Gautam Dhameja](https://github.com/gautamdhameja) @@ -104,7 +103,6 @@ In cases where a niche expert opinion is desirable, one of the committee members Evaluators are individuals able to evaluate the technology delivered as a result of the Grants Program. The committee has the right to add or remove evaluators on the basis of supermajority. -- [Nabil Abdellaoui](https://github.com/randombishop) - [Matteo Casonato](https://github.com/0xCaso) - [David Hawig](https://github.com/Noc2) - [Diogo Mendonça](https://github.com/dsm-w3f) From d17cab3d249ef123fc0a1a9bf6322045c3ab0342 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 10 Jul 2023 15:09:05 +0200 Subject: [PATCH 528/578] Update README.md Update Team --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index e5295e6989b..b1d39f5ca1b 100644 --- a/README.md +++ b/README.md @@ -103,7 +103,6 @@ In cases where a niche expert opinion is desirable, one of the committee members Evaluators are individuals able to evaluate the technology delivered as a result of the Grants Program. The committee has the right to add or remove evaluators on the basis of supermajority. -- [Matteo Casonato](https://github.com/0xCaso) - [David Hawig](https://github.com/Noc2) - [Diogo Mendonça](https://github.com/dsm-w3f) - [Sebastian Müller](https://github.com/semuelle) From f044c5d19b74ed87440e2b197b76c24b72b62cff Mon Sep 17 00:00:00 2001 From: Noc2 Date: Mon, 10 Jul 2023 15:10:32 +0200 Subject: [PATCH 529/578] Update team --- docs/Introduction/team.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/docs/Introduction/team.md b/docs/Introduction/team.md index fddb79e2cd5..041476e1fda 100644 --- a/docs/Introduction/team.md +++ b/docs/Introduction/team.md @@ -10,7 +10,6 @@ The committee consists of individuals who know the funding priorities of the Pol In cases where a niche expert opinion is desirable, one of the committee members may request such a review. -- [Nabil Abdellaoui](https://github.com/randombishop) - [Santiago Balaguer](https://github.com/SBalaguer) - [Aeron Buchanan](https://github.com/aeronbuchanan) - [Gautam Dhameja](https://github.com/gautamdhameja) @@ -28,8 +27,6 @@ In cases where a niche expert opinion is desirable, one of the committee members Evaluators are individuals able to evaluate the technology delivered as a result of the Grants Program. The committee has the right to add or remove evaluators on the basis of supermajority. -- [Nabil Abdellaoui](https://github.com/randombishop) -- [Matteo Casonato](https://github.com/0xCaso) - [David Hawig](https://github.com/Noc2) - [Diogo Mendonça](https://github.com/dsm-w3f) - [Sebastian Müller](https://github.com/semuelle) From 3ec63d38fd5ab676f9495515563c04db3bf600cc Mon Sep 17 00:00:00 2001 From: DiegoTorresborda <97901225+DiegoTorresborda@users.noreply.github.com> Date: Mon, 10 Jul 2023 16:00:59 -0300 Subject: [PATCH 530/578] Contract Wizard Proposal (#1742) * Submitting Contract Wizard Proposal Submitting Contract Wizard Proposal * Update Contract_wizard.md Removed point 6 from milestone 2 according to feedback * Update Contract_wizard.md Update FTE Cost to reduce GAP with the previous proposal. * Update Contract_wizard.md Updated Proposal * Update Contract_wizard.md Updated proposal according to feedback. * Update Contract_wizard.md Update fix table --- applications/Contract_wizard.md | 172 ++++++++++++++++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 applications/Contract_wizard.md diff --git a/applications/Contract_wizard.md b/applications/Contract_wizard.md new file mode 100644 index 00000000000..4354af51aa1 --- /dev/null +++ b/applications/Contract_wizard.md @@ -0,0 +1,172 @@ +# Polkadot Contract Wizard +​ +- **Team Name:** Protofire +- **Payment Address:** 0xD662E05ce522B3861b70FC376F60bF50E200abfA (USDC - Ethereum network) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 3 +​ +## Project Overview :page_facing_up: +​ +The Polkadot Contract Wizard has successfully completed its initial phase, making it easier for users to create and deploy standard smart contracts on the Polkadot ecosystem. In the next phase, we aim to expand the scope of the project by implementing additional features and supporting multiple chains. Our goal is to continue enhancing the user experience and versatility of the Polkadot Contract Wizard, making it a powerful tool for both developers and non-developers. +​ +### Overview +​ +In the next phase, we plan to implement the following features: +​ +1.- Interaction with deployed contracts through the wizard's UI. +​ +2.- Interaction with smart contracts deployed by the user. +​ +3.- Shareable Contract Interaction Links +​ +4.- Support for multiple chains +​ +These enhancements will allow users to create, modify, deploy and interact with smart contracts on different parachains, making the Contract Wizard an indispensable tool for the community within the Polkadot and Kusama ecosystem. +​ +### Project Details +​ +####
1. Interact with deployed contracts +We will create a functionality that enables users to directly interact with their deployed contracts via the user interface of the wizard. This functionality will be generated dynamically according to the metadata of the contracts. With this, users will be able to conveniently and effectively manage their contracts and carry out interactions using the same tool. +​ +#### 2. Interaction with custom smart contracts +Our platform will offer the capability to interact with any contract of their choice. To utilize this feature, they simply need to provide the metadata, network, and address associated with the contract. Once this information is ready, the user interface will automatically generate a customized user-friendly layout for allowing people to easily interact with their custom contracts. +​ +#### 3. Shareable Contract Interaction Links +To enhance the user experience and encourage collaboration, we plan to implement a feature for shareable contract interaction links. +Once a developer deploys a contract or uploads the metadata for interacting with it on our platform, they can generate a unique, shareable link. This link will contain all necessary information for interacting with the contract, essentially encapsulating the contract's ABI (Application Binary Interface) and its address on the blockchain. +Users receiving this link can interact with the contract directly, without needing to reupload the metadata or know the contract's specifics. This feature not only simplifies the process of contract interaction but also fosters collaboration and sharing within the developer community. +​ +#### 4. Support for multiple chains +This tool will offer a feature that enables users to connect to parachains implementing the contracts pallet. We will provide a list of some of these parachains in Polkadot, Kusama, and Rococo networks. Additionally, users will have the option to connect to a network that is not listed by specifying the web socket. +​ +### Tentative Mockups + +![](https://github.com/protofire/assets/blob/c18c2adb8f40c692134bffbb4e92e0a78872744e/add_contract_1_720.png) + +![](https://github.com/protofire/assets/blob/c18c2adb8f40c692134bffbb4e92e0a78872744e/add%20contract%202.png) + +![](https://github.com/protofire/assets/blob/c18c2adb8f40c692134bffbb4e92e0a78872744e/add%20contract%203.png) + +![](https://github.com/protofire/assets/blob/c18c2adb8f40c692134bffbb4e92e0a78872744e/networks%201.png) + +![](https://github.com/protofire/assets/blob/c18c2adb8f40c692134bffbb4e92e0a78872744e/networks%202.png) + +### Ecosystem Fit +​ +The Polkadot Contract Wizard aims to streamline the onboarding process and enhance usability within the Polkadot and Kusama ecosystem. +​ +This project will contribute to the ecosystem in the following ways: +​ +1. **Simplifying smart contract creation**: The Polkadot Contract Wizard will offer a user-friendly interface that allows individuals with varying levels of technical expertise to create smart contracts without the need for extensive programming knowledge. This will empower more people to participate in the ecosystem and explore the possibilities offered by smart contracts. +​ +2. **Enhancing user experience**: By providing video tutorials, detailed documentation, and an intuitive interface, we will create a welcoming environment for new users, making it easier for them to get started with smart contracts on Polkadot and Kusama. +​ +3. **Expanding the ecosystem's reach**: With the inclusion of multiple chains and custom contract creation, the Polkadot Contract Wizard will cater to a broader audience, encouraging more projects and developers to join the Polkadot and Kusama ecosystem. +​ +4. **Encouraging community growth and collaboration**: By offering comprehensive support and resources, we aim to foster a strong, collaborative community around the Polkadot Contract Wizard, encouraging users to share their experiences, contribute to the project, and help one another succeed. +​ +5. **Driving innovation and adoption**: By simplifying the process of working with smart contracts, we hope to inspire more users to experiment with new ideas and solutions, driving innovation and adoption within the Polkadot and Kusama ecosystem. +​ +## Team :busts_in_silhouette: +​ +### Team members +​ +- Diego Torres (Team leader / Product Owner) +- Gabriel Gonzalez (Rust Engineer) +- Luca Auet (Rust Engineer) +- Agustin Longoni (UI/UX Designer) +- Henry Palacios (Front-end engineer) +​ +### Contact +​ +- **Contact Name:** Diego Torres Borda +- **Contact Email:** diego@protofire.io +- **Website:** [protofire.io](https://protofire.io/) +​ +### Legal Structure +​ +- **Registered Address:** 1607 Ponce de Leon Avenue, GM-06, San Juan, PR, 00909 +- **Registered Legal Entity:** Altoros LLC (DBA Protofire) +​ +### Team's experience +​ +Protofire has proven expertise in building decentralized infrastructure, protocols, applications, and developer platforms to accelerate growth of network’s ecosystems. By delivering hands-on coding and contributions, Protofire specializes in supercharging developer adoption, bootstrapping, and network usage +We are not only a dev shop company, but we create long term partnerships with the projects we are part of, building and working as ambassadors for the community. We believe in the projects and also participate by running nodes and taking the validator or staker roles. +​ +### Team Code Repos +​ +- https://github.com/protofire/polkadot-contract-wizard/ +- https://github.com/protofire/ink-compiler-be +- https://github.com/protofire/moonbeam-web-core +- https://github.com/protofire/blockchain-learning-path +- https://github.com/protofire/omen-exchange +- https://github.com/protofire/kyber-pool-master-proxy-contract +​ +GitHub accounts of team members. +- https://github.com/alongoni +- https://github.com/henrypalacios +- https://github.com/0xLucca +- https://github.com/GabrielCamba +​ +### Team LinkedIn Profiles +​ +- https://www.linkedin.com/in/diego-torres-borda-94b70912/ +- https://www.linkedin.com/in/agustinlongoni/ +- https://www.linkedin.com/in/henrydpalacios/ +- https://www.linkedin.com/in/lucaauet/ +- https://www.linkedin.com/in/gabriel-nicolas-gonzalez/ +​ +## Development Status :open_book: +​ +We have successfully completed the previous grant, and we can confidently affirm that our platform, [contractwizard.xyz](https://www.contractwizard.xyz/), is now a user-friendly and highly useful tool. One of the key features of our platform is that it simplifies the deployment of standard smart contracts within the Dotsama ecosystem. With our platform, users no longer have to navigate through complex processes to deploy their contracts. Our streamlined approach means that anyone can deploy a smart contract without requiring advanced technical knowledge, saving time and resources. We are incredibly grateful for the support we have received so far, and we are committed to ensuring that our platform remains a top choice for deploying smart contracts within the Dotsama ecosystem. +​ +## Development Roadmap :nut_and_bolt: +​ +Described in project details. +​ +### Overview +​ +- **Total Estimated Duration:** 3 months +- **Full-Time Equivalent (FTE):** 2.5 +- **Total Costs:** 52500 U$D +​ +## Milestones +​ +### Milestone 1 — Functionality Implementation and Educational Content +​ +- **Estimated duration:** 3 months +- **FTE:** 2.5 +- **Costs:** 52500 + +​ +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both inline documentation of the code and a basic tutorial that explains how a user can use the new features. | +| **0c.** | Testing and Testing Guide | The code will have unit-test coverage to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile that allows users to easily run the application. | +| 1. | Interaction with deployed contracts | The functionallity based on [step 1](#step1) of the Project Details section. | +| 2. | Interaction with custom smart contracts | The functionality based on [step 2](#step2) of the Project Details section. | +| 3. | Shareable Contract Interaction Links | The functionality corresponds to what's described on [step 3](#step3) of the Project Details section. | +| 4. | Support for multiple chains | The functionality to be implemented corresponds to [step 4](#step4) of the Project Details section. | + +​ +## Future Plans +​ +At contractwizard.xyz team in protofire, our mission is to continue innovating and developing our platform to cater to the ever-changing needs of the smart contract community. We recognize the importance of providing our users with a comprehensive tool that enables them to manage all ink! smart contracts, including those they have created custom. +​ +As we continue to develop our platform, we understand the importance of building a community around it. We believe that by creating a community of users, we can facilitate the sharing of knowledge, contracts, and different approaches to problem-solving. Through our platform, users will have the ability to share their experiences, ask questions, and engage with others within the community. This will create an environment that fosters innovation and encourages collaboration, leading to the development of new and exciting ideas. Our hope is that our platform will serve as a hub for all things smart contract-related, where users can come together to learn, grow, and innovate. +​ +**Custom contracts** +- Add the possibility of creating custom contracts, not only with the modifiers but adding the ability to write code using the interface. +- Compile the generated code and deploy it to different parachains. +- Following the comments made on the [pull request](https://github.com/w3f/Grants-Program/pull/1413#pullrequestreview-1234970716), our approach will be based on the [ink-playground](https://github.com/paritytech/ink-playground) in order to integrate writing custom code and compiling it. +​ +**Social Interaction** +- Create an account to store information. +- Save your created smart contracts. +- Be able to share them with the community and ask for help. +- Provide assistance to other community members. +​ +## Additional Information :heavy_plus_sign: +​ +**How did you hear about the Grants Program?** Web3 Foundation Website From 32b22c9e45af7bfbc2caf5743c2fab647a301426 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 10 Jul 2023 21:39:17 +0200 Subject: [PATCH 531/578] Update index.md --- applications/index.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/applications/index.md b/applications/index.md index 56ae0d0809a..0c61e39c242 100644 --- a/applications/index.md +++ b/applications/index.md @@ -43,6 +43,8 @@ Use this page for an overview of all public grants and their status. Use the sid | Team | Project | Link | Terminated | First Delivery | Completed | | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------| :--------- | :------------: | :--------: | +| [Protofire](https://protofire.io/) | [Contract Wizard](./Contract_wizard.md) | [GitHub](https://github.com/protofire/polkadot-contract-wizard/) | ☐ | ☐ | ☐ | + [🔝](#2023) From 2266d78f46593c41fb720451ce171d0097c22a0f Mon Sep 17 00:00:00 2001 From: DarkingLee <49502360+DarkingLee@users.noreply.github.com> Date: Tue, 11 Jul 2023 04:00:47 +0800 Subject: [PATCH 532/578] Add Melodot proposal (#1804) * Create Melodot.md * Update milestones * Add milestone detail description --- applications/Melodot.md | 238 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 238 insertions(+) create mode 100644 applications/Melodot.md diff --git a/applications/Melodot.md b/applications/Melodot.md new file mode 100644 index 00000000000..56a692562d6 --- /dev/null +++ b/applications/Melodot.md @@ -0,0 +1,238 @@ +# Melodot: Incentive-compatible data availability layer + +- **Team Name:** ZeroDAO +- **Payment Address:** 0xEBCDa7c73EB5Dd7a4314cFf395bE07EB1E24c046 (DAI) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview 📄 + +#### Data Availability Layer + +The current data availability layer scheme requires the assumption that the network has at least the minimum number of honest nodes.However, due to the need to prevent data retention attacks, the samplers are required to be anonymous, making it difficult to measure the number of samplers. At the same time, samplers are more concerned with data related to themselves, resulting in an uneven distribution of total active samplers over time. The assumption of a minimum number of honest nodes affects the robustness of the data availability layer. + +Challenging issues in the data availability layer also include: who will perform distributed generation, who will reconstruct the data, who will store the data, how long will the data be stored, and how to ensure that these tasks are well done. + +One possible approach is to delegate these tasks to consensus validators, but there is a lack of effective incentive mechanisms. For cost considerations, not performing distributed generation, data reconstruction, and data storage is the most profitable for validators. In addition, consuming too many resources of consensus validators is very unfavorable for scalability. + +Melodot introduces the role of farmers by combining PoSpace, alleviating the system's dependence on the minimum number of honest nodes assumption, and completing an incentive-compatible distributed generation and data storage scheme. Consensus validators now act more like light clients, improving future scalability. You can learn more from this preliminary [whitepaper](https://www.notion.so/zerodao/Melodot-Data-Availability-Layer-Whitepaper-b72b1f3de81c40fc94a56763756ce34a). + +## Project Details + +### Architecture + +#### Erasure Coding and KZG Commitment + +Melodot uses 2D Reed-Solomon for data expansion, providing better sampling efficiency. It generates KZG commitments in the row direction, avoiding fraud proofs, similar to Ethereum's Darksharding. Block headers contain KZG commitments and data locations for different apps, allowing light clients to sample or download only data relevant to themselves. + +#### Farmers + +Farmers receive rewards through PoSpace, which is used to verify that participants have allocated a certain amount of storage space on their devices. The consensus mechanism is achieved through a time-memory trade-off approach, which has its origins in the [Beyond Hellman](https://www.semanticscholar.org/paper/Beyond-Hellman's-Time-Memory-Trade-Offs-with-to-of-Abusalah-Alwen/39e70d67eeb5ce140171f6d0629daec3b54d74f3) paper and has been adopted for use in the [Chia protocol](https://docs.chia.net/proof-of-space/). This method allows for a more efficient and secure consensus process compared to traditional energy-intensive mechanisms such as Proof of Work. [Subspace improves PoSpace](https://github.com/subspace/consensus-v2-research-paper) for storing "useful data" and is closely linked to KZG commitments. We are inspired by them, in contrast, Melodot's farmers receive rewards through PoSpace rather than reaching consensus. This incentive mechanism ensures that the network can still recover data when natural sampling samples are insufficient and guarantees data storage for at least a specific duration. + +Farmers need to complete the distributed generation of specified data, expanding the data generated by block proposers in the column direction. They then calculate the challenge eligibility through the generated data, similar to [Chia's filter](https://docs.chia.net/signage-and-infusion-points/), with only a small portion of farmers eligible to further search for solutions. This design reduces the computation load on farmers, avoids missing the submission of solutions, and allows farmers to devote more bandwidth and capacity resources to data availability sampling and storage. In addition, farmers are more inclined to generate all specified data in a distributed manner, as each chunk represents a potential lottery ticket. + +Farmers use the committed space to store blob data and maintain its timeliness. New data receives more rewards, while expired data will not be rewarded. Upon obtaining challenge eligibility, farmers need to search for solutions in the stored data, including chunk, data proofs, space proofs, etc. The system adjusts the difficulty based on the reward claims situation. Ultimately, the rewards farmers receive are linearly related to the size of the stored data space and depend on whether they have correctly and promptly completed distributed generation and necessary data reconstruction. + +#### Lifecycle + +![Untitled](https://pic.tom24h.com/zerodao/life.png) + +A complete blob transaction includes: + +- Publishing a blob transaction, including the original KZG commitment +- Block builders collect blob transactions and build blocks, erasure code data, and generate new commitments to be added to the block header +- Consensus validators verify block validity and, along with farmers, perform preliminary availability sampling (not ensuring 100% validity, but with high probability of being valid), either rejecting or accepting the block +- Farmers use the block data, commitments, and proofs learned in the previous step to generate specified columns in a distributed manner +- When the block is finalized + - Farmers with challenge eligibility complete solutions and claim rewards + - Light clients and consensus validators perform sampling simultaneously + - Farmers obtain more specified data from the network for storage and delete expired data + +Melodot is developed in phases, with the first phase not implementing the complete process. + +### Components + +In this phase, we will implement the following core components: + +1. **Erasure-Coding** + + A core module for erasure coding and KZG based on [rust-kzg](https://github.com/sifraitech/rust-kzg), including expanding data and generating commitments and proofs, verifying blob, batch verifying blobs, recovering data, verifying the correct expansion of 2D commitments, and expanding column data and witnesses. + +2. **Melo-Store** + + Interfaces for registering and managing applications, uploading data, and storing data validity data. + +3. **Consensus-related extensions** + +**`excutive_das`** pallet: An extension of the **`frame-excutive`** pallet for scheduling block execution and validation related to DAS + +**`system_das`** pallet: An extension of the **`frame-system`** pallet, adding new block header generation, actual data generation, and validation. + +4. **Sampling Core** + +The core crate that actually performs sampling, which several clients in the system depend on. This includes data availability sampling, obtaining and propagating data from the DHT network, and managing data through rocksdb. + +5. **Light Client** + +A light client that connects to the network and performs sampling based on the block state, including network implementation, distributed generation, data storage, and actual sampling. + +6. **`Melo-PoSpace`** + +A pallet for assigning distributed generation columns to farmers, verifying farmers' challenge chunk, and issuing rewards. + +7. **Farmer Client** + +Connects to the network, obtains raw data, and performs distributed generation; obtains challenges from the chain and searches for solutions to claim rewards. + +### **Non-Goals** + +The goal of the first phase is to minimally implement a usable system and will not fully implement the details described in the whitepaper. The main differences are: + +**PoSpace** + +In the first phase, we will only implement a preliminary version of PoSpace, not including the complete PoSpace process. [Subspace has done an excellent exploration in this regard](https://subspacelabs.notion.site/Subspace-Dilithium-Consensus-Specification-v2-3-274a730b53eb4c93a8d879b90de532ce). In the next phase of development, we should be able to reuse much of their work. + +**Complete Distributed Generation** + +This phase does not include complete distributed generation. Users still need to submit actual data transactions, so farmers and validators do not need to perform the first phase of sampling. + +## **Ecosystem Fit** + +### Similar Projects + +There are currently several data availability layer projects, including Ethereum Danksharding, Celestia, Avail, and Eigen DA. Our main difference from them is the introduction of farmers, which solves many tricky problems faced by the data availability layer. Unlike Danksharding, we decouple an independent data availability layer, which is the same principle as Polkadot not supporting smart contracts. Celestia uses a Merkle encoding pattern, requiring fraud proofs and additional assumptions, which we avoid. Avail's data layout uses a 1.5D scheme, which is unacceptable in terms of sampling efficiency, as detailed in the Melodot white paper. Eigen DA is an Ethereum re-collateralization layer implementation of a data availability scheme, with limited public information available, [but it should be in the form of a DA committee](https://ethresear.ch/t/unbundling-pbs-towards-protocol-enforced-proposer-commitments-pepc/13879), which has its applicable scenarios, but is not the same as Melodot. + +### **Relationship with Polkadot and substrate** + +1. With Melodot as a data availability layer, any parallel chain can easily become a Rollup settlement layer. Polkadot brings more secure interactions between settlement layers, significantly increasing Polkadot's capacity. +2. Other teams can develop their own data availability layers based on Melodot. + +## Team 👥 + +### Team members + +- Daqin Lee +- Zhidong Chen +- Sober Man + +### Contact + +- **Contact Name:** Daqin Lee +- **Contact Email:** [lee@melodot.io](mailto:lee@melodot.io) + +### Team's experience + +Daqin Lee: Full-stack Developer, Rust and Substrate Developer, core developer of Melodot. + +Chen Zhidong: Full-stack Developer, Tesla Machine Learning Engineer, [GoHack 2017](http://gohack2017.golangfoundation.org/) Hackathon [First Prize](https://github.com/sillydong/lbsengine), will serve as a technical advisor for Melodot. + +Sober Man: Embedded Engineer, with years of backend and embedded development experience. + +### Team Code Repos + +- https://github.com/ZeroDAO +- https://github.com/DarkingLee +- https://github.com/sillydong + +### Development Status + +ZeroDAO previously developed the Ourspace project, which is a reputation system utilizing social relationships and received support from W3F. After that, we shifted our focus to calculating all social networks in Web3. In this process, we found that they were either expensive to interact with or difficult to securely use on-chain. Through in-depth analysis, we summarized these issues as a lack of visibility. Therefore, we temporarily paused the development of Ourspace (we will continue to develop it later) and focused on researching the "visibility" issue, discovering that rollup technology is a good solution to this problem. The data availability layer is the first step in achieving this, and after extensive research, we designed Melodot. The work we have completed so far includes: + +1. [Whitepaper](https://www.notion.so/zerodao/Melodot-Data-Availability-Layer-Whitepaper-b72b1f3de81c40fc94a56763756ce34a): Completed a preliminary whitepaper. +2. [Research](https://zerodao.notion.site/Rollup-product-tracking-research-b9448e4464404736858e55972ea12152): We conducted some research on Rollup and data availability layer projects, and you can see the project list here. + +## Development Roadmap + +### Overview + +- **Total Estimated Duration:** 4.5 months +- **Full-Time Equivalent (FTE):** 1.5 +- **Total Costs:** 28,000 DAI + +### Milestone 1 — Erasure coding and KZG + +- **Estimated duration:** 1 month +- **FTE:** 1 +- **Costs:** 5,000 USD + +| Number | Deliverable | Specification | +| ------- | ------------------------- | ------------------------------------------------------------ | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both inline documentation of the code and a basic tutorial that explains how the new functionality works and how they are used. | +| **0c.** | Testing and Testing Guide | Unit tests will completely cover the Core functionality to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide Dockerfiles to demonstrate the full functionality of erasure coding and KZG commitments. | +| 1. | melo_erasure_coding | The core part of the system, including 2D erasure coding and KZG commitment-related primitives and common interfaces. | + +### Milestone 2 — Consensus + +- **Estimated duration:** 1.5 months +- **FTE:** 1 +- **Costs:** 7,000 USD + +| Number | Deliverable | Specification | +| ------- | ------------------------------ | ------------------------------------------------------------ | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both inline documentation of the code and a basic tutorial that explains how a user can spin up a client, connect to the client management application and data through a browser, and create a local development chain. | +| **0c.** | Testing and Testing Guide | Higher-level integration tests and unit tests for all modules. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide Dockerfiles to start multiple nodes with different roles, create a local test network, and run all integration tests. | +| 1. | Substrate pallet: excutive_das | Depends on the `frame-executive` pallet, extending the DAS-related scheduling and data structures. The main functionalities include scheduling data availability throughout the lifecycle of blocks, which involves the block proposer constructing data, erasure coding, KZG commitments, and generating extended block headers. Validators verify if they are generated correctly. | +| 2. | Substrate pallet: system_das | Depends on the `frame-system` pallet, extending the DAS-related actual operations. The system_das is a specific implementation of the executive_das functionality, which primarily includes: 1) Extracting availability data 2)Applying erasure coding 3) Generating KZG commitments and proofs 4)Generating extended block headers. Validators: 1) Verify the correctness of the generated KZG commitments 2) Validate the proofs by conducting non-interactive challenge 3) Verify the correct generation of data availability block headers. | +| 3. | Substrate pallet: melo_store | Pallet for managing apps and submitting data. The main functions include dispatchable functions for application registration, permission management, and uploading availability data. It also encompasses an interface for availability management, allowing validators to modify data availability based on availability sampling. | +| 4. | melodot-client | Fully implemented data availability layer node client. | + +### Milestone 3 — Sampling + +- **Estimated duration:** 1 month +- **FTE:** 1.5 +- **Costs:** 7,000 USD + +| Number | Deliverable | Specification | +| ------- | ------------------------- | ------------------------------------------------------------ | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both inline documentation of the code and a basic tutorial that explains how a user can start a light client and connect to the network. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide Dockerfiles to start a light client, connect to the local test network, and run all integration tests. | +| **0e.** | Article | We will publish an article explaining how Melodot works, how to run a local test network, and how to run a light client. | +| 1. | Light client | A light client that connects to the network and efficiently performs sampling, stores sampling data, and maintains data availability confidence. | +| 2. | melo_sampling | A decoupled sampling module that provides core functionality related to data sampling. | + +### Milestone 4 — Farmer + +- **Estimated duration:** 1 month +- **FTE:** 2 +- **Costs:** 9,000 USD + +| Number | Deliverable | Specification | +| ------- | ------------------------- | ------------------------------------------------------------ | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both inline documentation of the code and a basic tutorial that explains how a user can run a farmer client and earn rewards. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile that can be used to test all the functionality delivered with this milestone. | +| **0e.** | Article | We will publish an article explaining the farmer part and the future plans for Melodot, as well as how to run a farmer client. | +| 1. | melo_farmer | Implementation of the farmer client, used to connect to the melodot-client, solve challenges, and distribute and store data. | +| 2. | melo_PoSpace | A pallet used to assign distributed generation tasks to farmers and distribute rewards to farmers. | + +## **Future Plans** + +In the near future, we plan to establish a company as the core development team. Our long-term plan is to build the entire ecosystem through a DAO, and we have already formulated a centralized version of the DAO to be developed after the launch of the Melodot testnet. + +Our short-to-medium-term plan (6 months) includes: + +Melodot + +- Launch the testnet +- Identify and eliminate all possible security threats +- Complete the full PoSpace and distributed generation + +SDK + +- Develop an SDK based on Substrate for quickly launching settlement layers and sequencer + +## Additional Information➕ + +**How did you hear about the Grant Program?** + +Web3 Foundation website + +- Previous grant applications + +We have previously applied for ZeroDAO-node, which has now been renamed to ([ourspace](https://github.com/ZeroDAO/ourspace)). From ec72c6d607485ebb8b1a67b33187d6edb7692f6f Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 11 Jul 2023 09:22:53 +0200 Subject: [PATCH 533/578] Update index.md Add Melodot --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 0c61e39c242..7711f3ccbe1 100644 --- a/applications/index.md +++ b/applications/index.md @@ -44,6 +44,7 @@ Use this page for an overview of all public grants and their status. Use the sid | Team | Project | Link | Terminated | First Delivery | Completed | | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------| :--------- | :------------: | :--------: | | [Protofire](https://protofire.io/) | [Contract Wizard](./Contract_wizard.md) | [GitHub](https://github.com/protofire/polkadot-contract-wizard/) | ☐ | ☐ | ☐ | +| [ZeroDAO](https://github.com/ZeroDAO) | [Melodot](./Melodot.md) | [GitHub](https://github.com/ZeroDAO) | ☐ | ☐ | ☐ | [🔝](#2023) From ed5de3518d6b0ab8a35706735241b692969de9a2 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Tue, 11 Jul 2023 09:25:56 +0200 Subject: [PATCH 534/578] Fix website --- applications/Contract_wizard.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/applications/Contract_wizard.md b/applications/Contract_wizard.md index 4354af51aa1..a8c112eafa8 100644 --- a/applications/Contract_wizard.md +++ b/applications/Contract_wizard.md @@ -24,18 +24,18 @@ These enhancements will allow users to create, modify, deploy and interact with ​ ### Project Details ​ -#### 1. Interact with deployed contracts +#### 1. Interact with deployed contracts We will create a functionality that enables users to directly interact with their deployed contracts via the user interface of the wizard. This functionality will be generated dynamically according to the metadata of the contracts. With this, users will be able to conveniently and effectively manage their contracts and carry out interactions using the same tool. ​ -#### 2. Interaction with custom smart contracts +#### 2. Interaction with custom smart contracts Our platform will offer the capability to interact with any contract of their choice. To utilize this feature, they simply need to provide the metadata, network, and address associated with the contract. Once this information is ready, the user interface will automatically generate a customized user-friendly layout for allowing people to easily interact with their custom contracts. ​ -#### 3. Shareable Contract Interaction Links +#### 3. Shareable Contract Interaction Links To enhance the user experience and encourage collaboration, we plan to implement a feature for shareable contract interaction links. Once a developer deploys a contract or uploads the metadata for interacting with it on our platform, they can generate a unique, shareable link. This link will contain all necessary information for interacting with the contract, essentially encapsulating the contract's ABI (Application Binary Interface) and its address on the blockchain. Users receiving this link can interact with the contract directly, without needing to reupload the metadata or know the contract's specifics. This feature not only simplifies the process of contract interaction but also fosters collaboration and sharing within the developer community. ​ -#### 4. Support for multiple chains +#### 4. Support for multiple chains This tool will offer a feature that enables users to connect to parachains implementing the contracts pallet. We will provide a list of some of these parachains in Polkadot, Kusama, and Rococo networks. Additionally, users will have the option to connect to a network that is not listed by specifying the web socket. ​ ### Tentative Mockups @@ -102,10 +102,10 @@ We are not only a dev shop company, but we create long term partnerships with th - https://github.com/protofire/kyber-pool-master-proxy-contract ​ GitHub accounts of team members. -- https://github.com/alongoni -- https://github.com/henrypalacios -- https://github.com/0xLucca -- https://github.com/GabrielCamba +- https://github.com/alongoni +- https://github.com/henrypalacios +- https://github.com/0xLucca +- https://github.com/GabrielCamba ​ ### Team LinkedIn Profiles ​ From 8f4705650fc56450cec124702e7654f1823bfb59 Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Tue, 11 Jul 2023 14:52:15 +0200 Subject: [PATCH 535/578] Update index.md --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 7711f3ccbe1..1cc96a4d5d1 100644 --- a/applications/index.md +++ b/applications/index.md @@ -62,7 +62,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [TradeLink](https://tradelink.pro/) | [Sandox](./sandox.md) | [GitHub](https://github.com/BEARlogin) | ☐ | ☐ | ☐ | | [Wunderbar Network](https://wunderbar.network/) | [Vue.js + TypeScript Substrate Front-End Template](./vue-typescript-substrate-frontend-template.md) | [GitHub](https://github.com/WunderbarNetwork) | ☐ | ☐ | ☐ | | [Profond.ai](https://www.profond.ai/) | [Profond](./Profond.md) | [GitHub](https://github.com/emarai) | ☐ | ☐ | ☐ | -| [727.ventures](https://727.ventures) | [Patron](./patron.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | +| [727.ventures](https://727.ventures) | [Patron](./patron.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☒ | ☒ | | [Supercomputing Systems AG](https://www.scs.ch) | [SARP - A Static Analysis Tool for Runtime Pallets](./sarp-basic-functionality.md) | [GitHub](https://github.com/scs) | ☐ | ☒ | ☒ | | [Ed Anderson](https://github.com/eca20) | [Blockchainia](./blockchainia.md) | [GitHub](https://github.com/eca20) | ☐ | ☐ | ☐ | | [CoinFabrik](https://www.coinfabrik.com/) | [ScoutCoinFabrik: Milestone 2](ScoutCoinFabrik_2.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | From 8565e27445cfa360910b2821a8662ec23ae2e018 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Tue, 11 Jul 2023 17:07:15 +0200 Subject: [PATCH 536/578] Update index.md High-availability validator setup complete --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 1cc96a4d5d1..f2fc9531b18 100644 --- a/applications/index.md +++ b/applications/index.md @@ -136,7 +136,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Tolga Yaycı](https://github.com/tolgayayci) | [Awesome Polka](Awesome-Polka.md) | [GitHub](https://github.com/tolgayayci/awesome-polka/tree/dev) | ☐ | ☒ | ☒ | | [gmajor](https://github.com/gmajor-encrypt) | [XCM Tools](xcm-tools.md) | [GitHub](https://github.com/gmajor-encrypt/) | ☐ | ☒ | ☐ | | [David Semakula](https://github.com/davidsemakula) | [Ink Analyzer](ink-analyzer.md) | [GitHub](https://github.com/ink-analyzer/ink-analyzer) | ☐ | ☒ | ☐ | -| [Bright Inventions](https://brightinventions.pl/) | [High-availability validator setup](High_availability_validator_setup.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☐ | +| [Bright Inventions](https://brightinventions.pl/) | [High-availability validator setup](High_availability_validator_setup.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☒ | | [DIA Data](https://www.diadata.org/) | [Bridgestate Attestation Oracle](DIA_Bridge_Attestation_Oracle.md) | [GitHub](https://github.com/diadata-org/) | ☐ | ☒ | ☐ | | [TogetherCrew](http://www.togethercrew.com/) | [Community Health Check](community-health-check.md) | [GitHub](https://github.com/RnDAO) | ☐ | ☐ | ☐ | | [Decentration](https://www.decentration.org/) | [Supersig Phase 2](./supersig_fellowship.md) | [GitHub](https://github.com/decentration) | ☐ | ☒ | ☐ | From de056edff7f6b1efe48b349e8505a3cd32cdf7da Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Wed, 12 Jul 2023 02:28:35 -0400 Subject: [PATCH 537/578] Update index.md (#1841) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index f2fc9531b18..12d9a901979 100644 --- a/applications/index.md +++ b/applications/index.md @@ -65,7 +65,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [727.ventures](https://727.ventures) | [Patron](./patron.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☒ | ☒ | | [Supercomputing Systems AG](https://www.scs.ch) | [SARP - A Static Analysis Tool for Runtime Pallets](./sarp-basic-functionality.md) | [GitHub](https://github.com/scs) | ☐ | ☒ | ☒ | | [Ed Anderson](https://github.com/eca20) | [Blockchainia](./blockchainia.md) | [GitHub](https://github.com/eca20) | ☐ | ☐ | ☐ | -| [CoinFabrik](https://www.coinfabrik.com/) | [ScoutCoinFabrik: Milestone 2](ScoutCoinFabrik_2.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | +| [CoinFabrik](https://www.coinfabrik.com/) | [ScoutCoinFabrik: Milestone 2](ScoutCoinFabrik_2.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☒ | ☒ | | [Polytope Labs](https://research.polytope.technology/) | [Interoperable State Machine Protocol](ismp.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | | [Talentica Software](https://www.talentica.com/) | [Implementation Benchmarking Milestone 3](ink-pallet-benchmarking-phase-2.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | | [Deep Ink Ventures GmbH](https://github.com/deep-ink-ventures) | [Stylograph](Stylograph.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☐ | ☐ | From 7b9a4d96f88a826780b72f593ab4824043d9ccb6 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Wed, 12 Jul 2023 02:29:00 -0400 Subject: [PATCH 538/578] Update index.md (#1840) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 12d9a901979..0c97c92e820 100644 --- a/applications/index.md +++ b/applications/index.md @@ -165,7 +165,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [TDSoftware](https://www.tdsoftware.de/) | [Substrate IPFS Utilities](ipfs_utilities.md) | [GitHub](https://github.com/TDSoftware) | ☐ | ☒ | ☒ | | [Ink Boxes Team](https://github.com/nerdsince98) | [Ink Boxes](ink-boxes.md) | [GitHub](https://github.com/avirajkhare00/ink-boxes/) | ☐ | ☒ | ☒ | | [ParaSpell](https://github.com/paraspell) | [ParaSpell Phase 2](ParaSpell_follow-up.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | -| [SubRelay](http://subrelay.xyz/) | [SubRelay](subrelay.md) | [GitHub](https://github.com/subrelay) | ☐ | ☒ | ☐ | +| [SubRelay](http://subrelay.xyz/) | [SubRelay](subrelay.md) | [GitHub](https://github.com/subrelay) | ☐ | ☒ | ☒ | | [Wow Labz](http://www.wowlabz.com) | [Dot Marketplace Phase 3](dot_marketplace-Phase3.md) | [GitHub](https://github.com/orgs/WowLabz) | ☐ | ☒ | ☒ | | [10Clouds Sp. z o.o.](https://10clouds.com/) | [Crowdloan Front End Template](crowdloan_frontend_template.md) | [GitHub](https://github.com/10clouds) | ☐ | ☒ | ☒ | | [DodoRare, Inc.](https://dodorare.com/) | [Faterium](faterium.md) | [GitHub](https://github.com/faterium) | ☐ | ☒ | ☒ | From 14f65aa703fc0b5a02ea08f4bddd9a6c085f8b74 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Wed, 12 Jul 2023 03:29:20 -0300 Subject: [PATCH 539/578] Update index.md (#1839) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 0c97c92e820..215d9f07da8 100644 --- a/applications/index.md +++ b/applications/index.md @@ -315,7 +315,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Stardust Labs Inc.](https://stardust.finance/) | [Uncollateralized Stablecoin Research and Design](./stardust.md) | [GitHub](https://github.com/adit313/) | ☐ | ☒ | ☒ | | [Hashed Systems](https://hashed.io) | [Native Bitcoin Vaults (NBV)](./native-bitcoin-vaults.md) | [GitHub](https://github.com/hashed-io) | ☐ | ☒ | ☒ | | [Setheum](https://setheum.xyz/) | [Setheum HighEnd LaunchPad Crowdsales Module](./setheum.md) | [GitHub](https://github.com/Setheum-Labs) | ☐ | ☐ | ☐ | -| [SaaS3 Lab](https://www.saas3.io) | [SaaS3](./SaaS3.md) | [GitHub](https://github.com/SaaS3Lab) | ☐ | ☒ | ☐ | +| [SaaS3 Lab](https://www.saas3.io) | [SaaS3](./SaaS3.md) | [GitHub](https://github.com/SaaS3Lab) | ☐ | ☒ | ☒ | | [NUTS Finance](https://nuts.finance) | [DOT-pegged derivative built on top of the stable asset protocol](./tdot.md) | [GitHub](https://github.com/nutsfinance/) | ☒ | ☒ | ☐ | | [Strategy Object](https://strategyobject.com/) | [Substrate Client for Java](./substrate_client_java.md) | [GitHub](https://github.com/strategyobject/substrate-client-java) | ☐ | ☒ | ☐ | From 482d9cddbf9dcc6d6bdd756d8bef096b7b91a150 Mon Sep 17 00:00:00 2001 From: anshulWeb3 <100308982+anshulWeb3@users.noreply.github.com> Date: Wed, 12 Jul 2023 12:30:45 +0530 Subject: [PATCH 540/578] xcm tool for NFTs (#1798) * xcm tool for NFTs * social proof added --- applications/xNFT.md | 119 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 applications/xNFT.md diff --git a/applications/xNFT.md b/applications/xNFT.md new file mode 100644 index 00000000000..8d6df048fee --- /dev/null +++ b/applications/xNFT.md @@ -0,0 +1,119 @@ +# xNFT + +- **Team Name:** Starks +- **Payment Address:** 0x2492237FA7698B8F3B35F2be4be3B1128439Ec8d (USDC) ** +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + +## Project Overview :page_facing_up: + +This application is in response to the open RFP [xcm-tools](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/xcm-tool.md) + +### Overview + +The Crosschain NFT Pallet is a unique initiative designed to facilitate the smooth movement of NFTs across various blockchain networks, utilizing the XCM protocol. Through the implementation of this pallet, individuals can effortlessly exchange NFTs between relay chains and parachains. + +### Project Details + +![xNFT](https://github.com/anshulWeb3/Grants-Program/assets/100308982/9ad19535-10d4-4dbe-a2ac-4f1ba22f1c00) + +#### The xNFT Pallet provides the following extrinsics (functions): + +1. transferSingle(nft_id, dest, dest_weight_limit) —> DispatchResult ; transfer an NFT with the NFT ID + - nft_id — the ID of the NFT being sent. + - dest — a multilocation to define the destination address for the tokens being sent via XCM. It supports different address formats, such as 20 or 32-byte addresses (Ethereum or Substrate). + - dest_weight_limit — an enum that represents the maximum amount of execution time you want to provide in the destination chain to execute the XCM message being sent. + +2. transferMulti(nfts, dest, dest_weight_limit) —> DispatchResult ; transfer multiple non-fungible tokens, defined by their multilocation + - nfts — the IDs of the NFTs being sent. + - dest — a multilocation to define the destination address for the tokens being sent via XCM. It supports different address formats, such as 20 or 32-byte addresses (Ethereum or Substrate) + - dest_weight_limit — an enum that represents the maximum amount of execution time you want to provide in the destination chain to execute the XCM message being sent. + +3. transferSingleWithFee(nft_id, dest_fee, dest, dest_weight_limit) —> DispatchResult ; transfer a non-fungible tokens, but it allows the sender to pay the fee with a different asset, defined by its multilocation + - nft_id — the ID of the NFT being sent. + - dest — a multilocation to define the destination address for the tokens being sent via XCM. It supports different address formats, such as 20 or 32-byte addresses (Ethereum or Substrate). + - dest_fee — a multilocation to define the asset used to pay for the XCM execution in the target chain + - dest_weight_limit — an enum that represents the maximum amount of execution time you want to provide in the destination chain to execute the XCM message being sent. + +4. transferMultiWithFees(nfts, dest_fee, dest, dest_weight_limit) —> DispatchResult ; transfer several non-fingible tokens, but it allows the sender to pay the fee with a different asset, defined by their multilocation + - nfts — the IDs of the NFTs being sent. + - dest — a multilocation to define the destination address for the tokens being sent via XCM. It supports different address formats, such as 20 or 32-byte addresses (Ethereum or Substrate). + - dest_fee — a multilocation to define the asset used to pay for the XCM execution in the target chain + - dest_weight_limit — an enum that represents the maximum amount of execution time you want to provide in the destination chain to execute the XCM message being sent. + +#### A feature will be added to the XCM VM for minting NFt on target chain using the encoded data from source chain. +#### This xNFT pallet will be tightly coupled with the NFT pallet in Substrate + +#### Project does not include: +- This pallet does not let you create, mint or burn any NFT this just to send them to other chains by making use of the XCM functionality +- This pallet will not be able to transfer any NFT that is not registered using the NFT pallet for Substrate(i.e NFT deployed as smart contracts). + +### Ecosystem Fit + +- The implementation of the xNFT pallet would introduce improved interoperability, expanded applications, increased liquidity, and enhanced flexibility to the Substrate ecosystem. It would foster the growth and vitality of the community, while facilitating seamless exchange and utilization of NFTs across different Substrate-based blockchains. +1. Interoperability: The xNFT pallet would enable effortless transfer of NFTs across various blockchains within the Substrate ecosystem. This would enhance connectivity and compatibility between Substrate-based chains, promoting a more integrated and interconnected ecosystem. +2. Expanded Applications: Cross-chain NFT transfers would unlock new possibilities and use cases for NFTs within the Substrate ecosystem. Developers and users would have the ability to leverage NFTs from different chains, enabling cross-chain collaborations, marketplace integrations, and enhanced utility for NFT-based applications. +3. Improved NFT Liquidity: By facilitating cross-chain transfers, the xNFT pallet would enhance liquidity for NFTs within the Substrate ecosystem. NFTs from different chains could be freely traded and utilized, expanding their market reach and creating more opportunities for value exchange. +4. Flexibility and Choice: The xNFT pallet would provide developers and users with the flexibility to choose the most suitable blockchain for their NFT requirements. They would be able to mint, transfer, and interact with NFTs on various Substrate chains, ensuring compatibility with specific needs or preferences. +5. Ecosystem Growth: The introduction of the xNFT pallet would contribute to the growth of the Substrate ecosystem, attracting developers and projects interested in building NFT-related applications or platforms. This would foster innovation and expand the range of offerings within the ecosystem. +6. Adoption of XCM: By utilizing XCM for cross-chain NFT transfers, the xNFT pallet would promote broader adoption of the Cross-Chain Messaging protocol within the Substrate ecosystem. This would reinforce the significance of interoperability and cross-chain communication, encouraging other projects and pallets to integrate XCM for various use cases. +7. Community Engagement: The xNFT pallet would generate interest among developers, NFT enthusiasts, and users within the Substrate community. It would encourage collaboration, knowledge sharing, and participation in the development of cross-chain NFT solutions, further strengthening community bonds and promoting ecosystem growth. + +## Team :busts_in_silhouette: + +### Team members + +- **Team lead:** [Aqueel Abbas](https://github.com/tur461) +- **Team member:** [Jatinder Singh](https://github.com/jatinder116?tab=repositories) + + +### Contact + +- **Contact Name:** Jatinder Singh +- **Contact Email:** jatindersngh116@gmail.com + +### Legal Structure + +- **Registered Address:** C-208, Phase 8B, Industrial Area, Sector 74, Sahibzada Ajit Singh Nagar, Punjab 160059 +- **Registered Legal Entity:** AntLabs India Pvt. Ltd. + +### Team's experience + +We are a skilled and dedicated group of professionals who possess extensive experience working with the Substrate ecosystem. Our team members have successfully completed numerous projects related to Substrate development, including building custom blockchains, implementing governance mechanisms, and designing smart contract for intuitive dApp functionalites. We understand the importance of technical partnerships in fostering innovation and growth within the blockchain industry. We are confident that our knowledge of the Substrate framework and its capabilities will enable us to contribute significantly to the development and expansion of Polka's ecosystem. + +Stack exchange profiles of some of our team members: +1. https://substrate.stackexchange.com/users/3136/wakar-seraj-khan +2. https://substrate.stackexchange.com/users/406/akash-singh +3. https://substrate.stackexchange.com/users/4068/upendra-singh + +We are the technical partners for [Peer Coin](https://explorer.peer.inc/) + +## Development Status :open_book: + +[xcm-tools](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/xcm-tool.md) + +## Development Roadmap :nut_and_bolt: + +### Overview + +### Milestone 1 — xNFT Pallet + +* **Total Estimated Duration:** 6 weeks +* **Total Costs:** 9800 USD +- **FTE:** 2 + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 / GPLv3 / MIT / Unlicense | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can transfer nft across chains | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an **article**/workshop that explains [...] (what was done/achieved as part of the grant). (Content, language and medium should reflect your target audience described above.) | +| 1. | xNFT | We will create a Substrate module that will handle cross-chain NFT transfers using these functions: 1. transferSingle 2. transferMulti 3. transferSingleWithFee 4. transferMultiWithFees | + +## Future Plans + +Currently this project is solely to transfer NFT between Substrate based chains. In future we plan to extend this functionality to non-substrate chains like Ethereum, Solana etc. We also plan to extend the functionality of this pallet to substrate based solo-chains as well(solo to solo). We will also add support to transfer NFT deployed to the chains as smart contracts. + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** A friend recommended From 846b90f73a5bd8f286b3d0fce55b129f87d2be9f Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 12 Jul 2023 09:03:09 +0200 Subject: [PATCH 541/578] Update index.md Add XCM tool for NFTs --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 215d9f07da8..7ea65f3f53c 100644 --- a/applications/index.md +++ b/applications/index.md @@ -45,6 +45,7 @@ Use this page for an overview of all public grants and their status. Use the sid | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------| :--------- | :------------: | :--------: | | [Protofire](https://protofire.io/) | [Contract Wizard](./Contract_wizard.md) | [GitHub](https://github.com/protofire/polkadot-contract-wizard/) | ☐ | ☐ | ☐ | | [ZeroDAO](https://github.com/ZeroDAO) | [Melodot](./Melodot.md) | [GitHub](https://github.com/ZeroDAO) | ☐ | ☐ | ☐ | +| [Starks](https://github.com/tur461) | [XCM tool for NFTs](./xNFT.md) | [GitHub](https://github.com/tur461) | ☐ | ☐ | ☐ | [🔝](#2023) From f89bff2cee5067816f8e7ec7c3dae254bfe95db3 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 12 Jul 2023 16:39:04 +0200 Subject: [PATCH 542/578] Update README.md Fix link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b1d39f5ca1b..41719ccf59d 100644 --- a/README.md +++ b/README.md @@ -154,7 +154,7 @@ The W3F Grants Program offers different grant levels to help you best depending 2. In the newly created fork, create a copy of the application template ([`applications/application-template.md`](applications/application-template.md)). If you're using the GitHub web interface, you will need to create a new file and copy the [contents](https://raw.githubusercontent.com/w3f/Grants-Program/master/applications/application-template.md) of the template inside the new one. Make sure you **do not modify the template file directly**. In the case of a maintenance application, use the maintenance template ([`maintenance template`](applications/maintenance/maintenance-template.md)) instead. In the case of a research application, use the research template ([`research template`](applications/application-template-research.md)) instead. 3. Name the new file after your project: `project_name.md`. 4. Fill out the template with the details of your project. The more information you provide, the faster the review. Please refer to our [Grant guidelines for most popular grant categories](https://github.com/w3f/Grants-Program/blob/master/docs/Support%20Docs/grant_guidelines_per_category.md) and make sure your deliverables present a similar same level of detail. To get an idea of what a strong application looks like, you can have a look at the following examples: [1](https://github.com/w3f/Grants-Program/blob/master/applications/project_aurras_mvp_phase_1.md), [2](https://github.com/w3f/Grants-Program/blob/master/applications/project_bodhi.md), [3](https://github.com/w3f/Grants-Program/blob/master/applications/pontem.md), [4](https://github.com/w3f/Grants-Program/blob/master/applications/spartan_poc_consensus_module.md). Naturally, if you're only applying for a smaller grant that only consists of, say, UI work, you don't need to provide as much detail. - 5. Once you're done, create a pull request in **our** main [Grants-Program repository](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/README.md). The pull request should only contain _one new file_—the Markdown file you created from the template. + 5. Once you're done, create a pull request in **our** main [Grants-Program repository](https://github.com/w3f/Grants-Program). The pull request should only contain _one new file_—the Markdown file you created from the template. 6. You will see a comment template that contains a checklist. You can leave it as is and tick the checkboxes once the pull request has been created. Please read through these items and check all of them. 7. Sign off on the [terms and conditions](https://github.com/w3f/Grants-Program/blob/master/docs/Support%20Docs/T%26Cs.md) presented by the [CLA assistant](https://github.com/claassistantio) bot as a Contributor License Agreement. You might need to reload the pull request to see its comment. From 217af20ae10d07b2046377feff46f5f7c0402d88 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Wed, 12 Jul 2023 11:10:05 -0400 Subject: [PATCH 543/578] Delete application_approved.yml (#1843) --- .github/workflows/application_approved.yml | 30 ---------------------- 1 file changed, 30 deletions(-) delete mode 100644 .github/workflows/application_approved.yml diff --git a/.github/workflows/application_approved.yml b/.github/workflows/application_approved.yml deleted file mode 100644 index 2448ce96af9..00000000000 --- a/.github/workflows/application_approved.yml +++ /dev/null @@ -1,30 +0,0 @@ -name: Approvals notification - -on: - pull_request_review: - types: [submitted] - -jobs: - send_matrix_approved_msg: - if: github.event.review.state == 'approved' && contains(github.event.pull_request.body, 'Project Abstract') - runs-on: ubuntu-latest - steps: - - run: echo 'APPROVALS=?' >> $GITHUB_ENV - - if: contains(github.event.pull_request.body, '[x] **Level 1**') - run: echo 'APPROVALS=2' >> $GITHUB_ENV - - if: contains(github.event.pull_request.body, '[x] **Level 2**') - run: echo 'APPROVALS=3' >> $GITHUB_ENV - - if: contains(github.event.pull_request.body, '[x] **Level 3**') - run: echo 'APPROVALS=5' >> $GITHUB_ENV - - id: 'reviews' - uses: 'jrylan/github-action-reviews-counter@main' - with: - repo-token: '${{ secrets.GITHUB_TOKEN }}' - - uses: fadenb/matrix-chat-message@v0.0.6 - with: - homeserver: 'matrix.web3.foundation' - token: ${{ secrets.MATRIX_TOKEN }} - channel: ${{ secrets.MATRIX_CHANNEL_ID }} - message: | - PR APPROVED: [${{ github.event.pull_request.title }}](https://github.com/w3f/Grants-Program/pull/${{ github.event.pull_request.number }}) has been approved by ${{ github.event.review.user.login }}. - Approvals: ${{ steps.reviews.outputs.approved }}/${{ env.APPROVALS }} \ No newline at end of file From 3a18a5bc486b004187eaeed352fe897d3ef25712 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Thu, 13 Jul 2023 10:47:04 +0200 Subject: [PATCH 544/578] update yarn lock --- yarn.lock | 507 +++++++++++++++++++++++++++--------------------------- 1 file changed, 253 insertions(+), 254 deletions(-) diff --git a/yarn.lock b/yarn.lock index 1967817b8e3..980a636fa0d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -153,10 +153,10 @@ dependencies: "@babel/highlight" "^7.22.5" -"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.5.tgz#b1f6c86a02d85d2dd3368a2b67c09add8cd0c255" - integrity sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA== +"@babel/compat-data@^7.22.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.9.tgz#71cdb00a1ce3a329ce4cbec3a44f9fef35669730" + integrity sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ== "@babel/core@7.12.9": version "7.12.9" @@ -181,30 +181,30 @@ source-map "^0.5.0" "@babel/core@^7.18.6", "@babel/core@^7.19.6", "@babel/core@^7.21.3": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.5.tgz#d67d9747ecf26ee7ecd3ebae1ee22225fe902a89" - integrity sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg== + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.9.tgz#bd96492c68822198f33e8a256061da3cf391f58f" + integrity sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.22.5" - "@babel/generator" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helpers" "^7.22.5" - "@babel/parser" "^7.22.5" + "@babel/generator" "^7.22.9" + "@babel/helper-compilation-targets" "^7.22.9" + "@babel/helper-module-transforms" "^7.22.9" + "@babel/helpers" "^7.22.6" + "@babel/parser" "^7.22.7" "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" + "@babel/traverse" "^7.22.8" "@babel/types" "^7.22.5" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.2" - semver "^6.3.0" + semver "^6.3.1" -"@babel/generator@^7.12.5", "@babel/generator@^7.18.7", "@babel/generator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.5.tgz#1e7bf768688acfb05cf30b2369ef855e82d984f7" - integrity sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA== +"@babel/generator@^7.12.5", "@babel/generator@^7.18.7", "@babel/generator@^7.22.7", "@babel/generator@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.9.tgz#572ecfa7a31002fa1de2a9d91621fd895da8493d" + integrity sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw== dependencies: "@babel/types" "^7.22.5" "@jridgewell/gen-mapping" "^0.3.2" @@ -225,52 +225,51 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz#fc7319fc54c5e2fa14b2909cf3c5fd3046813e02" - integrity sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw== +"@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz#f9d0a7aaaa7cd32a3f31c9316a69f5a9bcacb892" + integrity sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw== dependencies: - "@babel/compat-data" "^7.22.5" + "@babel/compat-data" "^7.22.9" "@babel/helper-validator-option" "^7.22.5" - browserslist "^4.21.3" + browserslist "^4.21.9" lru-cache "^5.1.1" - semver "^6.3.0" + semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz#2192a1970ece4685fbff85b48da2c32fcb130b7c" - integrity sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q== +"@babel/helper-create-class-features-plugin@^7.22.5", "@babel/helper-create-class-features-plugin@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.9.tgz#c36ea240bb3348f942f08b0fbe28d6d979fab236" + integrity sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-environment-visitor" "^7.22.5" "@babel/helper-function-name" "^7.22.5" "@babel/helper-member-expression-to-functions" "^7.22.5" "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.9" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.5" - semver "^6.3.0" + "@babel/helper-split-export-declaration" "^7.22.6" + semver "^6.3.1" "@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz#bb2bf0debfe39b831986a4efbf4066586819c6e4" - integrity sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A== + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz#9d8e61a8d9366fe66198f57c40565663de0825f6" + integrity sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" regexpu-core "^5.3.1" - semver "^6.3.0" + semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz#487053f103110f25b9755c5980e031e93ced24d8" - integrity sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg== +"@babel/helper-define-polyfill-provider@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.1.tgz#af1429c4a83ac316a6a8c2cc8ff45cb5d2998d3a" + integrity sha512-kX4oXixDxG197yhX+J3Wp+NpL2wuCFjWQAr6yX2jtCnflK9ulMI51ULFGIrWiX1jGfvAxdHp+XQCcP2bZGPs9A== dependencies: - "@babel/helper-compilation-targets" "^7.17.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" debug "^4.1.1" lodash.debounce "^4.0.8" resolve "^1.14.2" - semver "^6.1.2" "@babel/helper-environment-visitor@^7.22.5": version "7.22.5" @@ -306,19 +305,16 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz#0f65daa0716961b6e96b164034e737f60a80d2ef" - integrity sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw== +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz#92dfcb1fbbb2bc62529024f72d942a8c97142129" + integrity sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ== dependencies: "@babel/helper-environment-visitor" "^7.22.5" "@babel/helper-module-imports" "^7.22.5" "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" "@babel/helper-validator-identifier" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" - "@babel/types" "^7.22.5" "@babel/helper-optimise-call-expression@^7.22.5": version "7.22.5" @@ -332,32 +328,28 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== "@babel/helper-remap-async-to-generator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz#14a38141a7bf2165ad38da61d61cf27b43015da2" - integrity sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g== + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz#53a25b7484e722d7efb9c350c75c032d4628de82" + integrity sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-wrap-function" "^7.22.5" - "@babel/types" "^7.22.5" + "@babel/helper-wrap-function" "^7.22.9" -"@babel/helper-replace-supers@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz#71bc5fb348856dea9fdc4eafd7e2e49f585145dc" - integrity sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg== +"@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz#cbdc27d6d8d18cd22c81ae4293765a5d9afd0779" + integrity sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg== dependencies: "@babel/helper-environment-visitor" "^7.22.5" "@babel/helper-member-expression-to-functions" "^7.22.5" "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" - "@babel/types" "^7.22.5" "@babel/helper-simple-access@^7.22.5": version "7.22.5" @@ -373,10 +365,10 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-split-export-declaration@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz#88cf11050edb95ed08d596f7a044462189127a08" - integrity sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ== +"@babel/helper-split-export-declaration@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" + integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== dependencies: "@babel/types" "^7.22.5" @@ -395,23 +387,22 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz#de52000a15a177413c8234fa3a8af4ee8102d0ac" integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw== -"@babel/helper-wrap-function@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz#44d205af19ed8d872b4eefb0d2fa65f45eb34f06" - integrity sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw== +"@babel/helper-wrap-function@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.9.tgz#189937248c45b0182c1dcf32f3444ca153944cb9" + integrity sha512-sZ+QzfauuUEfxSEjKFmi3qDSHgLsTPK/pEpoD/qonZKOtTPTLbf59oabPQ4rKekt9lFcj/hTZaOhWwFYrgjk+Q== dependencies: "@babel/helper-function-name" "^7.22.5" "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" "@babel/types" "^7.22.5" -"@babel/helpers@^7.12.5", "@babel/helpers@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.5.tgz#74bb4373eb390d1ceed74a15ef97767e63120820" - integrity sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q== +"@babel/helpers@^7.12.5", "@babel/helpers@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.6.tgz#8e61d3395a4f0c5a8060f309fb008200969b5ecd" + integrity sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA== dependencies: "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" + "@babel/traverse" "^7.22.6" "@babel/types" "^7.22.5" "@babel/highlight@^7.22.5": @@ -423,10 +414,10 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.12.7", "@babel/parser@^7.18.8", "@babel/parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.5.tgz#721fd042f3ce1896238cf1b341c77eb7dee7dbea" - integrity sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q== +"@babel/parser@^7.12.7", "@babel/parser@^7.18.8", "@babel/parser@^7.22.5", "@babel/parser@^7.22.7": + version "7.22.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.7.tgz#df8cf085ce92ddbdbf668a7f186ce848c9036cae" + integrity sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5": version "7.22.5" @@ -621,10 +612,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-async-generator-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz#7336356d23380eda9a56314974f053a020dab0c3" - integrity sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg== +"@babel/plugin-transform-async-generator-functions@^7.22.7": + version "7.22.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.7.tgz#053e76c0a903b72b573cb1ab7d6882174d460a1b" + integrity sha512-7HmE7pk/Fmke45TODvxvkxRMV9RazV+ZZzhOL9AG8G29TLrr3jkjwF7uJfxZ30EoXpO+LJkq4oA8NjO2DTnEDg== dependencies: "@babel/helper-environment-visitor" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" @@ -671,19 +662,19 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz#635d4e98da741fad814984639f4c0149eb0135e1" - integrity sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ== +"@babel/plugin-transform-classes@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz#e04d7d804ed5b8501311293d1a0e6d43e94c3363" + integrity sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-environment-visitor" "^7.22.5" "@babel/helper-function-name" "^7.22.5" "@babel/helper-optimise-call-expression" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-replace-supers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" globals "^11.1.0" "@babel/plugin-transform-computed-properties@^7.22.5": @@ -879,10 +870,10 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz#1003762b9c14295501beb41be72426736bedd1e0" - integrity sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ== +"@babel/plugin-transform-optional-chaining@^7.22.5", "@babel/plugin-transform-optional-chaining@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz#4bacfe37001fe1901117672875e931d439811564" + integrity sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" @@ -976,16 +967,16 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-runtime@^7.18.6": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz#ca975fb5e260044473c8142e1b18b567d33c2a3b" - integrity sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw== + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.9.tgz#a87b11e170cbbfb018e6a2bf91f5c6e533b9e027" + integrity sha512-9KjBH61AGJetCPYp/IEyLEp47SyybZb0nDRpBvmtEkm+rUIwxdlKpyNHI1TmsGkeuLclJdleQHRZ8XLBnnh8CQ== dependencies: "@babel/helper-module-imports" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" - babel-plugin-polyfill-corejs2 "^0.4.3" - babel-plugin-polyfill-corejs3 "^0.8.1" - babel-plugin-polyfill-regenerator "^0.5.0" - semver "^6.3.0" + babel-plugin-polyfill-corejs2 "^0.4.4" + babel-plugin-polyfill-corejs3 "^0.8.2" + babel-plugin-polyfill-regenerator "^0.5.1" + semver "^6.3.1" "@babel/plugin-transform-shorthand-properties@^7.22.5": version "7.22.5" @@ -1024,12 +1015,12 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-typescript@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.5.tgz#5c0f7adfc1b5f38c4dbc8f79b1f0f8074134bd7d" - integrity sha512-SMubA9S7Cb5sGSFFUlqxyClTA9zWJ8qGQrppNUm05LtFuN1ELRFNndkix4zUJrC9F+YivWwa1dHMSyo0e0N9dA== + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.9.tgz#91e08ad1eb1028ecc62662a842e93ecfbf3c7234" + integrity sha512-BnVR1CpKiuD0iobHPaM1iLvcwPYN2uVFAqoLVSpEDKWuOikoCv5HbKLxclhKYUXlWkX86DoZGtqI4XhbOsyrMg== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.9" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-typescript" "^7.22.5" @@ -1065,12 +1056,12 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/preset-env@^7.18.6", "@babel/preset-env@^7.19.4", "@babel/preset-env@^7.20.2": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.5.tgz#3da66078b181f3d62512c51cf7014392c511504e" - integrity sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A== + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.9.tgz#57f17108eb5dfd4c5c25a44c1977eba1df310ac7" + integrity sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g== dependencies: - "@babel/compat-data" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.5" + "@babel/compat-data" "^7.22.9" + "@babel/helper-compilation-targets" "^7.22.9" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-validator-option" "^7.22.5" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.5" @@ -1095,13 +1086,13 @@ "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" "@babel/plugin-transform-arrow-functions" "^7.22.5" - "@babel/plugin-transform-async-generator-functions" "^7.22.5" + "@babel/plugin-transform-async-generator-functions" "^7.22.7" "@babel/plugin-transform-async-to-generator" "^7.22.5" "@babel/plugin-transform-block-scoped-functions" "^7.22.5" "@babel/plugin-transform-block-scoping" "^7.22.5" "@babel/plugin-transform-class-properties" "^7.22.5" "@babel/plugin-transform-class-static-block" "^7.22.5" - "@babel/plugin-transform-classes" "^7.22.5" + "@babel/plugin-transform-classes" "^7.22.6" "@babel/plugin-transform-computed-properties" "^7.22.5" "@babel/plugin-transform-destructuring" "^7.22.5" "@babel/plugin-transform-dotall-regex" "^7.22.5" @@ -1126,7 +1117,7 @@ "@babel/plugin-transform-object-rest-spread" "^7.22.5" "@babel/plugin-transform-object-super" "^7.22.5" "@babel/plugin-transform-optional-catch-binding" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.22.6" "@babel/plugin-transform-parameters" "^7.22.5" "@babel/plugin-transform-private-methods" "^7.22.5" "@babel/plugin-transform-private-property-in-object" "^7.22.5" @@ -1144,11 +1135,11 @@ "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" "@babel/preset-modules" "^0.1.5" "@babel/types" "^7.22.5" - babel-plugin-polyfill-corejs2 "^0.4.3" - babel-plugin-polyfill-corejs3 "^0.8.1" - babel-plugin-polyfill-regenerator "^0.5.0" - core-js-compat "^3.30.2" - semver "^6.3.0" + babel-plugin-polyfill-corejs2 "^0.4.4" + babel-plugin-polyfill-corejs3 "^0.8.2" + babel-plugin-polyfill-regenerator "^0.5.1" + core-js-compat "^3.31.0" + semver "^6.3.1" "@babel/preset-modules@^0.1.5": version "0.1.5" @@ -1190,17 +1181,17 @@ integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== "@babel/runtime-corejs3@^7.18.6": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.22.5.tgz#bbc769b48edb2bdfd404b65ad1fc3952bf33e3c2" - integrity sha512-TNPDN6aBFaUox2Lu+H/Y1dKKQgr4ucz/FGyCz67RVYLsBpVpUFf1dDngzg+Od8aqbrqwyztkaZjtWCZEUOT8zA== + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.22.6.tgz#e8e625eb3db29491e0326b3aeb9929c43b270ae4" + integrity sha512-M+37LLIRBTEVjktoJjbw4KVhupF0U/3PYUCbBwgAd9k17hoKhRu1n935QiG7Tuxv0LJOMrb2vuKEeYUlv0iyiw== dependencies: core-js-pure "^3.30.2" regenerator-runtime "^0.13.11" "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.6", "@babel/runtime@^7.20.13", "@babel/runtime@^7.8.4": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.5.tgz#8564dd588182ce0047d55d7a75e93921107b57ec" - integrity sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA== + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.6.tgz#57d64b9ae3cff1d67eb067ae117dac087f5bd438" + integrity sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ== dependencies: regenerator-runtime "^0.13.11" @@ -1213,18 +1204,18 @@ "@babel/parser" "^7.22.5" "@babel/types" "^7.22.5" -"@babel/traverse@^7.12.9", "@babel/traverse@^7.18.8", "@babel/traverse@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.5.tgz#44bd276690db6f4940fdb84e1cb4abd2f729ccd1" - integrity sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ== +"@babel/traverse@^7.12.9", "@babel/traverse@^7.18.8", "@babel/traverse@^7.22.6", "@babel/traverse@^7.22.8": + version "7.22.8" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.8.tgz#4d4451d31bc34efeae01eac222b514a77aa4000e" + integrity sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw== dependencies: "@babel/code-frame" "^7.22.5" - "@babel/generator" "^7.22.5" + "@babel/generator" "^7.22.7" "@babel/helper-environment-visitor" "^7.22.5" "@babel/helper-function-name" "^7.22.5" "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.5" - "@babel/parser" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.22.7" "@babel/types" "^7.22.5" debug "^4.1.0" globals "^11.1.0" @@ -1691,19 +1682,19 @@ dependencies: "@hapi/hoek" "^9.0.0" -"@jest/schemas@^29.4.3": - version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.3.tgz#39cf1b8469afc40b6f5a2baaa146e332c4151788" - integrity sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg== +"@jest/schemas@^29.6.0": + version "29.6.0" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.0.tgz#0f4cb2c8e3dca80c135507ba5635a4fd755b0040" + integrity sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ== dependencies: - "@sinclair/typebox" "^0.25.16" + "@sinclair/typebox" "^0.27.8" -"@jest/types@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.5.0.tgz#f59ef9b031ced83047c67032700d8c807d6e1593" - integrity sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog== +"@jest/types@^29.6.1": + version "29.6.1" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.1.tgz#ae79080278acff0a6af5eb49d063385aaa897bf2" + integrity sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw== dependencies: - "@jest/schemas" "^29.4.3" + "@jest/schemas" "^29.6.0" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" @@ -1730,9 +1721,12 @@ integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== "@jridgewell/source-map@^0.3.3": - version "0.3.4" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.4.tgz#856a142864530d4059dda415659b48d37db2d556" - integrity sha512-KE/SxsDqNs3rrWwFHcRh15ZLVFrI0YoZtgAdIyIq9k5hUNmiWRXXThPomIxHuL20sLdgzbDFyvkUMna14bvtrw== + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" + integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" "@jridgewell/sourcemap-codec@1.4.14": version "1.4.14" @@ -1792,6 +1786,11 @@ resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.6.22.tgz#219dfd89ae5b97a8801f015323ffa4b62f45718b" integrity sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA== +"@nicolo-ribaudo/semver-v6@^6.3.3": + version "6.3.3" + resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz#ea6d23ade78a325f7a52750aab1526b02b628c29" + integrity sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -1852,10 +1851,10 @@ resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== -"@sinclair/typebox@^0.25.16": - version "0.25.24" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718" - integrity sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ== +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== "@sindresorhus/is@^0.14.0": version "0.14.0" @@ -2140,9 +2139,9 @@ "@types/estree" "*" "@types/eslint@*": - version "8.40.2" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.40.2.tgz#2833bc112d809677864a4b0e7d1de4f04d7dac2d" - integrity sha512-PRVjQ4Eh9z9pmmtaq8nTjZjQwKFk7YIHIud3lRoKRBgUQjgjRmoGxxGEPXQkF+lH7QkHJRNr5F4aBgYCW0lqpQ== + version "8.44.0" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.44.0.tgz#55818eabb376e2272f77fbf5c96c43137c3c1e53" + integrity sha512-gsF+c/0XOguWgaOgvFs+xnnRqt9GwgTvIks36WpE6ueeI4KCEHHd8K/CKHqhOqrJKsYH8m27kRzQEvWXAwXUTw== dependencies: "@types/estree" "*" "@types/json-schema" "*" @@ -2173,11 +2172,11 @@ "@types/serve-static" "*" "@types/hast@^2.0.0": - version "2.3.4" - resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.4.tgz#8aa5ef92c117d20d974a82bdfb6a648b08c0bafc" - integrity sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g== + version "2.3.5" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.5.tgz#08caac88b44d0fdd04dc17a19142355f43bd8a7a" + integrity sha512-SvQi0L/lNpThgPoleH53cdjB3y9zpLlVjRbqB3rH8hx1jiRSBGAhyjV3H+URFjNVRqt2EdYNrbZE5IsGlNfpRg== dependencies: - "@types/unist" "*" + "@types/unist" "^2" "@types/history@^4.7.11": version "4.7.11" @@ -2226,11 +2225,11 @@ integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== "@types/mdast@^3.0.0": - version "3.0.11" - resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.11.tgz#dc130f7e7d9306124286f6d6cee40cf4d14a3dc0" - integrity sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw== + version "3.0.12" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.12.tgz#beeb511b977c875a5b0cc92eab6fcac2f0895514" + integrity sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg== dependencies: - "@types/unist" "*" + "@types/unist" "^2" "@types/mime@*": version "3.0.1" @@ -2253,9 +2252,9 @@ integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== "@types/node@*": - version "20.3.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.3.tgz#329842940042d2b280897150e023e604d11657d6" - integrity sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw== + version "20.4.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.2.tgz#129cc9ae69f93824f92fac653eebfb4812ab4af9" + integrity sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw== "@types/node@^17.0.5": version "17.0.45" @@ -2370,10 +2369,10 @@ dependencies: "@types/node" "*" -"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" - integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== +"@types/unist@^2", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.7.tgz#5b06ad6894b236a1d2bd6b2f07850ca5c59cf4d6" + integrity sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g== "@types/ws@^8.5.5": version "8.5.5" @@ -2544,9 +2543,9 @@ acorn-walk@^8.0.0: integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== acorn@^8.0.4, acorn@^8.7.1, acorn@^8.8.2: - version "8.9.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.9.0.tgz#78a16e3b2bcc198c10822786fa6679e245db5b59" - integrity sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ== + version "8.10.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" + integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== address@^1.0.1, address@^1.1.2: version "1.2.2" @@ -2779,29 +2778,29 @@ babel-plugin-extract-import-names@1.6.22: dependencies: "@babel/helper-plugin-utils" "7.10.4" -babel-plugin-polyfill-corejs2@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz#75044d90ba5043a5fb559ac98496f62f3eb668fd" - integrity sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw== +babel-plugin-polyfill-corejs2@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.4.tgz#9f9a0e1cd9d645cc246a5e094db5c3aa913ccd2b" + integrity sha512-9WeK9snM1BfxB38goUEv2FLnA6ja07UMfazFHzCXUb3NyDZAwfXvQiURQ6guTTMeHcOsdknULm1PDhs4uWtKyA== dependencies: - "@babel/compat-data" "^7.17.7" - "@babel/helper-define-polyfill-provider" "^0.4.0" - semver "^6.1.1" + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.4.1" + "@nicolo-ribaudo/semver-v6" "^6.3.3" -babel-plugin-polyfill-corejs3@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz#39248263c38191f0d226f928d666e6db1b4b3a8a" - integrity sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q== +babel-plugin-polyfill-corejs3@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.2.tgz#d406c5738d298cd9c66f64a94cf8d5904ce4cc5e" + integrity sha512-Cid+Jv1BrY9ReW9lIfNlNpsI53N+FN7gE+f73zLAUbr9C52W4gKLWSByx47pfDJsEysojKArqOtOKZSVIIUTuQ== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.0" - core-js-compat "^3.30.1" + "@babel/helper-define-polyfill-provider" "^0.4.1" + core-js-compat "^3.31.0" -babel-plugin-polyfill-regenerator@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz#e7344d88d9ef18a3c47ded99362ae4a757609380" - integrity sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g== +babel-plugin-polyfill-regenerator@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.1.tgz#ace7a5eced6dff7d5060c335c52064778216afd3" + integrity sha512-L8OyySuI6OSQ5hFy9O+7zFjyr4WhAfRjLIOkhQGYl+emwJkd/S4XXT1JpfrgR1jrQ1NcGiOh+yAdGlF8pnC3Jw== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.0" + "@babel/helper-define-polyfill-provider" "^0.4.1" bail@^1.0.0: version "1.0.5" @@ -2909,7 +2908,7 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" -browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5: +browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4.21.4, browserslist@^4.21.5, browserslist@^4.21.9: version "4.21.9" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635" integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg== @@ -2989,9 +2988,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001503: - version "1.0.30001511" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001511.tgz#e6e2a1614275c6fb8e3acfd74a8c3a70e53ed233" - integrity sha512-NaWPJawcoedlghN4P7bDNeADD7K+rZaY6V8ZcME7PkEZo/nfOg+lnrUgRWiKbNxcQ4/toFKSxnS4WdbyPZnKkw== + version "1.0.30001515" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001515.tgz#418aefeed9d024cd3129bfae0ccc782d4cb8f12b" + integrity sha512-eEFDwUOZbE24sb+Ecsx3+OvNETqjWIdabMy52oOkIgcUtAsQifjUG9q4U9dgTHJM2mfk4uEPxc0+xuFdJ629QA== ccount@^1.0.0: version "1.1.0" @@ -3304,9 +3303,9 @@ cookie@0.5.0: integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== copy-text-to-clipboard@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.1.0.tgz#6bf40deef0a51ac6858efb0d76ded2c6d6a15059" - integrity sha512-PFM6BnjLnOON/lB3ta/Jg7Ywsv+l9kQGD4TWDCSlRBGmqnnTM5MrDkhAFgw+8HZt0wW6Q2BBE4cmy9sq+s9Qng== + version "3.2.0" + resolved "https://registry.yarnpkg.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz#0202b2d9bdae30a49a53f898626dcc3b49ad960b" + integrity sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q== copy-webpack-plugin@^11.0.0: version "11.0.0" @@ -3320,22 +3319,22 @@ copy-webpack-plugin@^11.0.0: schema-utils "^4.0.0" serialize-javascript "^6.0.0" -core-js-compat@^3.30.1, core-js-compat@^3.30.2: - version "3.31.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.31.0.tgz#4030847c0766cc0e803dcdfb30055d7ef2064bf1" - integrity sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw== +core-js-compat@^3.31.0: + version "3.31.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.31.1.tgz#5084ad1a46858df50ff89ace152441a63ba7aae0" + integrity sha512-wIDWd2s5/5aJSdpOJHfSibxNODxoGoWOBHt8JSPB41NOE94M7kuTPZCYLOlTtuoXTsBPKobpJ6T+y0SSy5L9SA== dependencies: - browserslist "^4.21.5" + browserslist "^4.21.9" core-js-pure@^3.30.2: - version "3.31.0" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.31.0.tgz#052fd9e82fbaaf86457f5db1fadcd06f15966ff2" - integrity sha512-/AnE9Y4OsJZicCzIe97JP5XoPKQJfTuEG43aEVLFJGOJpyqELod+pE6LEl63DfG1Mp8wX97LDaDpy1GmLEUxlg== + version "3.31.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.31.1.tgz#73d154958881873bc19381df80bddb20c8d0cdb5" + integrity sha512-w+C62kvWti0EPs4KPMCMVv9DriHSXfQOCQ94bGGBiEW5rrbtt/Rz8n5Krhfw9cpFyzXBjf3DB3QnPdEzGDY4Fw== core-js@^3.23.3: - version "3.31.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.31.0.tgz#4471dd33e366c79d8c0977ed2d940821719db344" - integrity sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ== + version "3.31.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.31.1.tgz#f2b0eea9be9da0def2c5fece71064a7e5d687653" + integrity sha512-2sKLtfq1eFST7l7v62zaqXacPc7uG8ZAya8ogijLhTtaKNcpzpB4TMoTw2Si+8GYKRwFPMMtUT0263QFWFfqyQ== core-util-is@~1.0.0: version "1.0.3" @@ -3415,9 +3414,9 @@ crypto-random-string@^2.0.0: integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== css-declaration-sorter@^6.3.1: - version "6.4.0" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz#630618adc21724484b3e9505bce812def44000ad" - integrity sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew== + version "6.4.1" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz#28beac7c20bad7f1775be3a7129d7eae409a3a71" + integrity sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g== css-loader@^6.7.1: version "6.8.1" @@ -4119,9 +4118,9 @@ ee-first@1.1.1: integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.4.431: - version "1.4.447" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.447.tgz#ac69d3a7b3713e9ae94bb30ba65c3114e4d76a38" - integrity sha512-sxX0LXh+uL41hSJsujAN86PjhrV/6c79XmpY0TvjZStV6VxIgarf8SRkUoUTuYmFcZQTemsoqo8qXOGw5npWfw== + version "1.4.459" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.459.tgz#25a23370f4ae8aaa8f77aaf00133aa4994f4148e" + integrity sha512-XXRS5NFv8nCrBL74Rm3qhJjA2VCsRFx0OjHKBMPI0otij56aun8UWiKTDABmd5/7GTR021pA4wivs+Ri6XCElg== elkjs@^0.8.2: version "0.8.2" @@ -4367,7 +4366,7 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.2.11, fast-glob@^3.2.9: +fast-glob@^3.2.11, fast-glob@^3.2.9, fast-glob@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.0.tgz#7c40cb491e1e2ed5664749e87bfb516dbe8727c0" integrity sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA== @@ -4703,13 +4702,13 @@ globby@^11.0.1, globby@^11.0.4, globby@^11.1.0: slash "^3.0.0" globby@^13.1.1: - version "13.2.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.1.tgz#986d44187ba6a9fc4aa9b16caf0ab9a04db94ae9" - integrity sha512-DPCBxctI7dN4EeIqjW2KGqgdcUMbrhJ9AzON+PlxCtvppWhubTLD4+a0GFxiym14ZvacUydTPjLPc2DlKz7EIg== + version "13.2.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.2.tgz#63b90b1bf68619c2135475cbd4e71e66aa090592" + integrity sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w== dependencies: dir-glob "^3.0.1" - fast-glob "^3.2.11" - ignore "^5.2.0" + fast-glob "^3.3.0" + ignore "^5.2.4" merge2 "^1.4.1" slash "^4.0.0" @@ -5047,7 +5046,7 @@ icss-utils@^5.0.0, icss-utils@^5.1.0: resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== -ignore@^5.1.4, ignore@^5.2.0: +ignore@^5.1.4, ignore@^5.2.0, ignore@^5.2.4: version "5.2.4" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== @@ -5350,12 +5349,12 @@ isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== -jest-util@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.5.0.tgz#24a4d3d92fc39ce90425311b23c27a6e0ef16b8f" - integrity sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ== +jest-util@^29.6.1: + version "29.6.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.6.1.tgz#c9e29a87a6edbf1e39e6dee2b4689b8a146679cb" + integrity sha512-NRFCcjc+/uO3ijUVyNOQJluf8PtGCe/W6cix36+M3cTFgiYqFOOW5MgN4JOOcvbUhcKTYVd1CvHz/LWi8d16Mg== dependencies: - "@jest/types" "^29.5.0" + "@jest/types" "^29.6.1" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" @@ -5372,19 +5371,19 @@ jest-worker@^27.4.5: supports-color "^8.0.0" jest-worker@^29.1.2: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.5.0.tgz#bdaefb06811bd3384d93f009755014d8acb4615d" - integrity sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA== + version "29.6.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.6.1.tgz#64b015f0e985ef3a8ad049b61fe92b3db74a5319" + integrity sha512-U+Wrbca7S8ZAxAe9L6nb6g8kPdia5hj32Puu5iOqBCMTMWFHXuK6dOV2IFrpedbTV8fjMFLdWNttQTBL6u2MRA== dependencies: "@types/node" "*" - jest-util "^29.5.0" + jest-util "^29.6.1" merge-stream "^2.0.0" supports-color "^8.0.0" jiti@^1.18.2: - version "1.18.2" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.18.2.tgz#80c3ef3d486ebf2450d9335122b32d121f2a83cd" - integrity sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg== + version "1.19.1" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.19.1.tgz#fa99e4b76a23053e0e7cde098efe1704a14c16f1" + integrity sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg== joi@^17.6.0: version "17.9.2" @@ -6144,9 +6143,9 @@ node-forge@^1: integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== node-releases@^2.0.12: - version "2.0.12" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039" - integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ== + version "2.0.13" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" + integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== non-layered-tidy-tree-layout@^2.0.2: version "2.0.2" @@ -6765,9 +6764,9 @@ postcss-zindex@^5.1.0: integrity sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A== postcss@^8.3.11, postcss@^8.4.14, postcss@^8.4.17, postcss@^8.4.21: - version "8.4.24" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.24.tgz#f714dba9b2284be3cc07dbd2fc57ee4dc972d2df" - integrity sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg== + version "8.4.25" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.25.tgz#4a133f5e379eda7f61e906c3b1aaa9b81292726f" + integrity sha512-7taJ/8t2av0Z+sQEvNzCkpDynl0tX3uJMCODi6nT3PfASC7dYCWV9aQ+uiCf+KBD4SEFcu+GvJdGdwzQ6OSjCw== dependencies: nanoid "^3.3.6" picocolors "^1.0.0" @@ -7088,9 +7087,9 @@ react-router@5.3.4, react-router@^5.3.3: tiny-warning "^1.0.0" react-textarea-autosize@^8.3.2: - version "8.5.1" - resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.5.1.tgz#e1e815ac6715c6dbe01c715fd980a7a97031e2a2" - integrity sha512-3GdXBRT2m12xqH7ysRUquzFZYasYQrH/I+BofmT9sdMG5oI+GNfrsiTV1MvZGk3DLmZ72OUCiV5XGMEPKJ7Pog== + version "8.5.2" + resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.5.2.tgz#6421df2b5b50b9ca8c5e96fd31be688ea7fa2f9d" + integrity sha512-uOkyjkEl0ByEK21eCJMHDGBAAd/BoFQBawYK5XItjAmCTeSbjxghd8qnt7nzsLYzidjnoObu6M26xts0YGKsGg== dependencies: "@babel/runtime" "^7.20.13" use-composed-ref "^1.3.0" @@ -7482,19 +7481,19 @@ semver-diff@^3.1.1: semver "^6.3.0" semver@^5.4.1: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^6.0.0, semver@^6.2.0, semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.3.2, semver@^7.3.4, semver@^7.3.7, semver@^7.3.8: - version "7.5.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" - integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" @@ -7930,9 +7929,9 @@ terser-webpack-plugin@^5.3.3, terser-webpack-plugin@^5.3.7: terser "^5.16.8" terser@^5.10.0, terser@^5.16.8: - version "5.18.2" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.18.2.tgz#ff3072a0faf21ffd38f99acc9a0ddf7b5f07b948" - integrity sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w== + version "5.19.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.19.0.tgz#7b3137b01226bdd179978207b9c8148754a6da9c" + integrity sha512-JpcpGOQLOXm2jsomozdMDpd5f8ZHh1rR48OFgWUH3QsyZcfPgv2qDCYbcDEAYNd4OZRj2bWYKpwdll/udZCk/Q== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" From 785ebca63811c3007f9fd5f1038c27602ae81d8d Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 13 Jul 2023 12:36:22 +0200 Subject: [PATCH 545/578] Update index.md Add Snap --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 7ea65f3f53c..ce0c2f0278c 100644 --- a/applications/index.md +++ b/applications/index.md @@ -46,7 +46,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Protofire](https://protofire.io/) | [Contract Wizard](./Contract_wizard.md) | [GitHub](https://github.com/protofire/polkadot-contract-wizard/) | ☐ | ☐ | ☐ | | [ZeroDAO](https://github.com/ZeroDAO) | [Melodot](./Melodot.md) | [GitHub](https://github.com/ZeroDAO) | ☐ | ☐ | ☐ | | [Starks](https://github.com/tur461) | [XCM tool for NFTs](./xNFT.md) | [GitHub](https://github.com/tur461) | ☐ | ☐ | ☐ | - +| [ChainSafe](https://chainsafe.io/) | Polkadot Snap Maintenance | [GitHub](https://github.com/ChainSafe/metamask-snap-polkadot) | ☐ | ☐ | ☐ | [🔝](#2023) From e9948cfd05468be77db240106cd01b6f3780af6d Mon Sep 17 00:00:00 2001 From: Noc2 Date: Fri, 14 Jul 2023 13:33:10 +0200 Subject: [PATCH 546/578] Update numbers --- src/components/HomepageFeatures.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/HomepageFeatures.js b/src/components/HomepageFeatures.js index ba9a776a5fb..bf4ab04dd8b 100644 --- a/src/components/HomepageFeatures.js +++ b/src/components/HomepageFeatures.js @@ -6,14 +6,14 @@ import CountUp from 'react-countup'; const FeatureList = [ { - title: 1300, + title: 1500, description: ( <>applications ), }, { - title: 500, + title: 550, description: ( <>projects funded From caba104029355fc98722e2a8f0a90a33b211df22 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Fri, 14 Jul 2023 13:47:42 +0200 Subject: [PATCH 547/578] update announcement --- docusaurus.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docusaurus.config.js b/docusaurus.config.js index 4eaf0628243..b7614ad54eb 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -28,7 +28,7 @@ module.exports = { announcementBar: { id: 'announcement', content: - 'Check out our 500 GRANTS blogpost!', + 'Check out our Wave 18 blogpost', backgroundColor: '#000', textColor: '#ffffff', isCloseable: true, From f1e26debfb63254992e390f13a7a090bf61361f3 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 14 Jul 2023 17:04:17 +0200 Subject: [PATCH 548/578] Update index.md Update Interoperable State Machine Protocol --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index ce0c2f0278c..2e7d5b9c29c 100644 --- a/applications/index.md +++ b/applications/index.md @@ -67,7 +67,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Supercomputing Systems AG](https://www.scs.ch) | [SARP - A Static Analysis Tool for Runtime Pallets](./sarp-basic-functionality.md) | [GitHub](https://github.com/scs) | ☐ | ☒ | ☒ | | [Ed Anderson](https://github.com/eca20) | [Blockchainia](./blockchainia.md) | [GitHub](https://github.com/eca20) | ☐ | ☐ | ☐ | | [CoinFabrik](https://www.coinfabrik.com/) | [ScoutCoinFabrik: Milestone 2](ScoutCoinFabrik_2.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☒ | ☒ | -| [Polytope Labs](https://research.polytope.technology/) | [Interoperable State Machine Protocol](ismp.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | +| [Polytope Labs](https://research.polytope.technology/) | [Interoperable State Machine Protocol](ismp.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☒ | ☒ | | [Talentica Software](https://www.talentica.com/) | [Implementation Benchmarking Milestone 3](ink-pallet-benchmarking-phase-2.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | | [Deep Ink Ventures GmbH](https://github.com/deep-ink-ventures) | [Stylograph](Stylograph.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☐ | ☐ | | [Zeeve](https://www.zeeve.io) | [Ink Playground IDE Improvements](ink-playground-ide-improvements.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | From 5899fd3fa72a582ae6738d82d25e91162d7e8d86 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Sat, 15 Jul 2023 10:03:04 -0300 Subject: [PATCH 549/578] Update index.md (#1845) --- applications/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/applications/index.md b/applications/index.md index 2e7d5b9c29c..52add95dc7c 100644 --- a/applications/index.md +++ b/applications/index.md @@ -74,7 +74,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Scio Labs](https://scio.xyz/) | [XCM Domain Name Service](xcm-domain-service.md) | [GitHub](https://github.com/scio-labs) | ☐ | ☐ | ☐ | | [Gloslab](https://github.com/smiasojed) | [Contracts performance measurement tool proposal](contracts-tool.md) | [GitHub](https://github.com/smiasojed) | ☐ | ☐ | ☐ | | [Nikita Orlov PR](https://github.com/stringnick) | [Faucet chat based bot](faucet-bot.md) | [GitHub](https://github.com/stringnick) | ☐ | ☐ | ☐ | -| [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal Saas Pricing](societal_saas_pricing.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☐ | ☐ | +| [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal Saas Pricing](societal_saas_pricing.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☐ | | [MASTER UNION LLC.](https://github.com/TheDotflow) | [Dotflow](Dotflow.md) | [GitHub](https://github.com/TheDotflow) | ☐ | ☒ | ☐ | | [Antier Solutions](https://www.antiersolutions.com/) | [RFP/securityMarketPlace](Security_Marketplace.md) | [GitHub](https://github.com/ParthChaudhary31) | ☐ | ☐ | ☐ | | [SO/DA zone](https://github.com/mfornos) | [Ocelloids Monitoring SDK grant application](ocelloids_monitoring_sdk.md) | [GitHub](https://github.com/mfornos) | ☐ | ☐ | ☐ | @@ -140,7 +140,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Bright Inventions](https://brightinventions.pl/) | [High-availability validator setup](High_availability_validator_setup.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☒ | | [DIA Data](https://www.diadata.org/) | [Bridgestate Attestation Oracle](DIA_Bridge_Attestation_Oracle.md) | [GitHub](https://github.com/diadata-org/) | ☐ | ☒ | ☐ | | [TogetherCrew](http://www.togethercrew.com/) | [Community Health Check](community-health-check.md) | [GitHub](https://github.com/RnDAO) | ☐ | ☐ | ☐ | -| [Decentration](https://www.decentration.org/) | [Supersig Phase 2](./supersig_fellowship.md) | [GitHub](https://github.com/decentration) | ☐ | ☒ | ☐ | +| [Decentration](https://www.decentration.org/) | [Supersig Phase 2](./supersig_fellowship.md) | [GitHub](https://github.com/decentration) | ☐ | ☒ | ☒ | | [Polkadrys Labs](https://github.com/rtomas) | [Open Payroll](./openPayroll.md) | [GitHub](https://github.com/rtomas) | ☐ | ☐ | ☐ | | [Itering](https://www.itering.io/) | [Solidity Verifier Implementation for Accountable Light Client](./solidity-verifier-for-accountable-light-client.md) | [GitHub](https://github.com/darwinia-network) | ☐ | ☒ | ☐ | @@ -179,7 +179,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Zondax](http://zondax.ch/) | [Hybrid node research grant](hybrid_node_research.md) | [GitHub](https://github.com/ZondaX) | ☐ | ☒ | ☒ | | [Bright Inventions](https://brightinventions.pl/) | [ZK-Snarks Tutorial](ZK-Snarks%20tutorial.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☒ | | [Common Orbit LLC](https://brson.github.io) | [wasm-opt-for-rust maintenance](maintenance/wasm-opt-for-rust.md) | [GitHub](https://github.com/brson/wasm-opt-rs) | ☐ | ☒ | ☐ | -| [Salaheldin Soliman](https://github.com/salaheldinsoliman) | [Solang developer experience improvements](Solang_developer_experience_improvements.md) | [GitHub](https://github.com/hyperledger/solang) | ☐ | ☒ | ☐ | +| [Salaheldin Soliman](https://github.com/salaheldinsoliman) | [Solang developer experience improvements](Solang_developer_experience_improvements.md) | [GitHub](https://github.com/hyperledger/solang) | ☐ | ☒ | ☒ | | [Optymalizacja AI Grzegorz Miebs](https://github.com/miepsik) | [Validator selection](validators_selection.md) | [GitHub](https://github.com/miepsik) | ☐ | ☒ | ☒ | | [Applied Blockchain Ltd](https://appliedblockchain.com/) | [Silent Data](project_silentdata.md) | [GitHub](https://github.com/appliedblockchain) | ☐ | ☒ | ☒ | | [Web3Box Labs](https://github.com/web3box-labs) | [Web3Box](Web3Box.md) | [GitHub](https://github.com/web3box-labs) | ☐ | ☒ | ☒ | From b67f2cc0f5a7330dc84c76be35f10313c0a37983 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mert=20K=C3=B6kl=C3=BC?= <37740842+justmert@users.noreply.github.com> Date: Mon, 17 Jul 2023 21:59:48 +0300 Subject: [PATCH 550/578] DOTLY: Revolutionizing Polkadot Account Statistics (#1784) * Create dotly.md * Update dotly.md * Update dotly.md * Update dotly.md --- applications/dotly.md | 177 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 applications/dotly.md diff --git a/applications/dotly.md b/applications/dotly.md new file mode 100644 index 00000000000..8cd59263bd7 --- /dev/null +++ b/applications/dotly.md @@ -0,0 +1,177 @@ +# DOTLY: Revolutionizing Polkadot Account Statistics + +- **Team Name:** justmert +- **Payment Address:** [0xf5412558d977915D56d8B4d3773871142d379E74](https://etherscan.io/address/0xf5412558d977915D56d8B4d3773871142d379E74) (USDC, Ethereum (ERC20)) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + +## Project Overview :page_facing_up: + +### Overview + +The growth of Polkadot, leading blockchain platform, presents a challenge for users in understanding and tracking their account activities. Existing solutions lack intuitive and engaging tools to present comprehensive statistics, leaving users with limited insights into their impact within the ecosystem. + +DOTLY is an innovative application that addresses this problem head-on. By providing a user-friendly platform with visually captivating and interactive displays, DOTLY transforms Polkadot account statistics into an informative and ingsightful experience. Users gain access to a wide range of statistics, including account overviews, balance and extrinsic histories, badges, and action insights. DOTLY goes beyond numbers by incorporating visually appealing charts. + +With DOTLY's intuitive interface, users can understand their account activities at a glance. DOTLY aims to bridge the gap between account statistics and user accessibility, empowering Polkadot account holders to maximize their potential and contribute to the growth and success of the network. + +### Project Details + +**Mockups** + +| Overview Page | Stats Page | +| ------------- | ----------- | +|![Overview](https://github.com/justmert/dotly/assets/37740842/520060fa-899a-4d28-9599-649843a7df43) |![Stats](https://github.com/justmert/dotly/assets/37740842/6f4bba33-6ccc-40e6-9a5f-437530db3dbb)| + +| Extrinsics Page | Badges Page | +| ------------- | ------------- | +|![Extrinsics](https://github.com/justmert/dotly/assets/37740842/1b5d36e1-6933-4991-bb71-bea1fc202940)| ![Badges](https://github.com/justmert/dotly/assets/37740842/556bea7d-99d0-49cc-bc34-30751dc609c4) | + +--- + +
+ +**Technical Scheme** + +![technical_scheme](https://github.com/justmert/dotly/assets/37740842/80de9ebd-729c-450f-aec7-ced758636329) + +--- + +
+ +**API Scheme** + +![fast_api](https://github.com/justmert/dotly/assets/37740842/079cce64-2f6a-4906-8cee-0518aadf1f25) + +--- + + +
+ +**Technical Stack** + +- Frontend: NextJS, Tailwind CSS, Apache ECharts +- Backend: Python, Fast API +- Integrations: Google Analytics + + +### Ecosystem Fit + +**Target audience** + +DOTLY targets a diverse range of individuals within the Polkadot ecosystem, including existing Polkadot account owners seeking a comprehensive solution to track and understand their on-chain account activities, new users looking for an intuitive onboarding experience, and ecosystem enthusiasts interested in monitoring their involvement with pursuing badges. + +**Impact** + +- **Comprehensive Account Insights**: DOTLY offers users comprehensive statistics and insights about their Polkadot accounts, including total transfers, transaction rates, balance summaries, and more. By providing this deep level of visibility, DOTLY enables users to make informed decisions, optimize their engagement, and monitor their progress within the ecosystem. + +- **Uniqueness**: While there may be block explorers offering Polkadot ecosystem account statistics, such as balance history (and not much else), DOTLY differentiates itself through its focus on user experience, and rich charts/insights. + + +## Team :busts_in_silhouette: + +### Team members + +- Mert Köklü - Project Owner + +### Contact + +- **Contact Name:** Mert Köklü +- **Contact Email:** +- **Website:** + +### Legal Structure + +- **Registered Address:** N/A +- **Registered Legal Entity:** Individual + +### Team's experience + +**Mert Köklü** + +Acted as an ambassador of many organizations including ACM, Microsoft and NVIDIA as Certified Instructor. In the Web3 space, he co-manage the AAVE Turkey Community and advocate for The Graph. Was working with AI video pipelines at an NVIDIA distributor company in Turkey before getting involved with blockchain. + +Develops ecosystem tools and applications with various tech stacks. AAVE, W3F, Flow and Filecoin grantee with an accepted multiple projects and now developing open-source, user-friendly applications that add value to the DOT ecosystem. + +### Team Code Repos + +- (PolkaFlow Frontend - ) +- (PolkaFlow Backend) +- (Aave GraphQL Documentation Website - ) +- (Aave GraphQL Editor Website) +- (Peer CLI: Swiss Army Knife for the IPFS) +- (Aave API Telegram Bot) +- (Kadena Chainweb Python Bindings) + +**Github Account** + +- + +### Team LinkedIn Profiles (if available) + +- + +## Development Status :open_book: + +API scheme, technical stack and mockups are ready for development. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 2 months +- **Full-Time Equivalent (FTE):** 1 FTE +- **Total Costs:** 10,000 USD + +### Milestone 1 - Frontend and Backend + +- **Estimated duration:** 2 months +- **FTE:** 1 FTE +- **Costs:** 10,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | MIT | +| **0b.** | Documentation | I will provide both **inline documentation** of the code and a basic **set-up** page that explains how a user can run frontend/backend repositories of the project in their local environment. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, I will describe how to run these tests. | +| **0d.** | Docker | I will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| **0e.** | Article | I will publish an article that explains the charts/widgets in DOTLY and publish it with ecosystem. | +| 1. | Search Page | Implement search page that allows users to search for an account by address in Polkadot ecosystem. | +| 2. | Overview Page | Implement overview page that displays brief stats, parachain balance pie, parachain balance list, weekly transaction rate widgets. | +| 3. | Overview Page - Brief Stats | Implement an endpoint for brief stats widget that displays summaries like, total transfers sent\received, time with Polkadot, extrinsic count, nonce, role, tags, display name, twitter, web, Judgements, email (if these are exists) etc. | +| 4. | Overview Page - Parachain Balance Pie | Implement an endpoint for balance pie widget that displays **three** pie charts. The first pie chart will show parachain that account address has balance. The second pie displays distribution of balance like Transferrable balance, Locked balance etc. and the third pie chart will show sub-distribution balance of the first pie chart selection like Election Lock, Democracy Lock, etc. | +| 5. | Overview Page - Parachain Balance List | Implement an endpoint for balance list widget that displays list of parachains with respective balance summary of account address. | +| 6. | Overview Page - Weekly Transaction Rate | Implement an endpoint for weekly transaction rate widget that is the number of transactions account have sent over the past 7 days. | +| 7. | Stats Page | Implement stats page that displays balance history, transaction history, top 5 senders/receivers, incoming/outgoing transfer, staking/pool reward history widgets. | +| 8. | Stats Page - Balance History | Implement an endpoint for balance history widget that shows DOT balance change over time on account using chart. | +| 9. | Stats Page - Transaction History | Implement an endpoint for relationship chart widget that shows relationship with different accounts. It can show most frequent accounts that user has interacts with. | +| 10. | Stats Page - Top Senders/Receivers | Implement an endpoint for top senders/receivers widget that lists top senders and receivers (transfer) of the account. | +| 11. | Stats Page - Incoming/Outgoing Transfer Widget | Implement an endpoint for top incoming/outgoing transfer widget that displays count of incoming/outgoing transfers over time with two line charts. | +| 12. | Stats Page - Staking/Pool Reward History | Implement an endpoint for staking/pool reward widget that displays count of staking/pool reward over time with a line chart. | +| 13. | Extrinsics Page | Implement an extrinsics page that displays extrinsics count history, extrinsics success rate, top interacted modules/calls, action insight widgets. | +| 14. | Extrinsics Page - Extrinsics Count History | Implement an endpoint for extrinsics count history widget that displays count of extrinsics over time with a line chart. | +| 15. | Extrinsics Page - Extrinsics Success Rate | Implement an endpoint for extrinsics success rate widget that displays success rate of extrinsics on pie chart. | +| 16. | Extrinsics Page - Top Interacted Modules/Calls | Implement an endpoint for top interacted modules/pallets and calls widget. Top interacted calls will be listed based on selection of module. | +| 17. | Extrinsics Page - Action Insight | Implement an endpoint for action insight widget that displays two pie charts and one line chart. The first pie chart will show count distribution of modules user interacte with (such as balances), and the second pie chart will show count distribution of calls (such as transfer, transfer_keep_alive etc.) based on selected module. The line chart will show that call's count over time. | +| 18. | Badges Page | Implement badges page that displays badges widget. | +| 19. | Badges Page - Badges | Implement an endpoint for badges widget. It will return all badges that user has achieved and yet to achieve. For example a badge will look like this: "Join the party! - Perform a token transfer". | +| 20. | Google Analytics Integration | Integrate Google Analytics to track user interactions. | +| 21. | Share Feature | Make every widget on the pages shareable. | + + +## Future Plans + +Altough DOTLY is initially focused on Polkadot, it offers detailed balance overview on parachains that user has balances. I plan to expand its capabilities to include other networks within the Polkadot ecosystem, such as Kusama and other parachains. Users can change parachain to see their stats in other parachains as well just like parachain explorers. This will allow users to track and analyze their activities across multiple interconnected networks, providing a comprehensive view of their participation in the wider Web3 ecosystem. + +Also I am planning to add quests that incentivize users to perform certain actions. Altough this is done by badges (for now) that are awarded to users, quests are a bit different. For example I can incentivize users to swap in X protocol, or stake in Y protocol, or provide liquidity in Z protocol. This will be a great way to increase user engagement and participation in the Polkadot ecosystem. The rewards for quests can be DOT, KSM, NFTs, etc. and can be provided from respective X, Y, Z protocol/tools. This feature is not included in the proposal since it adds complexity to the project and it will take more time to implement. + + +## Referral Program (optional) :moneybag: + +- **Referrer:** - +- **Payment Address:** - + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** + +I am **grantee** of Web3 Foundation Grants Program. From 6eacd835612781af8940f04cf097b32b1d17e415 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 17 Jul 2023 21:01:46 +0200 Subject: [PATCH 551/578] Update index.md Add DOTLY --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 52add95dc7c..7913380c1ea 100644 --- a/applications/index.md +++ b/applications/index.md @@ -47,6 +47,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [ZeroDAO](https://github.com/ZeroDAO) | [Melodot](./Melodot.md) | [GitHub](https://github.com/ZeroDAO) | ☐ | ☐ | ☐ | | [Starks](https://github.com/tur461) | [XCM tool for NFTs](./xNFT.md) | [GitHub](https://github.com/tur461) | ☐ | ☐ | ☐ | | [ChainSafe](https://chainsafe.io/) | Polkadot Snap Maintenance | [GitHub](https://github.com/ChainSafe/metamask-snap-polkadot) | ☐ | ☐ | ☐ | +| [justmert](https://github.com/justmert) | DOTLY: Revolutionizing Polkadot Account Statistics | [GitHub](https://github.com/justmert/dotly) | ☐ | ☐ | ☐ | [🔝](#2023) From b40ba16b548565b10257c1142d9d1a1f50b79df3 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Mon, 17 Jul 2023 21:17:43 +0200 Subject: [PATCH 552/578] fix website --- applications/dotly.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/applications/dotly.md b/applications/dotly.md index 8cd59263bd7..8847fd1536f 100644 --- a/applications/dotly.md +++ b/applications/dotly.md @@ -28,7 +28,7 @@ With DOTLY's intuitive interface, users can understand their account activities --- -
+
**Technical Scheme** @@ -36,7 +36,7 @@ With DOTLY's intuitive interface, users can understand their account activities --- -
+
**API Scheme** @@ -45,7 +45,7 @@ With DOTLY's intuitive interface, users can understand their account activities --- -
+
**Technical Stack** @@ -76,8 +76,8 @@ DOTLY targets a diverse range of individuals within the Polkadot ecosystem, incl ### Contact - **Contact Name:** Mert Köklü -- **Contact Email:** -- **Website:** +- **Contact Email:** kklumert@gmail.com +- **Website:** https://github.com/justmert ### Legal Structure @@ -94,21 +94,21 @@ Develops ecosystem tools and applications with various tech stacks. AAVE, W3F, F ### Team Code Repos -- (PolkaFlow Frontend - ) -- (PolkaFlow Backend) -- (Aave GraphQL Documentation Website - ) -- (Aave GraphQL Editor Website) -- (Peer CLI: Swiss Army Knife for the IPFS) -- (Aave API Telegram Bot) -- (Kadena Chainweb Python Bindings) +- https://github.com/justmert/eco-flow-frontend (PolkaFlow Frontend - http://polkaflow.xyz/) +- https://github.com/justmert/eco-flow-backend (PolkaFlow Backend) +- https://github.com/justmert/aave-graphql-doc (Aave GraphQL Documentation Website - https://www.aaveql.org/ ) +- https://github.com/justmert/aave-graphql-editor (Aave GraphQL Editor Website) +- https://github.com/justmert/peer-cli (Peer CLI: Swiss Army Knife for the IPFS) +- https://github.com/justmert/Aave-API-Telegram-Bot (Aave API Telegram Bot) +- https://github.com/justmert/chainweb.py (Kadena Chainweb Python Bindings) **Github Account** -- +- https://github.com/justmert ### Team LinkedIn Profiles (if available) -- +- https://www.linkedin.com/in/mertkoklu/ ## Development Status :open_book: From 92c24b1847525e15915b60e18c7c5cbdaaa537f4 Mon Sep 17 00:00:00 2001 From: Whisker17 Date: Tue, 18 Jul 2023 03:18:38 +0800 Subject: [PATCH 553/578] fix: fix contract-wizard display errors (#1850) --- applications/Contract_wizard.md | 40 +++++++++++++++++---------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/applications/Contract_wizard.md b/applications/Contract_wizard.md index a8c112eafa8..4095fa0218f 100644 --- a/applications/Contract_wizard.md +++ b/applications/Contract_wizard.md @@ -12,43 +12,43 @@ The Polkadot Contract Wizard has successfully completed its initial phase, makin ​ In the next phase, we plan to implement the following features: ​ -1.- Interaction with deployed contracts through the wizard's UI. +1. Interaction with deployed contracts through the wizard's UI. ​ -2.- Interaction with smart contracts deployed by the user. +2. Interaction with smart contracts deployed by the user. ​ -3.- Shareable Contract Interaction Links +3. Shareable Contract Interaction Links ​ -4.- Support for multiple chains +4. Support for multiple chains ​ These enhancements will allow users to create, modify, deploy and interact with smart contracts on different parachains, making the Contract Wizard an indispensable tool for the community within the Polkadot and Kusama ecosystem. ​ ### Project Details ​ -#### 1. Interact with deployed contracts +#### 1. Interact with deployed contracts We will create a functionality that enables users to directly interact with their deployed contracts via the user interface of the wizard. This functionality will be generated dynamically according to the metadata of the contracts. With this, users will be able to conveniently and effectively manage their contracts and carry out interactions using the same tool. ​ -#### 2. Interaction with custom smart contracts +#### 2. Interaction with custom smart contracts Our platform will offer the capability to interact with any contract of their choice. To utilize this feature, they simply need to provide the metadata, network, and address associated with the contract. Once this information is ready, the user interface will automatically generate a customized user-friendly layout for allowing people to easily interact with their custom contracts. ​ -#### 3. Shareable Contract Interaction Links +#### 3. Shareable Contract Interaction Links To enhance the user experience and encourage collaboration, we plan to implement a feature for shareable contract interaction links. Once a developer deploys a contract or uploads the metadata for interacting with it on our platform, they can generate a unique, shareable link. This link will contain all necessary information for interacting with the contract, essentially encapsulating the contract's ABI (Application Binary Interface) and its address on the blockchain. Users receiving this link can interact with the contract directly, without needing to reupload the metadata or know the contract's specifics. This feature not only simplifies the process of contract interaction but also fosters collaboration and sharing within the developer community. ​ -#### 4. Support for multiple chains +#### 4. Support for multiple chains This tool will offer a feature that enables users to connect to parachains implementing the contracts pallet. We will provide a list of some of these parachains in Polkadot, Kusama, and Rococo networks. Additionally, users will have the option to connect to a network that is not listed by specifying the web socket. ​ ### Tentative Mockups -![](https://github.com/protofire/assets/blob/c18c2adb8f40c692134bffbb4e92e0a78872744e/add_contract_1_720.png) +![](https://github.com/protofire/assets/blob/c18c2adb8f40c692134bffbb4e92e0a78872744e/add_contract_1_720.png?raw=true) -![](https://github.com/protofire/assets/blob/c18c2adb8f40c692134bffbb4e92e0a78872744e/add%20contract%202.png) +![](https://github.com/protofire/assets/blob/c18c2adb8f40c692134bffbb4e92e0a78872744e/add%20contract%202.png?raw=true) -![](https://github.com/protofire/assets/blob/c18c2adb8f40c692134bffbb4e92e0a78872744e/add%20contract%203.png) +![](https://github.com/protofire/assets/blob/c18c2adb8f40c692134bffbb4e92e0a78872744e/add%20contract%203.png?raw=true) -![](https://github.com/protofire/assets/blob/c18c2adb8f40c692134bffbb4e92e0a78872744e/networks%201.png) +![](https://github.com/protofire/assets/blob/c18c2adb8f40c692134bffbb4e92e0a78872744e/networks%201.png?raw=true) -![](https://github.com/protofire/assets/blob/c18c2adb8f40c692134bffbb4e92e0a78872744e/networks%202.png) +![](https://github.com/protofire/assets/blob/c18c2adb8f40c692134bffbb4e92e0a78872744e/networks%202.png?raw=true) ### Ecosystem Fit ​ @@ -100,7 +100,7 @@ We are not only a dev shop company, but we create long term partnerships with th - https://github.com/protofire/blockchain-learning-path - https://github.com/protofire/omen-exchange - https://github.com/protofire/kyber-pool-master-proxy-contract -​ + GitHub accounts of team members. - https://github.com/alongoni - https://github.com/henrypalacios @@ -137,7 +137,7 @@ Described in project details. - **FTE:** 2.5 - **Costs:** 52500 -​ + | Number | Deliverable | Specification | | -----: | ----------- | ------------- | | **0a.** | License | Apache 2.0 | @@ -147,7 +147,7 @@ Described in project details. | 1. | Interaction with deployed contracts | The functionallity based on [step 1](#step1) of the Project Details section. | | 2. | Interaction with custom smart contracts | The functionality based on [step 2](#step2) of the Project Details section. | | 3. | Shareable Contract Interaction Links | The functionality corresponds to what's described on [step 3](#step3) of the Project Details section. | -| 4. | Support for multiple chains | The functionality to be implemented corresponds to [step 4](#step4) of the Project Details section. | +| 4. | Support for multiple chains | The functionality to be implemented corresponds to [step 4](#step4) of the Project Details section. | ​ ## Future Plans @@ -155,12 +155,12 @@ Described in project details. At contractwizard.xyz team in protofire, our mission is to continue innovating and developing our platform to cater to the ever-changing needs of the smart contract community. We recognize the importance of providing our users with a comprehensive tool that enables them to manage all ink! smart contracts, including those they have created custom. ​ As we continue to develop our platform, we understand the importance of building a community around it. We believe that by creating a community of users, we can facilitate the sharing of knowledge, contracts, and different approaches to problem-solving. Through our platform, users will have the ability to share their experiences, ask questions, and engage with others within the community. This will create an environment that fosters innovation and encourages collaboration, leading to the development of new and exciting ideas. Our hope is that our platform will serve as a hub for all things smart contract-related, where users can come together to learn, grow, and innovate. -​ + **Custom contracts** - Add the possibility of creating custom contracts, not only with the modifiers but adding the ability to write code using the interface. - Compile the generated code and deploy it to different parachains. - Following the comments made on the [pull request](https://github.com/w3f/Grants-Program/pull/1413#pullrequestreview-1234970716), our approach will be based on the [ink-playground](https://github.com/paritytech/ink-playground) in order to integrate writing custom code and compiling it. -​ + **Social Interaction** - Create an account to store information. - Save your created smart contracts. @@ -169,4 +169,6 @@ As we continue to develop our platform, we understand the importance of building ​ ## Additional Information :heavy_plus_sign: ​ -**How did you hear about the Grants Program?** Web3 Foundation Website +**How did you hear about the Grants Program?** + +Web3 Foundation Website From e66f4a6b068c83e60989471593e6c1f43cde796e Mon Sep 17 00:00:00 2001 From: Federico Cicciarella <58514549+FedeC87p@users.noreply.github.com> Date: Thu, 20 Jul 2023 22:18:07 +0200 Subject: [PATCH 554/578] Create tracking_chain.md (#1847) * Create tracking_chain.md * Update tracking_chain.md * Update tracking_chain.md * Update tracking_chain.md * Update tracking_chain.md * Update tracking_chain.md --- applications/tracking_chain.md | 215 +++++++++++++++++++++++++++++++++ 1 file changed, 215 insertions(+) create mode 100644 applications/tracking_chain.md diff --git a/applications/tracking_chain.md b/applications/tracking_chain.md new file mode 100644 index 00000000000..895dd9c9697 --- /dev/null +++ b/applications/tracking_chain.md @@ -0,0 +1,215 @@ +# Tracking Chain + +- **Team Name:** Federico Cicciarella +- **Payment Address:** 15ofeBpTMQ7MNbqViRRRbkVz2y3eQt8SCgBy6yVVfsTKhMn2 (USDT) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + +## Project Overview :page_facing_up: + +During this time, I have had the opportunity to work with several companies that wanted to adopt blockchain technology. However, I have observed that they often face challenges that hinder their adoption, mainly due to the following reasons: + + - Difficulties integrating legacy software with blockchain, such as dealing with long confirmation times or scalability issues when handling a large number of transactions. I have personally spoken with clients who need to handle over a million transactions per year, with peaks of thousands of requests per minute. + + - Concerns regarding wallet security, custody, accounting management, and the purchase of tokens for transaction fees. + + - Challenges in querying the blockchain to retrieve or interpret transactions over time, lacking a user-friendly interface. + + - High cost of using the blockchain (those who are not familiar with the blockchain world have heard of ethereum and how much it costs to do operations on it) + +There is a significant market potential for smart contracts, such as tracking the lifecycle of a product or certifying the immutability of sensitive files, among other use cases. While these challenges may seem trivial, integrating existing and well-tested software with experimental projects like blockchains (this is the common thinking of web2 companies) often leads to insurmountable issues, resulting in project abandonment. + +Our project offers an intuitive and user-friendly tool to simplify blockchain integration for all businesses. + +We are aware of the interest expressed by various companies in using blockchain technology, and we want to demonstrate how easy and advantageous it is to integrate blockchain into their business processes. + +We aim to convey that adopting blockchain is no longer a complex and costly process but can be accomplished effortlessly with our intuitive tool, leveraging the scalability capabilities of Polkadot and its Parachains. + +Our ultimate goal is to help companies embrace the benefits offered by blockchain, opening the doors to a new way of doing business. We firmly believe that our project can be a turning point for widespread adoption of blockchain in the corporate sector, simplifying the integration process and providing a seamless and positive experience. + +We have already scheduled several demos with our clients, including one that has requested a demonstration of how to support a high number of transactions launched within a short timeframe and how to effectively manage them. + +The client's request highlights the importance of efficient transaction management in a high-volume blockchain environment. + +Furthermore, we will illustrate our transaction management strategies that enable fair and optimized resource allocation, avoiding overload issues and ensuring a continuous flow of operations. + +### Overview + +To address these challenges, I have decided to create a web application specifically designed for companies and users who are eager to venture into the world of blockchain. The application aims to bridge the gap between "Web2" and "Web3" by providing a simple API call to feed data into smart contracts, with an immediate response providing a unique identifier. + +To achieve this, I am developing a microservices architecture capable of handling millions of requests and scaling to accommodate peak traffic. Over the years, I have gained significant experience in building such systems, including a web application that processed tens of thousands of daily orders (including data-heavy files like photos for immediate printing) and effectively scaled during peak periods (e.g., the holiday season). + +My plan involves creating an endpoint that can be accessed from Web2, exclusively responsible for collecting data values to be inserted into a smart contract. Currently, I am focusing on storing key-value pairs; however, I intend to dynamically handle more complex cases in the future. In this way, the Web2 user will be relieved of any concerns regarding the bottleneck presented by the blockchain, as their task will already be completed (which we address through our bridge development), we can manage an unlimited number of requests per second, ensuring a smooth user experience. Upon successful transaction completion, we will send a registration notification to the customer, including all relevant onchain transaction data. Additionally, we will provide a graphical tool enabling users to verify their transactions onchain, ensuring transparency and data correctness. + +The application will handle all the necessary infrastructure setup for transaction transmission, including endpoint creation, failed transaction recovery, private key security, among others. The customer's role will be to select the appropriate smart contract type and chain for deployment, based on their future needs. For instance, in the future, certain data inputs may generate NFTs representing the final products, which could be utilized in other contexts through interoperability. Please note that this initial idea will not be present in the alpha version. Furthermore, we can leverage interoperability to store data in backup smart contracts created on secondary blockchains in case the primary chain faces congestion or other issues. + +### Project Details + +The project will consist of 8 microservices, each with a well-defined task. + +![TrackingChainSchema](https://github.com/FedeC87p/PublicImage/assets/58514549/74186f4f-ac66-4ac6-afc1-90f19c9b479d) + +![StepTracking](https://github.com/FedeC87p/PublicImage/assets/58514549/7f535c65-fc16-4cdb-a34a-b3b9cac13bea) + +1. Triage API: + - Purpose: Receives tracking requests, consults the registry, and associates a destination smart contract with each request based on a Profile. + - Scalability: Can scale by increasing endpoints during high load periods due to no concurrency access issues. + +2. Aggregator Pool Worker: + - Purpose: Moves tracking requests from Triage to the Pool after pre-filtering. + - Scalability: Cannot scale due to concurrent access management but can handle large workloads efficiently. + +3. Tx Generator Worker: + - Purpose: Sends transactions on-chain for tracked items in the Pool. + - Behavior: Doesn't wait for transaction responses, only saves the returned Hash. + +4. Tx Watcher Worker: + - Purpose: Monitors tracked items in the Pool with associated transactions for finalization. + - Outcome: Inserts successful transactions into the transaction Registry; performs recovery actions for failed transactions. + +5. Frontend Admin: + - Purpose: Manages the creation of associated accounts. + +6. Frontend Monitor: + - Purpose: Monitors and manages tracking statuses in various states. + +7. Frontend Registry: + - Purpose: Provides a user-friendly visualization of all tracked codes with direct links for on-chain verification. + +8. Web Application Triage: + - Purpose: Give the possibility to enter or view the status of onchain traced codes. (it will be fundamental for the demo that will have to lead us users to use the blockchain). + +![Screenshot_Insert](https://github.com/FedeC87p/TrackingChainGrant/assets/58514549/2e850a3b-1375-4889-a371-8593410b3282) + +### **Overview of the technology stack to be used** +We are planning on using a combination of blockchain technology, cloud services, and front-end development tools to build a performant, secure, and user-friendly platform. + +**Blockchain Layer:** +- **Smart Contracts**: Ink! and Solidity version for store the tracking values. + +**Backend Layer:** +- **.Net**: For our backend services, we'll use C# +- **Sql Server**: As for the database, we will be using Sql Server. Actually the system is designed to support almost all relational databases. https://learn.microsoft.com/en-us/ef/core/providers + +**Frontend Layer:** +- **Asp.Net MVC**: These libraries will be used for interacting with the API from our frontend application. + +### Ecosystem Fit + +I plan to develop a WASM version, integrating the SubstrateGaming https://github.com/SubstrateGaming library developed by Ajuna and EVM smart contracts (C# will be utilized with the Nethereum library https://nethereum.com/ for interaction with compatible EVM networks). + +To ensure user authenticity, all smart contracts and wallets created on various chains will integrate with Kilt, associating a digital identity with each user utilizing the smart contract to certify data ownership. + +## Team :busts_in_silhouette: + +### Team members + +- Federico Cicciarella + +### Contact + +- **Contact Name:** Federico Cicciarella +- **Contact Email:** federico.cicciarella@gmail.com +- **Website:** [Linkedin](https://it.linkedin.com/in/federicocicciarella) + + +### Team's experience + +My name is [Federico Cicciarella](https://it.linkedin.com/in/federicocicciarella), and I have been a Microsoft .Net (C#) developer for almost 20 years. In recent years, I have developed a strong interest in the blockchain, particularly in the use of Polkadot ecosystem (I am actively involved in Ajuna and Moonbeam as an ambassador, in Astar where I participate in the Ink! Academy and the Italian community). + +Over the years, I have gained significant experience in building such systems, including a web application that processed tens of thousands of daily orders (including data-heavy files like photos for immediate printing) and effectively scaled during peak periods (e.g., the holiday season). + +I'm working on a project for a censorship-resistant decentralized video platform. + +### Team Code Repos + +- https://github.com/TrackingChains/TrackingChain +- https://github.com/TrackingChains/EVMTrackingChain +- https://github.com/FedeC87p + +### Team LinkedIn Profiles (if available) + +- https://it.linkedin.com/in/federicocicciarella + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 4 month +- **Full-Time Equivalent (FTE):** 1 +- **Total Costs:** 10.000 USD + +### Milestone 1 — Basic functionality + +- **Estimated duration:** 3 month +- **FTE:** 1 +- **Costs:** 8.500 USD + + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | MIT | +| **0b.** | Documentation | We will provide a basic **tutorial** that explains how a user can configure the data entry for create profile for to associate the tracking requests to a smart contract transaction. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an **article**/workshop that explains how to use. | +| 1. | API: Triage | Written in Asp.Net, The Triage API acts as the gateway between the "Web2" world, which receives the Tracking requests, and the "Web3" world, where these requests will be saved. To do this it will verify that the incoming request is compatible with one of the profiles associated in the configuration, if so it will save the request in the Triage (and return an Guid to client) which will then be processed by the next service. In case the incoming request does not match any profile, it will be rejected. The Triage operation does not involve any concurrent processing, allowing for seamless scalability. It can accept requests simultaneously or even create multiple endpoints. The API expects a POST call with the following data: field Code used as a Key in the smart contract, field valueData used as one of the elements of the Value and the field Category that will be used to associate a profile with Tracking | +| 2. | Aggregator Pool Worker | Written in C#,The Aggregator Pool Worker will used to transfer processable data from Triage that has no time dependencies into the Pool. A transaction is transferable when there is no pending Transaction with same Profile to be completed in the pool | +| 3. | Tx Generator Worker | Written in C#,The Tx Generator Worker Worker will used to take data from Pool and make a transaction on onchain via smartcontract. In this case each worker instance takes one of the transactions entered into the pool and will process it by calling the selected smartcontract (this selection of smartcontract has already been made by Triage). Once the transaction has been made, it will save the HASH of the Tx so that it can be used by the next service. This service supports both (Ink! and EVM) TrackingChain smart contracts. The selection of the version of the smart contract to use will be given by the profile that was associated in the Triage phase | +| 4. | Tx Watcher Worker | Written in C#,The Tx Generator Worker Worker will used to check all Tx pending for finalized (or failed) status. Each worker instance takes a pending transaction and through the hash it will verify if it has been finalized successfully. This service supports both (Ink! and EVM) TrackingChain smart contracts. The selection of the version of the smart contract to use will be given by the profile that was associated in the Triage phase | +| 5. | API: Registry | Written in C#,Provide API for check the status of each Tracking request. Wich Guid of tracking request is possibile to watch the status of transaction. For example, the API will tell if the Tracking is in Trigae/Pool/Pending/Complete status and will provide all the times with which it moved from one status to another, as well as the onchain transaction information (gas used, hash tx. ..) | +| 6. | Web Application | Written in Asp.Net MVC pages for manage the insert tracking and views. A web interface from which it will be possible through a simple form to select the fields required to make a request towards the triage. | +| 7. | Ink! Smart contracts. | We will deliver a set of Ink! smart contracts that will able to track the key values. In particular, it will take care of saving in a dictionary key-value formed by a "Key" byte32 and the "Value" a list of bytes. A get call will also be available, which given a "Key" byte32 returns the entire "Value" list of Bytes saved over time, also providing the block number in which the transaction was carried out. It will also include the C# function that the "Tx Generator Worker" service will have to do to write onchain and the read call that will be used by the "Tx Watcher Worker" service. The implementation will partially reuse the [C# SubstrateGaming library](https://github.com/SubstrateGaming) | +| 8. | EVM Smart contracts | We will deliver a set of EVM smart contracts that will able to track the key values. In particular, it will take care of saving in a dictionary key-value formed by a "Key" byte32 and the "Value" a list of bytes. A get call will also be available, which given a "Key" byte32 returns the entire "Value" list of Bytes saved over time, also providing the block number in which the transaction was carried out. It will also include the C# function that the "Tx Generator Worker" service will have to do to write onchain and the read call that will be used by the "Tx Watcher Worker" service. The implementation will partially reuse the [C# Nethereum library](https://nethereum.com/) | + +### Milestone 2 — Monitor and Recovery functionality + +- **Estimated duration:** 1 month +- **FTE:** 1 +- **Costs:** 1.500 USD + + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | MIT | +| **0b.** | Documentation | We will provide a basic **tutorial** that explains how a user can use a frontend to easily configure profile, watch the transaction status and use recovery tool for failed transactions. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an **article**/workshop that explains how to use. | +| 1. | Tx Recovery Worker | Written in C#, The Tx Recovery Worker will used to managed all transaction in failed status. It takes care of trying to re-process any transactions that have ended in error. in case of a new error, the transaction will be cancelled | +| 2. | Frontend Admin Tools | Written in Asp.Net MVC, The frontend for manage all configuration like smart contract used, wallet used, profile association. | +| 3. | Frontend Transaction Monitor | Written in Asp.Net MVC, The monitor to watch all tracking request. A graphical tool that allows you to display the status of all queues on screen. For example showing how many Triage there are, how many Pending, how many failed transactions. | +| 4. | Frontend Registry | Written in Asp.Net MVC, The frontend for user friendly graph of specific product tracked onchain. For each value Key will be show all data Values insured and in wich block/time was performed | + +## Future Plans + +- Pres ent the demo to customers and onboard our first major customer. +- Continue meetings with customers interested in entering the web3 and onboard other customers. +- Participate in events to be able to demonstrate how our demo works, also showing the portfolio of customers who have already chosen to use it. +- Integration DID with Kilt +- Continue development of other features + - Dynamic smart contract data instead of single key-value pairs + - Support message bus (like RabbitMQ) + - Use a dedicated database for each individual component + - Support complex case of triage profile + - Migrate to Dot Net Core 8 and AOT where supported + - Improve security of sensitive data (like private key) + - Improve Frontend Registry pages + - Tool for massive Triage call + - Implement any improvements requested by users + - Improve Frontend Admin Tools (dynamic creation smartcontract, chainstatus monitor...) + +## Referral Program (optional) :moneybag: + +- **Referrer:** Patrizia De Bella +- **Payment Address:** BTC, Ethereum (USDC/DAI) or Polkadot/Kusama (USDT) payment address. Please also specify the currency. (e.g. 0x8920... (DAI)) + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** I've been actively following polkadot for a few years, I'm an ambassador for some projects including Ajuna, Moonbean and I'm part of Astar Ink! Academy + +1. Work you have already done + - Starting in June 2023 to developing the project's code. Over the past year, we've been offering our product to potential customers, gathering valuable feedback along the way. These inputs guided us in creating the current version of the product, which we presented through an engaging demo and which piqued the interest of many customers. +2. If there are any other teams who have already contributed (financially) to the project. + - No, all "Future Plans" will be covered by new clients or carried forward by me. +3. Have you applied for other grants so far? + - No From 5dce545fd552e667619240385a891467739050ea Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Fri, 21 Jul 2023 00:50:36 -0400 Subject: [PATCH 555/578] Update index.md (#1858) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 7913380c1ea..8735a7ff5ea 100644 --- a/applications/index.md +++ b/applications/index.md @@ -132,7 +132,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Jonathan Brown](https://acuity.social/) | [Hybrid Explorer](hybrid.md) | [GitHub](https://github.com/acuity-social) | ☐ | ☒ | ☐ | | [ParaSpell](https://github.com/paraspell) | [ParaSpell_Follow Up 2](ParaSpell_follow-up2.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | | [justmert](https://github.com/justmert) | [PolkaFlow](polkaflow.md) | [GitHub](https://github.com/justmert) | ☐ | ☒ | ☒ | -| [BelSoft](https://www.belsoft.rs) | [Diffy messenger](Diffy_chat.md) | [GitHub](https://github.com/1db1) | ☐ | ☒ | ☐ | +| [BelSoft](https://www.belsoft.rs) | [Diffy messenger](Diffy_chat.md) | [GitHub](https://github.com/1db1) | ☐ | ☒ | ☒ | | [Zkverse](https://github.com/Zkvers) | [Zkverse](zkverse.md) | [GitHub](https://github.com/Zkvers/substrate-zk) | ☐ | ☐ | ☐ | | [Taiwan Research-based Biopharmaceutical Manufacturers Association](https://trpma.org.tw/cmn) | [Claps Health](Claps.md) | [GitHub](https://github.com/Claps-Health/) | ☐ | ☐ | ☐ | | [Tolga Yaycı](https://github.com/tolgayayci) | [Awesome Polka](Awesome-Polka.md) | [GitHub](https://github.com/tolgayayci/awesome-polka/tree/dev) | ☐ | ☒ | ☒ | From 14d5daef97b2aff70aafafa770864a4358b1fa73 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 21 Jul 2023 06:58:06 +0200 Subject: [PATCH 556/578] Update index.md Add Tracking Chain --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 8735a7ff5ea..0ac9c478d05 100644 --- a/applications/index.md +++ b/applications/index.md @@ -48,6 +48,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Starks](https://github.com/tur461) | [XCM tool for NFTs](./xNFT.md) | [GitHub](https://github.com/tur461) | ☐ | ☐ | ☐ | | [ChainSafe](https://chainsafe.io/) | Polkadot Snap Maintenance | [GitHub](https://github.com/ChainSafe/metamask-snap-polkadot) | ☐ | ☐ | ☐ | | [justmert](https://github.com/justmert) | DOTLY: Revolutionizing Polkadot Account Statistics | [GitHub](https://github.com/justmert/dotly) | ☐ | ☐ | ☐ | +| [Federico Cicciarella](https://www.linkedin.com/in/federicocicciarella/?originalSubdomain=it) | [Tracking Chain](./tracking_chain.md) | [GitHub](https://github.com/TrackingChains/TrackingChain) | ☐ | ☐ | ☐ | [🔝](#2023) From a964ee8875d1aaebd9ab4b6ff0534102f9a08ea3 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 21 Jul 2023 06:59:34 +0200 Subject: [PATCH 557/578] Update index.md Add dotly link --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 0ac9c478d05..46f1f6b4691 100644 --- a/applications/index.md +++ b/applications/index.md @@ -47,7 +47,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [ZeroDAO](https://github.com/ZeroDAO) | [Melodot](./Melodot.md) | [GitHub](https://github.com/ZeroDAO) | ☐ | ☐ | ☐ | | [Starks](https://github.com/tur461) | [XCM tool for NFTs](./xNFT.md) | [GitHub](https://github.com/tur461) | ☐ | ☐ | ☐ | | [ChainSafe](https://chainsafe.io/) | Polkadot Snap Maintenance | [GitHub](https://github.com/ChainSafe/metamask-snap-polkadot) | ☐ | ☐ | ☐ | -| [justmert](https://github.com/justmert) | DOTLY: Revolutionizing Polkadot Account Statistics | [GitHub](https://github.com/justmert/dotly) | ☐ | ☐ | ☐ | +| [justmert](https://github.com/justmert) | [DOTLY: Revolutionizing Polkadot Account Statistics](./dotly.md) | [GitHub](https://github.com/justmert/dotly) | ☐ | ☐ | ☐ | | [Federico Cicciarella](https://www.linkedin.com/in/federicocicciarella/?originalSubdomain=it) | [Tracking Chain](./tracking_chain.md) | [GitHub](https://github.com/TrackingChains/TrackingChain) | ☐ | ☐ | ☐ | [🔝](#2023) From 95efd8c475f78c194c8eeaeda1f0c4d6303b5215 Mon Sep 17 00:00:00 2001 From: its-a-setup <96050384+its-a-setup@users.noreply.github.com> Date: Tue, 25 Jul 2023 01:19:44 +0700 Subject: [PATCH 558/578] add TPScore project (#1837) --- applications/TPScore.md | 198 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 198 insertions(+) create mode 100644 applications/TPScore.md diff --git a/applications/TPScore.md b/applications/TPScore.md new file mode 100644 index 00000000000..6951775c1ab --- /dev/null +++ b/applications/TPScore.md @@ -0,0 +1,198 @@ +# TPScore + +- **Team Name:** TPScore +- **Payment Address:** 0xa8E10a8E6EEfB7175fB529b24e1a0b8DdBD29510 (USDC) +- **Level:** 1 + +## Project Overview :page_facing_up: + +This application is in response to the RFP [Data Analysis Tools for Substrate-based Blockchains](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/data_analysis_tools.md) + +### Overview + +TPScore simplifies TPS Data Analysis for non-technical users in the Polkadot Ecosystem. + +TPScore aims to provide non-technical users in the Polkadot ecosystem with an accessible and user-friendly platform for analyzing TPS (Transactions per Second) data. Our goal is to bridge the gap between technical intricacies and user-friendly visualization, empowering individuals to make informed decisions about blockchain adoption, investment, and development. + +Adoption levels and community engagement are vital indicators of a blockchain's success. They directly impact the attractiveness of a network and its potential for growth. While social media followers, media coverage, and developer activity are commonly considered metrics, the true measure of adoption lies in TPS. TPS is a robust metric that correlates with the economic activity on a blockchain, making it a crucial parameter for understanding and evaluating different chains. + +When users choose a blockchain for investment or development purposes, conducting a thorough analysis of each chain is essential. Polkadot's unique architecture and scalability prospects, with its interconnected parachains, offer a vast ecosystem of possibilities. However, determining the TPS of Polkadot and its 40+ parachains is currently a complex task that requires technical knowledge and data analytics expertise. This creates a significant barrier for non-technical users and even presents challenges for those with technical know-how, as gathering TPS data for multiple parachains can be time-consuming. + +TPScore aims to simplify the process of TPS analysis by providing an intuitive and user-friendly analytics website. We remove the need for users to perform complex ETL (Extract, Transform, Load) work or possess specialized data analytics skills. Our platform presents TPS numbers for the Polkadot Relay chain and parachains in a readily understandable format, accessible to anyone. We empower individuals to effortlessly access and compare TPS data across different parachains, enabling them to make informed decisions regarding investments, project selection, and engagement within the Polkadot ecosystem. + +### Project Details + +The final state of the project will consist of two key components: + +1. ETL System: This component will be responsible for fetching data from the blockchain, transforming it, and storing it in a relational database. + +2. User Interface (UI) with data visualizations: The UI will provide a user-friendly interface to access and analyze TPS data. It will include visually appealing and informative visualizations of the data, reducing users barier to understanding blockchain metrics. + +The initial version of TPScore, which will serve as a POC, will cover the Relay chain and 38 parachains. The UI interface will be designed to be accessible on both desktop and mobile devices, ensuring a seamless user experience across various platforms. + +To fetch blockchain data, we will leverage two methods: +1. Subscan API ([list of parachains accessed with Subscan API](https://github.com/its-a-setup/tpscore/blob/main/parachain_info/subscan_parachains.json)) +2. Public endpoints ([list of parachains accessed by public endpoints](https://github.com/its-a-setup/tpscore/blob/main/parachain_info/endpoint_parachains.json)) + +#### 1. ETL System + +We will retrieve blockchain data using either the [Subscan API](https://support.subscan.io/#introduction) or connect to the public endpoints of parachains using the [Substrate interface library](https://pypi.org/project/substrate-interface/1.0.3/). + +To ensure streamlined and efficient data processing, we will leverage Apache Airflow. + +To calculate the average TPS, we will take the number of transactions within the last 100 blocks. We will fetch raw data at regular intervals of every 10 minutes. This raw data will then undergo processing within Airflow's DAGs using Python Operators, ensuring efficient data transformation and preparation. + +Finally, the processed data will be stored in a MySQL database to be later picked up by Next.js framework. + +#### 2. User Interface (UI) with data visualizations + +We will use Next.js as our full-stack framework. It allows us to both retrieve data from MySQL database and render React app on a server. + +To visualize data, we will use a simple and concise UI: the grid of cards with the blockchain's name and TPS. We expect one common use case: users go to our website and scan through all chains to find a desired one. So we will simplify this process by adding handy sorting and filtering. + +#### Architecture + +![Architecture diagram](https://raw.githubusercontent.com/its-a-setup/tpscore_grant/main/static/architecture.png) + +#### Database schema + +![](https://raw.githubusercontent.com/its-a-setup/tpscore_grant/main/static/db_schema.png) + +#### UI Design + +##### Desktop Design + +![Desktop UI design](https://raw.githubusercontent.com/its-a-setup/tpscore_grant/main/static/desktop_main_screen.png) + +##### Mobile Design + +![Mobile UI design](https://raw.githubusercontent.com/its-a-setup/tpscore_grant/main/static/mobile_main_screen.png) + +#### Technology stack +1. Apache Airflow +2. Python + Data Analysis Libraries +3. Next.js & React + +#### Out of scope details + +During this stage, our focus will be solely on the Polkadot ecosystem, and we won't be providing coverage for the Kusama ecosystem. This decision allows us to concentrate on testing the market fit of our Proof of Concept (POC) within the Polkadot network. + +Additionally, we will exclude a specific set of parachains from our analysis ([out of scope parachains](https://github.com/its-a-setup/tpscore_grant/blob/main/parachain_info/out_of_scope_parachains.json)). These parachains are either not yet live on the mainnet or lack a public endpoint for data access. + +### Ecosystem Fit + +Our project addresses a critical gap within the Polkadot ecosystem by providing comprehensive data visualization and analysis tool. Currently, obtaining data from Substrate-based blockchains relies on block explorers that offer a limited set of metrics or require technical skills to access and transform raw data from parachain endpoints. Recognizing this challenge, we aim to simplify the life of Polkadot ecosystem users with easy access to sophisticated network metrics for analyzing network parameters and comparing blockchains. + +Our target audience comprises advanced blockchain users who seek convenient access to comprehensive network metrics but lack the technical expertise or time to perform complex analyses independently. We understand their need for intuitive tools that enable efficient evaluation of blockchain networks, helping them to make informed decisions. + +As of the time of this application, no tools exist for checking TPS across the Polkadot Relay chain and parachains. However, there are 2 similar projects, [ETHTPS](https://ethtps.info/) and [RealTPS](https://realtps.net/), which focus on the Ethereum and other layer-1 networks. The presence of these projects indicates the existence of user needs and market fit. Unfortunately, both of these projects do not cover Polkadot ecosystem and fall short in terms of user-friendliness, highlighting the need for improvement in its UI design. + +## Team :busts_in_silhouette: + +### Team members + +- Ilya Andreev +- Nikita Grechino + +### Contact + +- **Contact Name:** Ilya Andreev +- **Contact Email:** tpscore.engineering@gmail.com + +### Legal Structure + +- **Registered Address:** no registered address +- **Registered Legal Entity:** no registered entity + +### Team's experience + +**Ilya Andreev** has 4+ years of experience in product management, out of which 3 years were spent in P&G focusing on the management and development of Big Data solutions. He has been in the blockchain industry for 3+ years with more than a year working full-time in one of the startups in the DotSama ecosystem. + +**Nikita Grechino** is a Fullstack engineer with more than 5 years of experience. He has been working in the blockchain space since early 2022, focusing on the development of the front-end interface for crypto trading platforms. + +### Team Code Repos + +- https://github.com/its-a-setup +- https://github.com/fromaline + +## Development Status :open_book: + +This project is a response to RFP [Data Analysis Tools for Substrate-based Blockchains](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/data_analysis_tools.md) + +Up until now, our primary focus has revolved around two key objectives: +1. Finding product-market fit +2. Ensuring credible API/endpoints availability for the Polkadot ecosystem + +#### 1. Finding product-market fit + +Max TPS has long been a core indicator of blockchain performance and speed. Numerous articles and blogs compare the maximum TPS of different networks, highlighting its significance ([Article 1](https://academy.binance.com/en/glossary/transactions-per-second-tps), [Article 2](https://www.analyticsinsight.net/top-10-cryptocurrencies-with-a-high-transaction-speed-in-2022/), [Article 3](https://medium.com/codex/cardano-solana-polkadot-fantom-and-telos-vs-the-clock-d439aa73e4a2), etc.). However, max TPS is often based on theoretical calculations rather than real network utilization, making real-time TPS measurement a more valuable alternative. Notably, projects like [ETHTPS](https://ethtps.info/) and [RealTPS](https://realtps.net/) already track TPS outside the Polkadot ecosystem, indicating a growing interest in real-time TPS tracking. + +#### 2. Ensuring credible API/endpoints availability for the Polkadot ecosystem + + +We have successfully identified methods to retrieve data from the Polkadot Relay chain and 38 parachains. We will utilize the [Subscan API](https://support.subscan.io/#introduction) or connect to the public endpoints of parachains using the [Substrate interface library](https://pypi.org/project/substrate-interface/1.0.3/). It is important to note that locating functional parachain endpoints may be challenging for average blockchain users, as there is no centralized source providing all parachain endpoints. Moreover, certain parachains lack public endpoints and will be excluded from this POC. However, we may consider including them in future versions by directly engaging with the respective parachain teams. + +For a detailed list of the parachains accessed through the Subscan API, parachain endpoints, and the out-of-scope parachains, please refer to the provided [link](https://github.com/its-a-setup/tpscore_grant/tree/main/parachain_info) + +## Development Roadmap :nut_and_bolt: + + +### Overview + +- **Total Estimated Duration:** 2 months +- **Full-Time Equivalent (FTE):** 2 +- **Total Costs:** 10,000 USD + +### Milestone 1 - ETL System + +- **Estimated duration:** 1 month +- **FTE:** 1 +- **Costs:** 5,000 USD + + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | GPLv3| +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial**. +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Database schema | We will implement the schema in MySQL database. | +| 2. | Airflow DAGs | We will create Airflow DAGs for data gathering and calculation of TPS metrics. | + + +### Milestone 2 — User Interface (UI) with data visualizations + +- **Estimated Duration:** 1 month +- **FTE:** 1 +- **Costs:** 5,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | GPLv3 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial**. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an **article** that explains how to use TPScore product and how it was build. | +| 1. | Data access | We will access the MySQL database from our Next.js app and process data on the server to make the client as lightweight as possible. | +| 2. | UI | We will build UI according to the designs and test it thoroughly under different conditions. | + + +## Future Plans + +Our primary goal for this project is to develop a POC and validate our assumptions regarding its market fit and appeal to Polkadot users. If we receive a positive response from the community, we intend to dedicate more time and resources to further develop the project. + +In future versions, we have identified several potential features to consider: + +1. Including support for Polkadot parachains that are currently out of scope for the POC by directly engaging with the respective parachain teams. +2. Incorporating historical data and visualizations to observe the TPS dynamics of specific parachains or the relay chain over time. +3. Expanding the project to include data from the Kusama Relay chain and its associated parachains. +4. Enabling easy comparisons by incorporating data from other non-Substrate-based blockchains. +5. Extending the project beyond TPS tracking to include other valuable parachain-related data that is typically challenging to retrieve without technical expertise. + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** + +We learned about it via Web3 Foundation Website. We've been closely monitoring the DotSama ecosystem for more than a year, we've read documentation, tested various projects/parachains, and participated in staking. After getting a deeper understanding of the technology and the ecosystem we decided to test our own idea and build a POC of a data analytics website for the Polkadot ecosystem. + +This application is a logical next step in our continued interest in Substrate-based chains and Polkadot in particular. \ No newline at end of file From e8593027eaef2d75a64819d5a9d01ebd1492e25f Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 24 Jul 2023 20:21:58 +0200 Subject: [PATCH 559/578] Update index.md Add TPScore --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 46f1f6b4691..8b017207276 100644 --- a/applications/index.md +++ b/applications/index.md @@ -49,6 +49,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [ChainSafe](https://chainsafe.io/) | Polkadot Snap Maintenance | [GitHub](https://github.com/ChainSafe/metamask-snap-polkadot) | ☐ | ☐ | ☐ | | [justmert](https://github.com/justmert) | [DOTLY: Revolutionizing Polkadot Account Statistics](./dotly.md) | [GitHub](https://github.com/justmert/dotly) | ☐ | ☐ | ☐ | | [Federico Cicciarella](https://www.linkedin.com/in/federicocicciarella/?originalSubdomain=it) | [Tracking Chain](./tracking_chain.md) | [GitHub](https://github.com/TrackingChains/TrackingChain) | ☐ | ☐ | ☐ | +| [TPScore](https://github.com/its-a-setup) | [TPScore](./TPScore.md) | [GitHub](https://github.com/its-a-setup) | ☐ | ☐ | ☐ | [🔝](#2023) From 34de1265af69c288dd24896bf683de40386bf6bd Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Mon, 24 Jul 2023 15:22:41 -0300 Subject: [PATCH 560/578] Update index.md (#1861) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 8b017207276..e8b9c72f7f4 100644 --- a/applications/index.md +++ b/applications/index.md @@ -63,7 +63,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Galaxy.Do](https://galaxy.do) | [Galaxy: Three-dimensional Web for Polkadot Users](./galaxy.md) | [GitHub](https://github.com/7flash) | ☐ | ☒ | ☐ | | [Web3 Labs Ltd](https://www.web3labs.com/) | [Sirato (Epirus) Substrate Explorer - Phase III](./sirato_substrate_phase3.md) | [GitHub](https://github.com/web3labs) | ☐ | ☒ | ☒ | | [Collective Intelligence Labs](https://collectiveintelligence.dev/)| [Omnichain Infrastructure](./CILA-omnichain-infrastructure.md) | [GitHub](https://github.com/Collective-Intelligence-Labs) | ☐ | ☐ | ☐ | -| [TradeLink](https://tradelink.pro/) | [Sandox](./sandox.md) | [GitHub](https://github.com/BEARlogin) | ☐ | ☐ | ☐ | +| [TradeLink](https://tradelink.pro/) | [Sandox](./sandox.md) | [GitHub](https://github.com/BEARlogin) | ☐ | ☒ | ☐ | | [Wunderbar Network](https://wunderbar.network/) | [Vue.js + TypeScript Substrate Front-End Template](./vue-typescript-substrate-frontend-template.md) | [GitHub](https://github.com/WunderbarNetwork) | ☐ | ☐ | ☐ | | [Profond.ai](https://www.profond.ai/) | [Profond](./Profond.md) | [GitHub](https://github.com/emarai) | ☐ | ☐ | ☐ | | [727.ventures](https://727.ventures) | [Patron](./patron.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☒ | ☒ | From 07e77b39c026ccc85dada290ae0cbf87cc202dfd Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Tue, 25 Jul 2023 01:06:28 -0400 Subject: [PATCH 561/578] Update index.md (#1862) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index e8b9c72f7f4..adb6d234d5c 100644 --- a/applications/index.md +++ b/applications/index.md @@ -142,7 +142,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [David Semakula](https://github.com/davidsemakula) | [Ink Analyzer](ink-analyzer.md) | [GitHub](https://github.com/ink-analyzer/ink-analyzer) | ☐ | ☒ | ☐ | | [Bright Inventions](https://brightinventions.pl/) | [High-availability validator setup](High_availability_validator_setup.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☒ | | [DIA Data](https://www.diadata.org/) | [Bridgestate Attestation Oracle](DIA_Bridge_Attestation_Oracle.md) | [GitHub](https://github.com/diadata-org/) | ☐ | ☒ | ☐ | -| [TogetherCrew](http://www.togethercrew.com/) | [Community Health Check](community-health-check.md) | [GitHub](https://github.com/RnDAO) | ☐ | ☐ | ☐ | +| [TogetherCrew](http://www.togethercrew.com/) | [Community Health Check](community-health-check.md) | [GitHub](https://github.com/RnDAO) | ☐ | ☒ | ☐ | | [Decentration](https://www.decentration.org/) | [Supersig Phase 2](./supersig_fellowship.md) | [GitHub](https://github.com/decentration) | ☐ | ☒ | ☒ | | [Polkadrys Labs](https://github.com/rtomas) | [Open Payroll](./openPayroll.md) | [GitHub](https://github.com/rtomas) | ☐ | ☐ | ☐ | | [Itering](https://www.itering.io/) | [Solidity Verifier Implementation for Accountable Light Client](./solidity-verifier-for-accountable-light-client.md) | [GitHub](https://github.com/darwinia-network) | ☐ | ☒ | ☐ | From f29b9893f4787e928463d56955c1d2e4990a3ca1 Mon Sep 17 00:00:00 2001 From: Chiro Hiro Date: Tue, 25 Jul 2023 14:12:22 +0700 Subject: [PATCH 562/578] Add Orochi Network's proposal for research and development MPC ECDSA (#1786) --- applications/orochi-network-orosign-part1.md | 139 +++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 applications/orochi-network-orosign-part1.md diff --git a/applications/orochi-network-orosign-part1.md b/applications/orochi-network-orosign-part1.md new file mode 100644 index 00000000000..3e92a275415 --- /dev/null +++ b/applications/orochi-network-orosign-part1.md @@ -0,0 +1,139 @@ +# Orochi Network's proposal for research and development MPC ECDSA + +- **Team Name:** Orochi Network +- **Payment Address:** 0x2d309e09149259bD2b9a8C88985581B724d058b2 (ETH) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + +## Project Overview :page_facing_up: + +### Overview + +Users are now able to take advantage of the highest security feature similar to a cold storage while experiencing flexibility and convenience of the mobile app at minimal cost. Orosign is a self-managing custodial Mobile App for digital assets/identity that suits all demands of Web3. + +### Project Details + +Orosign project utilize cryptographic primitives and Multiparty Computation (MPC) to help people manage/secure their digital assets, it could provide highest security meanwhile friendly to end-users. Orosign provides following features: + +- **Gasless Multi-signature:** We use ECDSA proofs to perform off-chain voting to manage multi-signature wallet. +- **Gaming & NFT:** Support gaming by providing automation transaction signing for Web3 game, this wallet can manage and display NFTs. +- **ZeroKey:** A MPC based wallet, we build ECDSA on top of MPC to secure the signing process where user can perform the signing without any actual private key. +- **Web3 Passport:** Support Proof of Carrying Data (PCD) for the Web3 authorization. +- **Account Abstraction with MPC:** You could see the raise of Account Abstraction at the smart contract level, we want to take it a bit further with MPC. We want to provide a MPC based account abstraction for the end-users, so they can manage their digital assets in a more secure way. + +![](https://orochi.network/assets/images/orosign.png) + +### Ecosystem Fit + +- **Non-custodial** Users are holding their own digital asset that meant the encrypted private keys is stored in their crypto wallet and hold the major secret shares in MPC wallet. Orosign was design to make sure no one able to touch people digital asset even Orochi Network. +- **High Customizability** In gasless Multi-signature Wallet and MPC Wallet, user can customize number of participants and the threshold to perform signing process. +- **Highest Level of Security** Orosign can be provide the first MPC Wallet on Polkadot. +- **NFT & games optimization** Automatic showcase for all NFT collectibles, and support automation transaction signing for Web3 game. + +**What is the benefit of this solution compared to others?** + +- Multi-signature and MPC Wallet enable highest level of security in co-ownership for vast majority of Polkadot's users. +- Providing the first MPC Wallet as a mobile application on Polkadot +- Orosign is building toward the vision of Web3 passport, it allos user to manage their digital identity and assets in one place. + +**Is this meant to be an enterprise-grade security wallet such as this SaaS wallet?** + +- Orosign is a self-custodian wallet, we offer enterprise-grade security for retail and semi-retail users. + +**Will it be cross-chain compatible or is it only meant for substrate chains?** + +- In the budget of this proposal we only able to support Polkadot's chain and its parachains. We will consider to support other chains in the future. + +**Can you further expand on the technical details of the wallet in the deliverables?** + +- We implement DKG to generate secret shares that will be used to perform signing process without actual private key. +- User will hold let's say 3 shares (2 sign shares and 1 backup) of 5 shares (Orochi Network hold 2). We created a threshold signature 3 of 5, it's required at least 1 share from user to perform transaction co-signing. + - Orochi Network can't perform the signing process. + - User can perform the signing process with or without Orochi Network. + +## Team :busts_in_silhouette: + +### Team members + +- Chiro Hiro - CEO Orochi Network [Github](https://github.com/chiro-hiro) +- Hubert Nguyen - CGO Orochi Network [Github](https://github.com/hubertnguyen88) +- Minh - R&D Specialist [Github](https://github.com/phamnhatminh1292001) +- James - Front-end Developer [Github](https://github.com/seawish369) +- Kevin - Back-end Developer [Github](https://github.com/dqtkien) +- Trang - Business Analysis + +### Contact + +- **Contact Name:** Hubert Nguyen +- **Contact Email:** hubert@orochi.network +- **Website:** www.orochi.network + +### Legal Structure + +- **Registered Address:** OROCHI NETWORK PTE. LTD,68 CIRCULAR ROAD , #02-01 , SINGAPORE (049422) +- **Registered Legal Entity:** OROCHI NETWORK PTE. LTD,68 CIRCULAR ROAD , #02-01 , SINGAPORE (049422) + +### Team's experience + +We are focusing in cryptography and especially ZKP, we want to utilize cryptography to provide **Verifiable Computation**. + +- Our technical blog [https://docs.orochi.network/](https://docs.orochi.network/) +- Our Github repo [https://github.com/orochi-network](https://github.com/orochi-network) +- Our proposal for zkMemory [https://hackmd.io/@chiro-hiro/SkqNGtcW2](https://hackmd.io/@chiro-hiro/SkqNGtcW2) + +### Team Code Repos + +- https://github.com/orochi-network + +### Team LinkedIn Profiles (if available) + +- [Chiro Hiro](https://www.linkedin.com/in/chiro8x) +- [Hubert Nguyen](https://www.linkedin.com/in/hungnguyen88) + +## Development Status :open_book: + +[https://github.com/orochi-network](https://github.com/orochi-network) + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 2 +- **Full-time equivalent (FTE):** 2 +- **Total Costs:** $10,000 + +### Milestone 1 + +In this milestone, our team use cryptography to build a bridge from Digital Signature Algorithm (DSA especially ECDSA, EdDSA, Schnorr Signature) to Multi-Party Computation (MPC) allow the signing process to be performed without actual private key. There are 3 DSAs were used by Polkadot: `secp256k1`, `ed25519`, `sr25519`. Before we can build a MPC based DSA, we need to research the algorithm and figure out how we could fit MPC into it. You may notice that each curve have different parameters and different field, after the research we can specify how MPC should be implement without harm its security. + +- **Estimated Duration:** 2 months +- **FTE:** 2 +- **Costs:** $10,000 + +| Number | Deliverable | Specification | +| ------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **0a.** | License | CC0 1.0 | +| **0b.** | Research | Researching about Polkadot signature system and research their compatibility with MPC by which we can be fully comptabile with Polkadot and its parachains | +| **0c.** | Research | Public technical report for every research we made, everything published under [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | +| **1.** | Research | Researching about MPC in ECDSA (all supported signatures by Polkadot) | +| **2.** | Research | Researching MPC for `secp256k1` and providing the document that describe how the MPC will be built and its security consideration | +| **3.** | Research | Researching MPC for `ed25519` and providing the document that describe how the MPC will be built and its security consideration | +| **4.** | Research | Researching MPC in `sr25519` and providing the document that describe how the MPC will be built and its security consideration | + +## Future Plans + +- Implement MPC as a Rust crate that supports `secp256k1`, `ed25519`, `sr25519`, supporting multiparty computation to perform transaction/message signing with mentioned DSA. This module will implement with Rust programing language and compile to Wasm opcode or native lib for React Native app. +- Implement a node of MPC's distributed network to perform MPC. +- Implement API interface for distributed system, allow Wallet API to connect to MPC nodes. +- Integrate wallet API with node's RPC, provide back-end for Orosign front-end. +- Integrate wallet API with Orosign front-end, allow users to use MPC wallet. +- Integrate MPC in both front-end and back-end of Orosign, allow user to perform transaction signing with mobile device. +- Support PCD (Proof of Carrying Data) + +## Additional Information :heavy_plus_sign: + +We do research about MPC, especially ECDSA threshold signature for 1 year, publish several articles on our blog ([docs.orochi.network](https://docs.orochi.network)). Drafting the paper to consider right method to Implement threshold signature (ECDSA), considering different methods to for implementation. Have some related work on MPC [ECVRF](https://github.com/orochi-network/orochimaru/tree/main/libecvrf) which is shared some similar primitives to ECDSA. + +- Are there are any teams who have already contributed (financially) to the project? + - No, our project is self funded till now +- Have you applied for other grants so far? + - No From 94fb52baba28ccd5d4e37f73765af8aaaaa7a655 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 25 Jul 2023 09:14:36 +0200 Subject: [PATCH 563/578] Update index.md --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index adb6d234d5c..3f2db78e0f9 100644 --- a/applications/index.md +++ b/applications/index.md @@ -50,6 +50,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [justmert](https://github.com/justmert) | [DOTLY: Revolutionizing Polkadot Account Statistics](./dotly.md) | [GitHub](https://github.com/justmert/dotly) | ☐ | ☐ | ☐ | | [Federico Cicciarella](https://www.linkedin.com/in/federicocicciarella/?originalSubdomain=it) | [Tracking Chain](./tracking_chain.md) | [GitHub](https://github.com/TrackingChains/TrackingChain) | ☐ | ☐ | ☐ | | [TPScore](https://github.com/its-a-setup) | [TPScore](./TPScore.md) | [GitHub](https://github.com/its-a-setup) | ☐ | ☐ | ☐ | +| [Orochi Network](https://www.orochi.network/) | [Research and development MPC ECDSA](./orochi-network-orosign-part1.md) | [GitHub](https://github.com/orochi-network) | ☐ | ☐ | ☐ | [🔝](#2023) From c658d45c69b23aac0f4d270622796388b587d81d Mon Sep 17 00:00:00 2001 From: Jonathan Brown Date: Tue, 25 Jul 2023 14:56:41 +0700 Subject: [PATCH 564/578] Amend milestone 3. (#1859) * Amend milestone 3. * Update applications/hybrid.md Co-authored-by: S E R A Y A --------- Co-authored-by: S E R A Y A --- applications/hybrid.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/applications/hybrid.md b/applications/hybrid.md index f11f38c7077..a8c7131e949 100644 --- a/applications/hybrid.md +++ b/applications/hybrid.md @@ -223,11 +223,10 @@ Development has not started on the project, however the codebase will largely fo | **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can build a chain-specific Hybrid Indexer and use the rudimentary explorer dapp. | | **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | | **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | -| 0e. | Video | We will publish a video that explains and demonstrates all aspects of the explorer. | -| 1. | Dapp | The dapp will be extended to query block and state via either the Substrate Connect light client, or via direct connect to a full node via WSS. | -| 2. | Cross-chain UI | When a Tx includes a XCM, it will be easy and intuitive to open the relevant block from the other chain(s). | -| 3. | Support event schema changes | It will be possible to index old events that have changed their Rust type in a runtime upgrade. | -| 4. | Per-chain build | Indexer needs to be built for the chain, e.g. hybrid-indexer-polkadot - custom pallets can be indexed. | +| 0e. | Blog post | We will publish a blog post that explains and demonstrates all aspects of the explorer. | +| 1. | Hybrid Indexer Library | Convert hybrid-indexer into a library that can be used by a Substrate chain indexer. Write macros for indexing all standard Substrate pallets. | +| 2. | Polkadot Indexer | New rust project using hybrid-indexer library to index polkadot, kusama, rococo & westend. | +| 3. | Chain select | The Hybrid dapp will have a dropdown to switch between the 4 polkadot chains. | ## Future Plans From 1c35866ee1fd79772919089087d6fe444a952b54 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Thu, 27 Jul 2023 12:29:43 -0300 Subject: [PATCH 565/578] Update index.md (#1867) --- applications/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/applications/index.md b/applications/index.md index 3f2db78e0f9..bdff7366135 100644 --- a/applications/index.md +++ b/applications/index.md @@ -78,10 +78,10 @@ Use this page for an overview of all public grants and their status. Use the sid | [Scio Labs](https://scio.xyz/) | [XCM Domain Name Service](xcm-domain-service.md) | [GitHub](https://github.com/scio-labs) | ☐ | ☐ | ☐ | | [Gloslab](https://github.com/smiasojed) | [Contracts performance measurement tool proposal](contracts-tool.md) | [GitHub](https://github.com/smiasojed) | ☐ | ☐ | ☐ | | [Nikita Orlov PR](https://github.com/stringnick) | [Faucet chat based bot](faucet-bot.md) | [GitHub](https://github.com/stringnick) | ☐ | ☐ | ☐ | -| [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal Saas Pricing](societal_saas_pricing.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☐ | +| [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal Saas Pricing](societal_saas_pricing.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☒ | | [MASTER UNION LLC.](https://github.com/TheDotflow) | [Dotflow](Dotflow.md) | [GitHub](https://github.com/TheDotflow) | ☐ | ☒ | ☐ | | [Antier Solutions](https://www.antiersolutions.com/) | [RFP/securityMarketPlace](Security_Marketplace.md) | [GitHub](https://github.com/ParthChaudhary31) | ☐ | ☐ | ☐ | -| [SO/DA zone](https://github.com/mfornos) | [Ocelloids Monitoring SDK grant application](ocelloids_monitoring_sdk.md) | [GitHub](https://github.com/mfornos) | ☐ | ☐ | ☐ | +| [SO/DA zone](https://github.com/mfornos) | [Ocelloids Monitoring SDK grant application](ocelloids_monitoring_sdk.md) | [GitHub](https://github.com/mfornos) | ☐ | ☒ | ☒ | | [Antier Solutions Pvt. Ltd.](https://github.com/kulwindersingh-ant)| [Grants webapp](Grant_management_webapp.md) | [GitHub](https://github.com/kulwindersingh-ant) | ☐ | ☐ | ☐ | | [Zaniyar Jahany](https://github.com/Zaniyar/) | [Grantmaster](grantmaster.md) | [GitHub](https://github.com/Zaniyar/plant2earn/) | ☐ | ☐ | ☐ | | [FiDi Tech](https://fidi.tech/) | [FiDi DotSight: Analytics Data Platform for DotSama](fidi-dotsight-analytics.md)| [GitHub](https://github.com/fidi-tech) | ☐ | ☐ | ☐ | From 07e344419b46dafd98af562ec1a7dfedab738252 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Fri, 28 Jul 2023 04:20:49 -0300 Subject: [PATCH 566/578] Update index.md (#1868) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index bdff7366135..1ffd62fe111 100644 --- a/applications/index.md +++ b/applications/index.md @@ -76,7 +76,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Deep Ink Ventures GmbH](https://github.com/deep-ink-ventures) | [Stylograph](Stylograph.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☐ | ☐ | | [Zeeve](https://www.zeeve.io) | [Ink Playground IDE Improvements](ink-playground-ide-improvements.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | | [Scio Labs](https://scio.xyz/) | [XCM Domain Name Service](xcm-domain-service.md) | [GitHub](https://github.com/scio-labs) | ☐ | ☐ | ☐ | -| [Gloslab](https://github.com/smiasojed) | [Contracts performance measurement tool proposal](contracts-tool.md) | [GitHub](https://github.com/smiasojed) | ☐ | ☐ | ☐ | +| [Gloslab](https://github.com/smiasojed) | [Contracts performance measurement tool proposal](contracts-tool.md) | [GitHub](https://github.com/smiasojed) | ☐ | ☒ | ☐ | | [Nikita Orlov PR](https://github.com/stringnick) | [Faucet chat based bot](faucet-bot.md) | [GitHub](https://github.com/stringnick) | ☐ | ☐ | ☐ | | [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal Saas Pricing](societal_saas_pricing.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☒ | | [MASTER UNION LLC.](https://github.com/TheDotflow) | [Dotflow](Dotflow.md) | [GitHub](https://github.com/TheDotflow) | ☐ | ☒ | ☐ | From 7647004cf0850a3f464643fc712aff573cd14ba4 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Fri, 28 Jul 2023 12:07:40 -0300 Subject: [PATCH 567/578] Update index.md to check performance benchmark (#1871) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 1ffd62fe111..29690994ed5 100644 --- a/applications/index.md +++ b/applications/index.md @@ -72,7 +72,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Ed Anderson](https://github.com/eca20) | [Blockchainia](./blockchainia.md) | [GitHub](https://github.com/eca20) | ☐ | ☐ | ☐ | | [CoinFabrik](https://www.coinfabrik.com/) | [ScoutCoinFabrik: Milestone 2](ScoutCoinFabrik_2.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☒ | ☒ | | [Polytope Labs](https://research.polytope.technology/) | [Interoperable State Machine Protocol](ismp.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☒ | ☒ | -| [Talentica Software](https://www.talentica.com/) | [Implementation Benchmarking Milestone 3](ink-pallet-benchmarking-phase-2.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | +| [Talentica Software](https://www.talentica.com/) | [Implementation Benchmarking Milestone 3](ink-pallet-benchmarking-phase-2.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☒ | ☒ | | [Deep Ink Ventures GmbH](https://github.com/deep-ink-ventures) | [Stylograph](Stylograph.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☐ | ☐ | | [Zeeve](https://www.zeeve.io) | [Ink Playground IDE Improvements](ink-playground-ide-improvements.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | | [Scio Labs](https://scio.xyz/) | [XCM Domain Name Service](xcm-domain-service.md) | [GitHub](https://github.com/scio-labs) | ☐ | ☐ | ☐ | From 1db25efd883614cba5203a7e995cbc0213b04804 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Fri, 28 Jul 2023 15:13:17 -0400 Subject: [PATCH 568/578] Update RedStone Network.md (#1870) --- applications/RedStone Network.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/RedStone Network.md b/applications/RedStone Network.md index f6934258d2c..8731b5d6ab4 100644 --- a/applications/RedStone Network.md +++ b/applications/RedStone Network.md @@ -3,6 +3,7 @@ - **Team Name:** Redstone Network - **Payment Address:** 0x24cfc36f699dacc5cb652630ddd894a8df658233 (Ethereum ERC20 USDT) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 +- **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/1093#issuecomment-1624203004) ## Project Overview :page_facing_up: From 05bea6d322ae595bb84fe0d83e059488b6e02fce Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Fri, 28 Jul 2023 15:13:36 -0400 Subject: [PATCH 569/578] Update FuzzLand.md (#1869) --- applications/FuzzLand.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/FuzzLand.md b/applications/FuzzLand.md index 8f7397d813c..9a712bc9370 100644 --- a/applications/FuzzLand.md +++ b/applications/FuzzLand.md @@ -3,6 +3,7 @@ - **Team Name:** FuzzLand - **Payment Address:** 0x3a2a700d9d822D23D3F0F55F4b097753b5B2FC9A (ERC20 DAI/USDT) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 +- **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/1499#issuecomment-1634849391) ## Project Overview :page_facing_up: From 879f18908e07953fbc8681699b98f35ef809307e Mon Sep 17 00:00:00 2001 From: Aviraj Khare <49766964+avirajkhare00@users.noreply.github.com> Date: Sat, 29 Jul 2023 15:32:14 +0530 Subject: [PATCH 570/578] [Aviraj] Amend polkasearch.xyz contract (#1872) --- applications/polkasearch.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/applications/polkasearch.md b/applications/polkasearch.md index 1154ebceabf..9f9d6e5b665 100644 --- a/applications/polkasearch.md +++ b/applications/polkasearch.md @@ -1,7 +1,7 @@ # polkasearch.xyz - **Team Name:** Aviraj Khare -- **Payment Address:** Bitcoin Address: bc1qtr9993ch6zlr29j5c22zzax57h62x5gj24wtxk +- **Payment Address:** USDC(ERC20) Address: 0x123FfB2efB8D74D10d6B3a882A94531D99234B11 - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 ## Project Overview :page_facing_up: @@ -25,7 +25,7 @@ Polkasearch.xyz aims to become a discovery platform where users can discover Gra #### Tech Stack - [Django](https://www.djangoproject.com/): We will be using Django as our Web framework. - - Database: We will be using Postgresql database. + - Database: We will be using managed Postgresql database provided by `railway.app` infrastructure. - Wallet: We will be using polkadot{JS} extension wallet so that user can signup/login in the website by signing a message. #### API Schema @@ -102,7 +102,6 @@ Our project can provide user with earning opportunities, learning material and t - **Contact Name:** Aviraj Khare - **Contact Email:** avirajkhare00@gmail.com -- **Website:** https://avirajkhare00.com ### Legal Structure @@ -121,14 +120,14 @@ Please also provide the GitHub accounts of all team members. If they contain no - https://github.com/avirajkhare00 -### Team LinkedIn Profiles (if available) +### Team LinkedIn Profiles (if available) - https://www.linkedin.com/in/avirajkhare00 ## Development Status :open_book: -Yet to start the development of the project. +Currently working on CI(GitHub Actions) of this project to deploy on [Railway infrastructure](https://railway.app). ## Development Roadmap :nut_and_bolt: @@ -154,9 +153,10 @@ Below we provide an **example roadmap**. In the descriptions, it should be clear | **0b.** | Documentation | We will provide the documentation on the README of the repository. If needed, we will create `docs` directory that would contain in-depth documentation. | | **0c.** | Testing and Testing Guide | Models, Views and Forms will be covered by [`django.test`](https://docs.djangoproject.com/en/4.1/topics/testing/) module which is a sub-module of `unittest`. | | **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | -| 1. | Authentication | User can be authenticated either via traditional web2 username/password or via polkadot extension wallet, web3 based. | -| 2. | CRM for bounties | We will be creating this CRM using Django. Everyone can view a bounty, candidate can apply for bounty and employer can create bounty(ies). | -| 3. | CRM for jobs | We will be creating this CRM using Django. Everyone can view jobs, candidate can apply for a job or multiple jobs, employer can list a job or multiple jobs. | +| 1. | Completion of basic CI/CD pipeline | We will be using GitHub Actions to deploy the site in [Railway's infrastructure](https://railway.app/) so that there could be more transparency. We will be creating different integration and production environment for the deployment so that more and more people could contribute in much seamless manner. +| 2. | Authentication | User can be authenticated either via traditional web2 username/password or via polkadot extension wallet, web3 based. | +| 3. | CRM for bounties | We will be creating this CRM using Django. Everyone can view a bounty, candidate can apply for bounty and employer can create bounty(ies). | +| 4. | CRM for jobs | We will be creating this CRM using Django. Everyone can view jobs, candidate can apply for a job or multiple jobs, employer can list a job or multiple jobs. | ### Milestone 2 From 46947cab4b261de18eea74f8a9bc4b239729da4d Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Tue, 1 Aug 2023 02:07:22 -0400 Subject: [PATCH 571/578] Update index.md (#1876) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 29690994ed5..9a32e40881b 100644 --- a/applications/index.md +++ b/applications/index.md @@ -145,7 +145,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [DIA Data](https://www.diadata.org/) | [Bridgestate Attestation Oracle](DIA_Bridge_Attestation_Oracle.md) | [GitHub](https://github.com/diadata-org/) | ☐ | ☒ | ☐ | | [TogetherCrew](http://www.togethercrew.com/) | [Community Health Check](community-health-check.md) | [GitHub](https://github.com/RnDAO) | ☐ | ☒ | ☐ | | [Decentration](https://www.decentration.org/) | [Supersig Phase 2](./supersig_fellowship.md) | [GitHub](https://github.com/decentration) | ☐ | ☒ | ☒ | -| [Polkadrys Labs](https://github.com/rtomas) | [Open Payroll](./openPayroll.md) | [GitHub](https://github.com/rtomas) | ☐ | ☐ | ☐ | +| [Polkadrys Labs](https://github.com/rtomas) | [Open Payroll](./openPayroll.md) | [GitHub](https://github.com/rtomas) | ☐ | ☒ | ☐ | | [Itering](https://www.itering.io/) | [Solidity Verifier Implementation for Accountable Light Client](./solidity-verifier-for-accountable-light-client.md) | [GitHub](https://github.com/darwinia-network) | ☐ | ☒ | ☐ | [🔝](#2023) From db8cfe4cb565f0bab3a01c52e1531a5559160ba8 Mon Sep 17 00:00:00 2001 From: William Freudenberger Date: Tue, 1 Aug 2023 09:40:29 +0200 Subject: [PATCH 572/578] Centrifuge TWAMM grant application (#1813) * Centrifuge TWAMM grant application * adjust financials * fix: remove PoC * add twamm 2.0 milestone --- applications/centrifuge-twamm.md | 356 +++++++++++++++++++++++++++++++ 1 file changed, 356 insertions(+) create mode 100644 applications/centrifuge-twamm.md diff --git a/applications/centrifuge-twamm.md b/applications/centrifuge-twamm.md new file mode 100644 index 00000000000..d5b66de39bc --- /dev/null +++ b/applications/centrifuge-twamm.md @@ -0,0 +1,356 @@ +# Centrifuge On-Chain Automated Treasury Management + +- **Team Name:** k/factory (former Centrifuge Development Team) +- **Payment Address:** Ethereum(USDC) - 0x2B8A956BF807E22d858dc9AD2eFc30cccc3Ea676 +- **Level:** 🐓 3 + +## Project Overview :page_facing_up: + +### Problem Statement + +The [ongoing discussion](https://forum.polkadot.network/t/statemint-update-roadmap/1200/) about automated market makers (AMMs) in the Statemint roadmap is mainly focused on improving the user and custodian experience by allowing small atomic swaps natively and making Statemint a central hub for asset deposits. This addresses important pain points by enabling transaction fees to be paid in non-native tokens and facilitating interaction with the entire asset variety of the ecosystem without requiring to run custom nodes or infrastructure. + +However, we believe that one aspect has been overlooked: the slow swaps of large volumes, which can be easily front-run or sandwiched. This is particularly relevant in the context of trades proposed through governance for use cases such as +1. Paying out treasury grants, bounties or even [salaries](https://github.com/paritytech/substrate/pull/13378) in less volatile currencies (ie. stablecoins). +2. Enabling parachains to build a DOT reserve which can be used to acquire a parachain lease, pay XCM fees, or [increase availability cores](https://forum.polkadot.network/t/parachain-scaling-by-parablock-splitting/341) during times of high demand (once supported). +3. Governance deciding to invest part of the treasury into a token to diversify their treasury + +What we need is the opposite of what a traditional AMM provides: atomic swaps with immediate execution, even in relatively illiquid assets. A governance vote is unable to time the market and is highly predictable. Therefore, executing such a transaction as a market order on an AMM is problematic, as it will be guaranteed to be front-run. A better solution is to "dollar-cost-average" over a long period of time making it harder for price manipulation to affect the purchase. + + +### Solution + +At Centrifuge, we have researched distinct approaches of how to achieve hard-to-front-run slower transactions. In our opinion, the most elegant solution is [TWAMM (Time Weighted Automated Market Maker](https://www.paradigm.xyz/2021/07/twamm). We are of the firm conviction that the implementation of this model represents the most efficacious approach for executing token swaps in the context of slower and passive procedures, such as governance. + +#### Time Weighted Average Market Maker + +The TWAMM protocol represents a sophisticated advancement of the conventional constant product (Uniswap-v2 style) automated market maker (AMM) framework. It introduces a novel feature wherein users can split their orders into infinitely small fractions and execute them at each block interval. This feature addresses a significant shortcoming of traditional AMMs that encounter severe slippage issues when processing sizable orders, leaving them vulnerable to front-running tactics. + +Furthermore, the inherent risk associated with executing transactions within a single block is nullified by the TWAMM protocol. By segmenting orders into hundreds of small units spread over a prolonged time frame, the slippage rate of the embedded AMM is markedly reduced, and the cost of price manipulation is exponentially elevated. Artificially manipulating prices over multiple blocks creates an opportunity for other traders to exploit the price-inflation tactic, which ultimately undermines the manipulative effort. This innovative solution offers an elegant means of executing large orders even in relatively illiquid markets. It is particularly well-suited for slow automated processes, such as governance-controlled treasury operations, that can effectively implement a dollar-cost averaging strategy over extended periods. + +### Project Details + +This proposal does not aim to build an alternative DEX. Instead, TWAMM will be a feature on top of the Statemine/t DEX, whose logic was renamed to **`pallet-asset-conversion`** ([Substrate PR #12984](https://github.com/paritytech/substrate/pull/12984)) as a result of discussions on the Polkadot forum. While **`pallet-asset-conversion`** will remain independent of our TWAMM pallets, TWAMM expects an embedded AMM interface via the pallet's **`Config`** trait, which will be based on **`pallet-asset-conversion`**, making it easy for any chain implementing **`pallet-asset-conversion`** to add TWAMM to their runtime with minimal overhead. + +To handle the accounting, distribution and claiming of sale proceeds, `pallet-twamm` will use a `Rewards` trait implemented by `pallet-rewards`. The latter trait and pallet is not part of the application we have already developed that under GNU General Public License v3.0. + +![](https://www.plantuml.com/plantuml/svg/VLF1Rjim3BthAtXSYwKVK0H1rnrs6T2XFHP5mCYq8LWI1KbUDXJzzr9ociYhiOjXYEyzFZvATobZp9EpIgNH-80H7MXsWJtv3AyAu1xrE4IUVFUTBSVjLa0Pk8SGEN12kzl1BxJqWsr7_f6xDSxJT4WvOYO1Fur_x-r4wgtjcJ9776Yj8voLOSc9f3FwmQwp7gBKQfSB3ftR6tXMOiLaOIIZlpa7NupF57lKT2L20EeQqXG2ovpfY24OFq0joDIPH_8GqCGaCFeZ4P14OJI1yJqtPynsFdffBKGwOknIO-DnFbbpWLhBG1bwcKTRDAw4hea4NI5zP0UM_I14oL2saFvXJOcYX8iZIOC2s9SjN5riLbayM3fBB_tcupAqdwTk3x4JvVybDnsSoLco-mfJwB3yLGpw3ZHwJTQMO2LJBbgfuLPJfTXwKiy1hQMygPPUOFKcOfeTdy6dl0lSSuProWbq9c5AyjNiVuilmxwmsoiib0hPNo2WL6qCcyskMV9jsK1gIdEQduu_Ohu5uu8b9wylgOlCzkRcGtG9cLcb_CdG0gVko7VbdRy3) + +Please note the following draft spec is subject to change during the implementation. + +#### pallet_twamm + +##### Structs +```rust +/// Exposes information about an existing longterm order. +struct Order { + id: OrderId, + owner: AccountId, + expiration_block: BlockNumber, + sell_rate: AssetBalance, + asset_in: AssetId, + asset_out: AssetId, +} +``` + +##### Storage +```rust +/// Tracks next available order identifier. +type NextOrderId = StorageValue; + +/// Tracks longterm order details. +type LongtermOrders = + StorageMap>; + +/// Tracks order ids per account. +type OrdersOf = + StorageMap>; + +/// Tracks orders to be executed at a specific block. +type OrdersAt = + StorageMap>; +``` + +##### Extrinsics + +```rust +/// Submit a new longterm order. +/// +/// Noop if pool (asset_in, asset_out) does not exist in the configured [`EmbeddedAmm`]. +fn submit_order(origin: Origin, asset_in: CurrencyId, asset_out: CurrencyId, sell_rate: AssetBalance, expiration_block: BlockNumber) -> DispatchResult; + +/// Cancel an existing order. +/// Cleans all storage associated to the order and claims proceeds. +/// +/// Expects origin to be owner of order. +fn cancel_order(origin: Origin, id: OrderId) -> DispatchResult; + +/// Update the `sale_rate` of an existing order. +/// +/// Expects origin to be owner of order. +fn update_order(origin: Origin, id: OrderId, new_rate: AssetBalance) -> DispatchResult; + +/// Withdraw proceeds for the specified account from an order. +/// +/// Can be called anytime after order submission until the order +/// terminated and all proceeds were claimed. +fn withdraw_proceeds_for(origin: Origin, owner: AccountId, id: OrderId) -> DispatchResult; +``` + +#### AMM Traits +```rust +/// Basic AMM trait which exposes buy and sell functionality +trait BasicAmm { + type MaxSwapPathLength; + + /// Swap the exact amount of `asset1` into `asset2`. + /// `amount_out_min` param allows you to specify the min amount of the `asset2` + /// you're happy to receive. + /// + /// [`AssetConversionApi::quote_price_exact_tokens_for_tokens`] runtime call can be called + /// for a quote. + /// + /// NOTE: Implemented by `pallet_conversion_rate::Pallet::` + fn swap_exact_tokens_for_tokens( + path: BoundedVec, + amount_in: AssetBalance, + amount_out_min: AssetBalance, + send_to: AccountId, + keep_alive: bool, + ) -> DispatchResult; + + /// Swap any amount of `asset1` to get the exact amount of `asset2`. + /// `amount_in_max` param allows to specify the max amount of the `asset1` + /// you're happy to provide. + /// + /// [`AssetConversionApi::quote_price_tokens_for_exact_tokens`] runtime call can be called + /// for a quote. + /// + /// NOTE: Implemented by `pallet_conversion_rate::Pallet::` + fn swap_tokens_for_exact_tokens( + path: BoundedVec, + amount_out: AssetBalance, + amount_in_max: AssetBalance, + send_to: AccountId, + keep_alive: bool, + ) -> DispatchResult; +} +``` +```rust +/// Basic AMM API trait which exposes current prices. +/// +/// NOTE: Implemented by pallet_conversion_rate::Pallet:: +trait AssetConversionApi { + /// Provides a quote for [`Pallet::swap_tokens_for_exact_tokens`]. + fn quote_price_tokens_for_exact_tokens(asset1: AssetId, asset2: AssetId, amount: AssetBalance, include_fee: bool) -> Option; + + /// Provides a quote for [`Pallet::swap_exact_tokens_for_tokens`]. + fn quote_price_exact_tokens_for_tokens(asset1: AssetId, asset2: AssetId, amount: AssetBalance, include_fee: bool) -> Option; + + /// Returns the size of the liquidity pool for the given asset pair. + fn get_reserves(asset1: AssetId, asset2: AssetId) -> Option<(Balance, Balance)>; +} +``` + +#### Rewards (for claiming proceeds) + +This interface is based on paper ["Scalable Reward Distribution on Ethereum Blockchain"](https://uploads-ssl.webflow.com/5ad71ffeb79acc67c8bcdaba/5ad8d1193a40977462982470_scalable-reward-distribution-paper.pdf) paper which presents a pull based reward distribution in `O(1)` per staking group, e.g. staked asset. In the context of TWAMM, stakes correspond to the sale rates and rewards to the sale proceeds. The paper assumes static stakes but the idea can be extended for dynamic ones. + +In order to keep the efficient constant proceeds accounting, we envision to map each trading pair `(asset_in, asset_out)` to its unique group such that the overall complexity for accounting rewards is linearly dependent on the sum of sold and bought assets, e.g. `O(#assets_in + assets_out)` which is much lower than `O(#orders)`. Within each of these groups, the accounting is still in `O(1)` and thus independent of the number of stakers. + +##### `Rewards` Trait +```rust +trait Rewards { + /// Check if the group is ready to be rewarded. + /// Most of the cases it means that the group has stake that should be + /// rewarded. + fn is_ready(group: &Group) -> bool; + + /// Reward the group mutating the group entity. + fn reward_group( + group: &mut Group, + amount: Balance, + ) -> Result; + + /// Add stake to the account by mutating the currency and group to achieve + /// that. + fn deposit_stake( + account: &mut Account, + currency: &mut Currency, + group: &mut Group, + amount: Balance, + ) -> DispatchResult; + + /// Remove stake from the account by mutating the currency and group to achieve + /// that. + fn withdraw_stake( + account: &mut Account, + currency: &mut Currency, + group: &mut Group, + amount: Balance, + ) -> DispatchResult; + + /// Compute the reward for the account. + fn compute_reward( + account: &Account, + currency: &Currency, + group: &Group, + ) -> Result; + + /// Claim the reward, mutating the account to reflect this action. + /// Once a reward is claimed, next calls will return 0 until the group will + /// be rewarded again. + fn claim_reward( + account: &mut Account, + currency: &Currency, + group: &Group, + ) -> Result; + + /// Return the balance of an account. + fn account_stake(account: &Account) -> Balance; + + /// Return the balance of a group. + fn group_stake(group: &Group) -> Balance; +} +``` + +##### Reward Structs +```rust +struct Group { + total_stake: Balance, + rpt: Rate +} + +struct StakeAccount { + stake: Balance, + reward_tally: IBalance, +} +``` + +##### Reward Storage +```rust +/// Maps a staked currency to its corresponding proceeds group id and out currency. +type Currencies = StorageMap + +/// Maps group identifiers to their [`Group`]. +type Groups = StorageMap + +/// Maps the pair of a staking account and their staked currency to their current stake and reward tally. +type StakeAccounts = StorageDoubleMap +``` + +### Ecosystem Fit + +> #### Where and how does your project fit into the ecosystem? + +We believe that a comprehensive response to this question can be found in our aforementioned sections on the [Problem Statement](#Problem-Statement) and [Solution](#Solution). In essence, our solution presents a seamless opt-in extension to the pallet-asset-conversion, which can be implemented across various Substrate chains, including the relaychain, to facilitate the operation of a simplified Uniswap V2 decentralized exchange. The proposed TWAMM extension effectively addresses challenges associated with executing large orders, even within relatively illiquid markets. It particularly suits gradual automated procedures, such as treasury operations under governance control, allowing for the efficient implementation of a dollar-cost averaging strategy over extended timeframes. + +> #### Who is your target audience (parachain/dapp/wallet/UI developers, designers, your own user base, some dapp's userbase, yourself)? + +The target audience can be categorized into two distinct groups. Firstly, it caters to Parachain developers seeking to seamlessly integrate the extension on top of pallet-asset-conversion. Secondly, it also appeals to Governance participants of any chain that implements TWAMM. + +> #### What need(s) does your project meet? + +By optimizing the process of diversifying the native treasury in the context of a Multi Asset one, TWAMM empowers parachains to establish a DOT reserve. This reserve can be utilized for various purposes, such as acquiring a parachain lease, covering XCM fees, or enhancing availability cores during periods of high demand (once supported). Furthermore, it facilitates the disbursement of treasury grants, bounties, or even salaries in currencies with lower volatility, such as stablecoins. + +The presence of these features serves as the driving force behind the ongoing endeavor to develop a Multi Asset Treasury. In fact, the significance of this effort was underscored by a dedicated offsite meeting held in March 2023, which involved notable participants such as Gav, Parity developers, and @wischli. During the discussions, a key insight emerged - the inclusion of TWAMM within Multi Asset Treasuries would be a highly advantageous enhancement. This addition would streamline the execution of sizable orders while ensuring a robust level of security, effectively mitigating the risks associated with front-running vulnerabilities. + +> #### Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem? If so, how is your project different? + +The primary contributor to HydraDX, the Galactic Council, is currently developing a tailored version of TWAMM called [DCA](https://github.com/galacticcouncil/HydraDX-node/tree/381182f714b2f7257cced7f2d73a0a93f5239579/pallets/dca) (dollar-cost averaging) within their Omnipool protocol. However, their solution is closely intertwined with Omnipool and is only compatible with it. + +Furthermore, their existing approach involves the execution of trades at regular intervals using the `on_initialize` hook. However, this method faces limitations when it comes to accommodating a significant volume of orders efficiently. In contrast, the TWAMM concept is founded on the principle that long-term orders do not need to be executed periodically. This is because such orders can be calculated effortlessly based on the most recent execution and are ensured to be executed before the regular orders of the embedded AMM. By adopting this approach, the need for frequent periodic executions is eliminated, allowing for streamlined and optimized processing of orders. + +Consequently, integrating their solution into Substrate parachains would involve substantial complexities and overhead. One of our USPs is the seamless and plug-and-play integration we offer for any Substrate chain that implements the straightforward `BasicAmm` interface. This integration can be achieved by utilizing pallet-asset-conversion or any other customized AMM. + +Additionally, Joe Petrowski, the leader of the System Parachain team, envisions our TWAMM solution being incorporated into the Asset Hub, thereby extending the functionalities of both relay chain treasuries. Otherwise, it is highly probable that `pallet-asset-conversion` alone would be utilized, even for slow swaps involving substantial volumes, as a means to diversify the Multi-Asset Treasury of the Relaychain, which is currently under development. Considering that significant swaps involving non-System Parachains by the Polkadot Treasury are unlikely to occur in the foreseeable future (prior to the launch of `SPREE`), we strongly believe that implementing a comprehensive TWAMM solution within the Asset Hub would be a substantial improvement for the ecosystem. Parties with a keen interest in a more efficient implementation may choose to execute transactions through alternative parachains, as discussed in the various [DEX deliberations](https://forum.polkadot.network/t/statemint-update-roadmap/1200). If we dare to dream, we envision our proposed pallets being integrated into the `frame` in the future. + + + + +## Team :busts_in_silhouette: + +### Team members + +- *TWAMM Project Lead & Rust Developer*: William Freudenberger (@wischli) +- *CTO*: Jeroen Offerijns (@offerijns) +- *Technical Product Manager & Rust Developer*: Frederik Gartenmeister (@mustermeiszer) + +### Contact + +- **Contact Name:** William Freudenberger +- **Contact Email:** william@k-f.co +- **Website:** https://k-f.co/ +- **Protocol website**: https://centrifuge.io/ + +### Legal Structure + +- **Registered Address:** k-f dev AG, Grafenauweg 8, 6300 ZUG SWITZERLAND +- **Registered Legal Entity:** k-f dev AG + +### Team's experience + +This grant is proposed by k/factory, a core development contributing to the [Centrifuge](http://centrifuge.io/) project. A team made of experienced Substrate builders and a well established project in the Polkadot/Kusama ecosystem. + +We have already received and successfully delivered multiple grants: + +1. We developed a Go-based RPC library for interacting with Substrate nodes ([GSRPC](https://github.com/centrifuge/go-substrate-rpc-client/)) as a Web3 Foundation grant in [Q3 2019](https://github.com/w3f/Grants-Program/blob/master/applications/index.md#%EF%B8%8F-wave-3---q3-2019) and maintenance coverage as one of the first [Polkadot treasury proposals](https://polkadot.polkassembly.io/motion/12) in Q3 2020. +2. We also built [an early bridge](https://github.com/ChainSafe/ChainBridge) together with ChainSafe in [Q1 2019](https://github.com/w3f/Grants-Program/blob/master/applications/index.md#%EF%B8%8F-wave-1---q1-2019) and [Q1 2020](https://github.com/w3f/Grants-Program/blob/master/applications/index.md#%EF%B8%8F-wave-5---q1-2020) which was funded by a Web3 Foundation grant. +3. Last but not least, [FUDGE](https://github.com/centrifuge/fudge) received a [Polkadot treasury grant](https://polkadot.polkassembly.io/treasury/184) In Q4 2022. This tool provides a simple and generic way to interact with and manipulate the database of a Substrate-based blockchain. + +Moreover, the k/f team has contributed to the Substrate and other related repositories in numerous [pull requests](https://github.com/search?q=user%3Aparitytech+author%3Awischli+author%3Amustermeiszer+author%3Abranan+author%3Anunoalexande+author%3Alemunozm+author%3Amikiquantum+author%3Alucasvo+author%3Aofferijns+author%3Acdamian&type=pullrequests), [new issues](https://github.com/search?q=user%3Aparitytech+author%3Awischli+author%3Amustermeiszer+author%3Abranan+author%3Anunoalexande+author%3Alemunozm+author%3Amikiquantum+author%3Alucasvo+author%3Aofferijns+author%3Acdamian&type=issues) and [discussions](https://forum.polkadot.network/search?expanded=true&q=%40mustermeiszer). We have deep knowledge in distributed/decentralized applications, libp2p, Golang, Solidity and Ethereum overall, zkSNARKs, and tokenization of assets with NFTs and has been developing with Substrate since Summer 2019. + +### Team Code Repos + +- https://github.com/centrifuge/centrifuge-chain +- https://github.com/centrifuge/go-substrate-rpc-client +- https://github.com/centrifuge/go-centrifuge +- https://github.com/centrifuge/fudge + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/william-freudenberger/ +- https://www.linkedin.com/in/jofferijns/ +- https://www.linkedin.com/in/frederik-gartenmeister/ + +## Development Status :open_book: + +Our recent collaboration on the [development of a Multi Asset Treasury](https://github.com/paritytech/polkadot/issues/5293) (e.g. Substrate [#13602,](https://github.com/paritytech/substrate/issues/13602) Substrate [#13608](https://github.com/paritytech/substrate/pull/13608)) has highlighted the necessity of having a non-attackable long-term tokenswap mechanism like TWAMM (e.g. see the [draft for Multi Asset Treasury](https://hackmd.io/@tonyalaribe/SJcR5MTTj#Unresolved-Questions)). Within this context, we have engaged in discussions with the System Parachain team, particularly Joe, who has expressed support for the inclusion of our proposed TWAMM extension onto the Asset Hub. Specifically, the extension would be built upon the existing pallet-asset-conversion implementation. These conversations have provided positive reinforcement for our vision and reinforced the potential value that our solution can bring to the Asset Hub. + +We would like to bring to your attention that we recently presented a similar, albeit more extensive and expansive, proposal to the Polkadot Treasury, which unfortunately did not succeed ([Motion #408](https://polkadot.polkassembly.io/motion/408)). However, we firmly believe that the broader ecosystem would greatly benefit from the availability of a simple, plug-and-play TWAMM extension integrated with the `pallet-asset-conversion`. This would offer an alternative to exclusively routing such trades to specialized chains like HydraDX. Interested parties seeking a more efficient implementation may choose to execute transactions through HydraDX, as extensively discussed in various DEX deliberations. Additionally, Joe Petrowski's endorsement has reaffirmed our belief in this perspective, prompting us to refine our approach. Consequently, we have focused on reducing the overall scope and placing emphasis on developing the minimum required functionality. This approach aims to create a valuable addition to the Asset Hub, as well as an extension for other parachains that adopt the `pallet-asset-conversion` framework or have their own version of a simple constant product formula DEX. + +### About TWAMM in general +* [Original Paper](https://www.paradigm.xyz/2021/07/twamm) +* [Reference implementation in Python](https://github.com/para-dave/twamm) +* [Reference implementation in Solidity](https://github.com/FrankieIsLost/TWAMM) +* [Mathematical details](https://docs.pulsarswap.com/advanced-topics/mathematical-principle-of-twamm) + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 7.5 weeks (286 hours) +- **Full-Time Equivalent (FTE):** 1.5 FTE +- **Total Costs:** 75,000 USD + +### Milestone 1 - TWAMM Pallet + +- **Estimated duration:** 7.5 weeks (286 hours) +- **FTE:** 1.5 +- **Costs:** 75,000 USD + +| Number | Deliverable | Specification | +| ------: | -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** on how to load any metadata into its own registry of chain types. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| **1.** | `pallet_twamm` | Config using `pallet-conversion-rate` as implementor of [`BasicAmm`](#AMM-Traits) trait, [Structs](Structs), [Storage](#Storage) as [above](#pallet_twamm). | +| **2.** | `pallet_twamm` Extrinsics | [Extrinsics](#Extrinsics) as described [above](#pallet_twamm). | +| **3.** | `pallet_twamm` runtime API | Define trait and expose Claimable proceeds for an order as well as aggregated order data for a given asset. | +| **4.** | Benchmark `pallet_twamm` | Add required mocks for `Rewards` and `BasicAmm` and do runtime benchmarks. | +| **5.** | TWAMM 2.0 article | Outline spec and implementation improvements over original version. | + +## Future Plans + +The Centrifuge Protocol aims to be an active user of the TWAMM protocol. If we dare to dream, we envision our proposed pallets being integrated into `frame` in the future. From fd656aefa0b482a1b248a8d884bee2b2f305ec71 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 1 Aug 2023 10:00:08 +0200 Subject: [PATCH 573/578] Update index.md add twamm --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 9a32e40881b..0f801c98b7e 100644 --- a/applications/index.md +++ b/applications/index.md @@ -51,6 +51,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Federico Cicciarella](https://www.linkedin.com/in/federicocicciarella/?originalSubdomain=it) | [Tracking Chain](./tracking_chain.md) | [GitHub](https://github.com/TrackingChains/TrackingChain) | ☐ | ☐ | ☐ | | [TPScore](https://github.com/its-a-setup) | [TPScore](./TPScore.md) | [GitHub](https://github.com/its-a-setup) | ☐ | ☐ | ☐ | | [Orochi Network](https://www.orochi.network/) | [Research and development MPC ECDSA](./orochi-network-orosign-part1.md) | [GitHub](https://github.com/orochi-network) | ☐ | ☐ | ☐ | +| [k/factory](https://k-f.co/) | [On-Chain Automated Treasury Management](./centrifuge-twamm.md) | [GitHub](https://github.com/centrifuge) | ☐ | ☐ | ☐ | [🔝](#2023) From e142f58a1367ed6032eb5fb37da4e44d19d2e688 Mon Sep 17 00:00:00 2001 From: Mark Van de Vyver Date: Wed, 2 Aug 2023 01:18:39 +1000 Subject: [PATCH 574/578] Remove Dockerfile references (#1877) As requested in the milestone review: https://github.com/w3f/Grant-Milestone-Delivery/blob/master/evaluations/tokenomics-survey-2022_3_takahser.md#general-notes The project uses Overleaf to produce the document. --- applications/tokenomics-survey-2022.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/applications/tokenomics-survey-2022.md b/applications/tokenomics-survey-2022.md index 23e8c82b5f7..dbc0148e57a 100644 --- a/applications/tokenomics-survey-2022.md +++ b/applications/tokenomics-survey-2022.md @@ -239,7 +239,7 @@ Initial flow-chart/decision-tree development that will help developers place the | **0a.** | Copyright and Licenses | Creative Commons Attribution 4.0 International License (article), Dual Apache 2 or MIT License (code) | | **0b.** | Documentation/Tutorial | We will provide both **artifacts documentation** of the deliverables and a basic **tutorial** that explains how a user can (for example) execute the code included or can visualize data or use any artifacts included. | | **0c.** | Methodology | Detailed explanation of how the results were achieved and how to reproduce/verify the results. | -| **0d.** | Infrastructure | We will provide the list of all infrastructure requirements (text editors with proper versions, software packages, data packages, etc) that can be used to verify the deliveries with this milestone. LaTeX for article production and Docker files for software execution. | +| **0d.** | Infrastructure | We will provide the list of all infrastructure requirements (text editors with proper versions, software packages, data packages, etc) that can be used to verify the deliveries with this milestone. LaTeX for article production. | | **0e.** | Article | We create a **draft article** (with source code), in the English language. There will be an acknowledgement "This work was supported by a research grant from the Web3 Foundation. The analysis and opinions expressed are the authors and do not reflect the opinions of the Web3 Foundation." | | **0e.1** | - Appendix: Methodology | As described in the methodology section above | | **0e.2** | - Section: Polkadot Parachains | Initial Parachain summary | @@ -258,7 +258,7 @@ Initial flow-chart/decision-tree development that will help developers place the | **0a.** | Copyright and Licenses | Creative Commons Attribution 4.0 International License (article), Dual Apache 2 or MIT License (code) | | **0b.** | Documentation/Tutorial | We will update both **artifacts documentation** of the deliverables and a basic **tutorial** that explains how a user can (for example) execute the code included or can visualize data or use any artifacts included. | | **0c.** | Methodology | Update the detailed explanation of how the results were achieved and how to reproduce/verify the results. | -| **0d.** | Infrastructure | We will update the list of all infrastructure requirements (text editors with proper versions, software packages, data packages, etc) that can be used to verify the deliveries with this milestone. LaTeX for article production and Docker files for software execution. | +| **0d.** | Infrastructure | We will update the list of all infrastructure requirements (text editors with proper versions, software packages, data packages, etc) that can be used to verify the deliveries with this milestone. LaTeX for article production. | | **0e.** | Article | We will send a **draft article** (with source code), in the English language. There will be an acknowledgement "This work was supported by a research grant from the Web3 Foundation. The analysis and opinions expressed are the authors and do not reflect the opinions of the Web3 Foundation."| | **0e.1** | Article | We will publish an **working paper** as indicated above. | | **0e.2** | - Section: Published models | Initial annotated bibliography | @@ -288,7 +288,7 @@ The report/working paper will be posted to [SSRN (e.g. FEN - Cryptocurrency Rese | **0a.** | Copyright and Licenses | Creative Commons Attribution 4.0 International License (article), Dual Apache 2 or MIT License (code) | | **0b.** | Documentation/Tutorial | We will update both **artifacts documentation** of the deliverables and a basic **tutorial** that explains how a user can (for example) execute the code included or can visualize data or use any artifacts included. | | **0c.** | Methodology | Update the detailed explanation of how the results were achieved and how to reproduce/verify the results. | -| **0d.** | Infrastructure | We will update the list of all infrastructure requirements (text editors with proper versions, software packages, data packages, etc) that can be used to verify the deliveries with this milestone. LaTeX for article production and Docker files for software execution. | +| **0d.** | Infrastructure | We will update the list of all infrastructure requirements (text editors with proper versions, software packages, data packages, etc) that can be used to verify the deliveries with this milestone. LaTeX for article production. | | **0e** | Article | We will update a **draft article** (with source code), in the English language. There will be an acknowledgement "This work was supported by a research grant from the Web3 Foundation. The analysis and opinions expressed are the authors and do not reflect the opinions of the Web3 Foundation."| | **0e.1** | - Section: Introduction | Place the topic in perspective and motivate non-specialist readers. Text and tables where relevant/appropriate. | | **0e.2** | - Section: Published models | Update annotated bibliography | From 2470d584ef989756fbd516d044590218aff7ba7a Mon Sep 17 00:00:00 2001 From: Noc2 Date: Wed, 2 Aug 2023 17:04:22 +0200 Subject: [PATCH 575/578] Update status of move rfps --- .../{Open => Under Development}/move_smart_contract_pallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename docs/RFPs/{Open => Under Development}/move_smart_contract_pallet.md (91%) diff --git a/docs/RFPs/Open/move_smart_contract_pallet.md b/docs/RFPs/Under Development/move_smart_contract_pallet.md similarity index 91% rename from docs/RFPs/Open/move_smart_contract_pallet.md rename to docs/RFPs/Under Development/move_smart_contract_pallet.md index 5413f47dbdc..9cc79f499e5 100644 --- a/docs/RFPs/Open/move_smart_contract_pallet.md +++ b/docs/RFPs/Under Development/move_smart_contract_pallet.md @@ -1,5 +1,5 @@ # Move Smart Contract Pallet -* **Status:** Open +* **Status:** [Under Development](https://github.com/w3f/Grants-Program/blob/master/applications/Substrate_Move_System_Pallet_1.md) * **Proposer:** [David Hawig](https://github.com/Noc2) ## Project Description :page_facing_up: From f7287312b31e8f7820bb4e22ee2eded835b91323 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Wed, 2 Aug 2023 17:05:33 +0200 Subject: [PATCH 576/578] Update status of move rfps --- docs/rfps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/rfps.md b/docs/rfps.md index d6872f13d6e..fe678c51980 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -28,7 +28,6 @@ If you find an open RFP here that you think you can address, feel free to [submi | [bpf-contracts.md](RFPs/Open/bpf-contracts.md) | 06.01.2023 | | [formal_guarantees_for_grandpa.md](RFPs/Open/formal_guarantees_for_grandpa.md) | 07.10.2022 | | [ISO_20022.md](RFPs/Open/ISO_20022.md) | 31.05.2022 | -| [move_smart_contract_pallet.md](RFPs/Open/move_smart_contract_pallet.md) | 22.12.2022 | | [parachain_validation_conformance_testing.md](RFPs/Open/parachain_validation_conformance_testing.md) | 18.01.2023 | | [polkadot-protocol_conformance_tests.md](RFPs/Open/polkadot-protocol_conformance_tests.md) | 08.05.2023 | | [sub-consensus.md](RFPs/Open/sub-consensus.md) | 23.11.2021 | @@ -55,6 +54,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [implementation-benchmarking.md](RFPs/Under%20Development/implementation-benchmarking.md) | 06.06.2023 | | [ink!_smart_contract_block_explorer.md](RFPs/Under%20Development/ink_smart_contract_block_explorer.md) | 05.07.2021 | | [ISO_8583.md](RFPs/Open/ISO_8583.md) | 31.05.2022 | +| [move_smart_contract_pallet.md](RFPs/Under%20Development/move_smart_contract_pallet.md) | 02.08.2023 | | [multi-chain-block-explorer.md](RFPs/Under%20Development/multi-chain-block-explorer.md) | 23.11.2021 | | [privacy-enhancement-polkadot-extension.md](RFPs/Under%20Development/privacy-enhancement-polkadot-extension.md) | 27.05.22 | | [raft-validators.md](RFPs/Under%20Development/raft-validators.md) | 23.05.2023 | From bbced8d511b01dbb9fa51809aacc965beeb43d81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 2 Aug 2023 18:27:39 +0200 Subject: [PATCH 577/578] Update rfps.md Fix internal link --- docs/rfps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/rfps.md b/docs/rfps.md index fe678c51980..b677a114da8 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -66,7 +66,7 @@ If you find an open RFP here that you think you can address, feel free to [submi -
🔴 Closed: This RFP is either closed, on hold, or no longer useful. However, if it’s implemented and not maintained, we would be interested in signing a [maintenance grant](maintenance.md). +
🔴 Closed: This RFP is either closed, on hold, or no longer useful. However, if it’s implemented and not maintained, we would be interested in signing a maintenance grant. | RFP | Last Updated | | :-- | :----------: | From 4011a7474d3f77c9ea4205fc0ab871a5f354f254 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Thu, 3 Aug 2023 10:03:00 -0300 Subject: [PATCH 578/578] Update index.md (#1881) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 0f801c98b7e..fdc059b19df 100644 --- a/applications/index.md +++ b/applications/index.md @@ -60,7 +60,7 @@ Use this page for an overview of all public grants and their status. Use the sid | Team | Project | Link | Terminated | First Delivery | Completed | | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------| :--------- | :------------: | :--------: | | [Interstellar](https://www.interstellar.gg/) | [Interstellar - Wallet Phase 2](./Interstellar-network2.md) | [GitHub](https://github.com/Interstellar-Network) | ☐ | ☐ | ☐ | -| [Valletech AB](https://valletech.eu/) | [DINFRA](./DINFRA.md) | [GitHub](https://gitlab.com/polkawatch) | ☐ | ☐ | ☐ | +| [Valletech AB](https://valletech.eu/) | [DINFRA](./DINFRA.md) | [GitHub](https://gitlab.com/polkawatch) | ☐ | ☒ | ☐ | | [DAuth](https://github.com/DAuth-Network) | [DAuth](./dauth_network.md) | [GitHub](https://github.com/DAuth-Network) | ☐ | ☐ | ☐ | | [Galaxy.Do](https://galaxy.do) | [Galaxy: Three-dimensional Web for Polkadot Users](./galaxy.md) | [GitHub](https://github.com/7flash) | ☐ | ☒ | ☐ | | [Web3 Labs Ltd](https://www.web3labs.com/) | [Sirato (Epirus) Substrate Explorer - Phase III](./sirato_substrate_phase3.md) | [GitHub](https://github.com/web3labs) | ☐ | ☒ | ☒ |