diff --git a/integrationTests/go/cryptoPayment_test.go b/integrationTests/go/cryptoPayment_test.go
index 2726365..70e208d 100644
--- a/integrationTests/go/cryptoPayment_test.go
+++ b/integrationTests/go/cryptoPayment_test.go
@@ -11,7 +11,7 @@ import (
"github.com/stretchr/testify/require"
)
-const functionGetRequests = "getRequests"
+const functionGetCredits = "getCredits"
var log = logger.GetOrCreate("integrationTests")
@@ -293,7 +293,7 @@ func checkCredits(ctx context.Context, service *framework.CryptoPaymentService,
result := service.ChainSimulator.ExecuteVMQuery(
ctx,
service.ContractAddress,
- functionGetRequests,
+ functionGetCredits,
[]string{
hex.EncodeToString(big.NewInt(int64(id)).Bytes()),
},
diff --git a/integrationTests/go/e2e_test.go b/integrationTests/go/e2e_test.go
index 85677d2..f0c5a13 100644
--- a/integrationTests/go/e2e_test.go
+++ b/integrationTests/go/e2e_test.go
@@ -103,7 +103,7 @@ func TestCreateFreeUserAndCreateKeyAndTestRequestsAreThrottledThenSwitchToPremiu
// Generate a block to ensure any pending txs (from balanceProcessor) are processed
cryptoPaymentService.ChainSimulator.GenerateBlocks(ctx, 1)
- reqs := session.GetNumberOfRequests()
+ reqs := session.GetCredits()
return reqs >= 50
}, 2*time.Minute, 1*time.Second)
log.Info("Done ✓")
diff --git a/integrationTests/go/framework/common.go b/integrationTests/go/framework/common.go
index 3dde0f2..19c8326 100644
--- a/integrationTests/go/framework/common.go
+++ b/integrationTests/go/framework/common.go
@@ -15,7 +15,7 @@ const CallGasLimit = 3000000
func GetContractPath(contractName string) string {
currentDir := traverse("integrationTests")
- return filepath.Join(currentDir, "requests-contract", "output", contractName, contractName+".wasm")
+ return filepath.Join(currentDir, "contracts", contractName, contractName+".wasm")
}
// GetProxyRootPath returns the absolute path to the proxy service root path
diff --git a/integrationTests/go/framework/cryptoPaymentService.go b/integrationTests/go/framework/cryptoPaymentService.go
index ea51327..80e9c36 100644
--- a/integrationTests/go/framework/cryptoPaymentService.go
+++ b/integrationTests/go/framework/cryptoPaymentService.go
@@ -47,22 +47,22 @@ func NewCryptoPaymentService(tb testing.TB) *CryptoPaymentService {
}
// Setup prepares the environment
-func (crs *CryptoPaymentService) Setup(ctx context.Context, numRequestsPerEGLD int64) {
+func (crs *CryptoPaymentService) Setup(ctx context.Context, creditsPerEGLD int64) {
log.Info("minting tokens to the users")
crs.ChainSimulator.FundWallets(ctx, crs.Keys.WalletsToFundOnMultiversX())
log.Info("deploying contract")
address, _, txOnNetwork := crs.ChainSimulator.DeploySC(
ctx,
- GetContractPath("requests"),
+ GetContractPath("credits"),
crs.Keys.OwnerKeys.MvxSk,
deployGasLimit,
[]string{
- hex.EncodeToString(big.NewInt(numRequestsPerEGLD).Bytes()),
+ hex.EncodeToString(big.NewInt(creditsPerEGLD).Bytes()),
},
)
- log.Info("deployed the requests contract", "address", address.Bech32(), "txHash", txOnNetwork.Hash)
+ log.Info("deployed the credits contract", "address", address.Bech32(), "txHash", txOnNetwork.Hash)
crs.ContractAddress = address
}
diff --git a/integrationTests/go/framework/downloader.go b/integrationTests/go/framework/downloader.go
new file mode 100644
index 0000000..e927cdd
--- /dev/null
+++ b/integrationTests/go/framework/downloader.go
@@ -0,0 +1,130 @@
+package framework
+
+import (
+ "archive/zip"
+ "fmt"
+ "io"
+ "net/http"
+ "os"
+ "path/filepath"
+ "strings"
+)
+
+const (
+ contractCreditsVersionTag = "v1.0.0"
+ contractCreditsURL = "https://github.com/iulianpascalau/credits-contract-rs/releases/download/" + contractCreditsVersionTag + "/credits-contract.zip"
+)
+
+func init() {
+ if !IsChainSimulatorIsRunning() {
+ return
+ }
+ err := ensureContractCredits()
+ if err != nil {
+ fmt.Printf("WARNING: Failed to ensure credits contract: %v\n", err)
+ // We deliberately panic here because if we can't get the contract, tests will fail anyway
+ panic(err)
+ }
+}
+
+func ensureContractCredits() error {
+ root := traverse("integrationTests")
+ extractTarget := filepath.Join(root, "contracts")
+ contractDir := filepath.Join(extractTarget, "credits")
+ contractPath := filepath.Join(contractDir, "credits.wasm")
+
+ if _, err := os.Stat(contractPath); err == nil {
+ // Contract exists. We could check versioning (e.g. hash) but for now existence matches intent.
+ return nil
+ }
+
+ fmt.Printf("Downloading credits contract from %s...\n", contractCreditsURL)
+ resp, err := http.Get(contractCreditsURL)
+ if err != nil {
+ return fmt.Errorf("failed to download contract: %w", err)
+ }
+ defer func() {
+ _ = resp.Body.Close()
+ }()
+
+ if resp.StatusCode != http.StatusOK {
+ return fmt.Errorf("bad status: %s", resp.Status)
+ }
+
+ // Create temp file
+ tmpFile, err := os.CreateTemp("", "credits-contract-*.zip")
+ if err != nil {
+ return fmt.Errorf("failed to create temp file: %w", err)
+ }
+ defer func() {
+ _ = os.Remove(tmpFile.Name())
+ }()
+
+ _, err = io.Copy(tmpFile, resp.Body)
+ if err != nil {
+ return fmt.Errorf("failed to write temp file: %w", err)
+ }
+ _ = tmpFile.Close()
+
+ // Unzip
+ r, err := zip.OpenReader(tmpFile.Name())
+ if err != nil {
+ return fmt.Errorf("failed to open zip reader: %w", err)
+ }
+ defer func() {
+ _ = r.Close()
+ }()
+
+ err = os.MkdirAll(extractTarget, 0755)
+
+ if err != nil {
+ return fmt.Errorf("failed to create target dir: %w", err)
+ }
+
+ for _, f := range r.File {
+ fpath := filepath.Join(extractTarget, f.Name)
+
+ // ZipSlip check
+ if !strings.HasPrefix(fpath, filepath.Clean(extractTarget)+string(os.PathSeparator)) {
+ return fmt.Errorf("illegal file path: %s", fpath)
+ }
+
+ if f.FileInfo().IsDir() {
+ err = os.MkdirAll(fpath, os.ModePerm)
+ if err != nil {
+ return err
+ }
+ continue
+ }
+
+ err = os.MkdirAll(filepath.Dir(fpath), os.ModePerm)
+ if err != nil {
+ return err
+ }
+
+ var outFile *os.File
+ outFile, err = os.OpenFile(fpath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode())
+ if err != nil {
+ return err
+ }
+
+ var rc io.ReadCloser
+ rc, err = f.Open()
+ if err != nil {
+ _ = outFile.Close()
+ return err
+ }
+
+ _, err = io.Copy(outFile, rc)
+
+ _ = outFile.Close()
+ _ = rc.Close()
+
+ if err != nil {
+ return err
+ }
+ }
+
+ fmt.Println("Successfully downloaded and extracted credits contract.")
+ return nil
+}
diff --git a/integrationTests/go/framework/testSession.go b/integrationTests/go/framework/testSession.go
index d6fd63f..f6a1743 100644
--- a/integrationTests/go/framework/testSession.go
+++ b/integrationTests/go/framework/testSession.go
@@ -180,7 +180,8 @@ func (session *testSession) GetDepositAddress() string {
return session.depositAddress
}
-func (session *testSession) GetNumberOfRequests() int {
+// GetCredits returns the number of credits
+func (session *testSession) GetCredits() int {
req, _ := http.NewRequest(http.MethodGet, session.baseAddress+api.EndpointApiCryptoPaymentAccount, nil)
req.Header.Set("Authorization", "Bearer "+session.jwtToken)
client := &http.Client{}
@@ -197,11 +198,11 @@ func (session *testSession) GetNumberOfRequests() int {
var acc map[string]interface{}
_ = json.NewDecoder(resp.Body).Decode(&acc)
- // Check numberOfRequests. Should be around 50 (0.5 EGLD * 100 requests/EGLD)
- reqs, ok := acc["numberOfRequests"].(float64)
+ // Check credits
+ credits, ok := acc["credits"].(float64)
if !ok {
return -1
}
- return int(reqs)
+ return int(credits)
}
diff --git a/requests-contract/.gitignore b/requests-contract/.gitignore
deleted file mode 100644
index 4d2dff6..0000000
--- a/requests-contract/.gitignore
+++ /dev/null
@@ -1,18 +0,0 @@
-# Rust
-/target/
-
-**/*.rs.bk
-
-# IDE
-.vscode/
-.idea/
-*.swp
-*.swo
-*~
-.DS_Store
-
-# Environment
-.env
-.env.local
-wallet.pem
-*.key
\ No newline at end of file
diff --git a/requests-contract/AUDIT_AND_SPECS.md b/requests-contract/AUDIT_AND_SPECS.md
deleted file mode 100644
index fa3c6cc..0000000
--- a/requests-contract/AUDIT_AND_SPECS.md
+++ /dev/null
@@ -1,106 +0,0 @@
-This document details the specifications and audit results for the `RequestsContract` smart contract designed for the MultiversX blockchain.
-
-## 1. Contract Overview
-
-**Name:** Requests Contract
-**Purpose:** To allow users to purchase "acquired requests" using EGLD based on a configurable exchange rate.
-**Platform:** MultiversX (Rust Framework)
-**Roles:**
-* **Owner:** Has exclusive rights to change the exchange rate, pause/unpause the contract, and withdraw funds.
-* **User:** Can purchase requests by sending EGLD to the `addRequests` endpoint.
-
-## 2. Technical Specifications
-
-### 2.1 Storage Mappers
-* `numRequestsPerEgld` (`SingleValueMapper
`): Stores the current exchange rate (requests per 1 EGLD).
-* `acquiredRequests` (`SingleValueMapper`): Map storing the total requests purchased for a specific `id` (u64).
-* `isPaused` (`SingleValueMapper`): Boolean flag indicating if the contract is currently paused.
-
-### 2.2 Endpoints
-
-#### `init`
-* **Input:** `num_requests_per_egld` (BigUint)
-* **Logic:**
- * Sets the initial exchange rate.
- * Initializes `isPaused` to `false`.
- * **Constraint:** `num_requests_per_egld` must be > 0.
-
-#### `upgrade`
-* **Input:** `num_requests_per_egld` (BigUint)
-* **Logic:**
- * Updates the exchange rate.
- * Preserves the existing `isPaused` state if set; otherwise defaults to `false`.
- * **Constraint:** `num_requests_per_egld` must be > 0.
-
-#### `addRequests` (Payable)
-* **Input:** `id` (u64)
-* **Payment:** EGLD
-* **Logic:**
- * Checks if contract is paused.
- * Calculates requests: `(payment_wei * rate) / 10^18`.
- * Updates `acquiredRequests` for the given `id`.
- * Emits `addRequests` event.
- * **Constraints:**
- * Contract must not be paused.
- * Payment > 0.
-
-#### `changeNumRequestsPerEGLD`
-* **Input:** `new_num_requests_per_egld` (BigUint)
-* **Logic:**
- * Updates the exchange rate.
- * Emits `changeNumRequestsPerEGLD` event.
- * **Constraints:**
- * Caller must be Owner.
- * New rate must be > 0.
-
-#### `pause` / `unpause`
-* **Logic:** Toggles the `isPaused` storage.
-* **Constraints:**
- * Caller must be Owner.
- * Cannot pause if already paused (and vice versa).
-
-#### `withdrawAll`
-* **Logic:** Sends entire EGLD balance to the Owner.
-* **Constraints:**
- * Caller must be Owner.
- * Balance > 0.
-
-#### `getRequests` (View)
-* **Input:** `id` (u64)
-* **Output:** Returns the count of requests for the ID.
-
-## 3. Security Audit & Findings
-
-### 3.1 Arithmetic Precision
-* **Status:** **SECURE** (Fixed)
-* **Details:** The contract originally calculated requests as `(amount / 10^18) * rate`, which caused significant precision loss for fractional EGLD amounts. This was patched to `(amount * rate) / 10^18`.
-* **Recommendation:** No further action.
-
-### 3.2 Access Control
-* **Status:** **SECURE**
-* **Details:** Critical functions (`changeNumRequestsPerEGLD`, `pause`, `unpause`, `withdrawAll`) properly enforce `require!(caller == owner)`.
-
-### 3.3 Re-entrancy
-* **Status:** **SECURE**
-* **Details:** The only external call is the EGLD transfer in `withdrawAll` to the owner. Since this is the final step and state variables are not modified after the transfer, re-entrancy risks are minimal.
-
-### 3.4 Logic Constraints
-* **Status:** **SECURE**
-* **Details:**
- * `init` and `upgrade` enforce non-zero rates to prevent division/logic errors.
- * `addRequests` enforces non-zero payments.
- * `pause` mechanism correctly blocks deposits.
-
-### 3.5 Upgrade Safety
-* **Status:** **NOTE**
-* **Details:** The `upgrade` function resets the rate. Owners must be careful to pass the correct (current or new) rate during upgrades to avoid accidental rate changes. It safely handles the `isPaused` flag initialization for older versions of the contract state.
-
-## 4. Recommendations and Improvements
-
-1. **Rate Limiting / Caps (Optional):** Currently, there is no upper limit on the number of requests a single ID can accumulate. If `requests` represent a resource liability, consider adding a cap.
-2. **Event Data:** The `addRequests` event indexes `id` and `egld_amount`. This is good practice. The `requests_added` is also included, allowing full off-chain reconstruction of the state.
-
-## 5. Conclusion
-The `RequestsContract` contains robust logic with appropriate access controls and safeguards. The identification and repair of the arithmetic precision bug was the primary critical finding, which has been resolved and verified via tests.
-
-**Verdict:** The contract is structurally sound and ready for deployment.
diff --git a/requests-contract/Cargo.lock b/requests-contract/Cargo.lock
deleted file mode 100644
index 668b64c..0000000
--- a/requests-contract/Cargo.lock
+++ /dev/null
@@ -1,1187 +0,0 @@
-# This file is automatically @generated by Cargo.
-# It is not intended for manual editing.
-version = 4
-
-[[package]]
-name = "anstream"
-version = "0.6.21"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a"
-dependencies = [
- "anstyle",
- "anstyle-parse",
- "anstyle-query",
- "anstyle-wincon",
- "colorchoice",
- "is_terminal_polyfill",
- "utf8parse",
-]
-
-[[package]]
-name = "anstyle"
-version = "1.0.13"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78"
-
-[[package]]
-name = "anstyle-parse"
-version = "0.2.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2"
-dependencies = [
- "utf8parse",
-]
-
-[[package]]
-name = "anstyle-query"
-version = "1.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc"
-dependencies = [
- "windows-sys 0.61.2",
-]
-
-[[package]]
-name = "anstyle-wincon"
-version = "3.0.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d"
-dependencies = [
- "anstyle",
- "once_cell_polyfill",
- "windows-sys 0.61.2",
-]
-
-[[package]]
-name = "anyhow"
-version = "1.0.100"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61"
-
-[[package]]
-name = "arrayvec"
-version = "0.7.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
-
-[[package]]
-name = "autocfg"
-version = "1.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
-
-[[package]]
-name = "base64"
-version = "0.22.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
-
-[[package]]
-name = "base64ct"
-version = "1.8.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06"
-
-[[package]]
-name = "bech32"
-version = "0.11.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "32637268377fc7b10a8c6d51de3e7fba1ce5dd371a96e342b34e6078db558e7f"
-
-[[package]]
-name = "bitflags"
-version = "2.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd"
-
-[[package]]
-name = "block-buffer"
-version = "0.10.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
-dependencies = [
- "generic-array 0.14.7",
-]
-
-[[package]]
-name = "bumpalo"
-version = "3.19.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510"
-
-[[package]]
-name = "cfg-if"
-version = "1.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
-
-[[package]]
-name = "clap"
-version = "4.5.54"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c6e6ff9dcd79cff5cd969a17a545d79e84ab086e444102a591e288a8aa3ce394"
-dependencies = [
- "clap_builder",
- "clap_derive",
-]
-
-[[package]]
-name = "clap_builder"
-version = "4.5.54"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fa42cf4d2b7a41bc8f663a7cab4031ebafa1bf3875705bfaf8466dc60ab52c00"
-dependencies = [
- "anstream",
- "anstyle",
- "clap_lex",
- "strsim",
-]
-
-[[package]]
-name = "clap_derive"
-version = "4.5.49"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671"
-dependencies = [
- "heck",
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "clap_lex"
-version = "0.7.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32"
-
-[[package]]
-name = "colorchoice"
-version = "1.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75"
-
-[[package]]
-name = "colored"
-version = "3.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fde0e0ec90c9dfb3b4b1a0891a7dcd0e2bffde2f7efed5fe7c9bb00e5bfb915e"
-dependencies = [
- "windows-sys 0.59.0",
-]
-
-[[package]]
-name = "const-oid"
-version = "0.9.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"
-
-[[package]]
-name = "convert_case"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "baaaa0ecca5b51987b9423ccdc971514dd8b0bb7b4060b983d3664dad3f1f89f"
-dependencies = [
- "unicode-segmentation",
-]
-
-[[package]]
-name = "cpufeatures"
-version = "0.2.17"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
-dependencies = [
- "libc",
-]
-
-[[package]]
-name = "crypto-common"
-version = "0.1.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a"
-dependencies = [
- "generic-array 0.14.7",
- "typenum",
-]
-
-[[package]]
-name = "curve25519-dalek"
-version = "4.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be"
-dependencies = [
- "cfg-if",
- "cpufeatures",
- "curve25519-dalek-derive",
- "digest",
- "fiat-crypto",
- "rustc_version",
- "subtle",
- "zeroize",
-]
-
-[[package]]
-name = "curve25519-dalek-derive"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "der"
-version = "0.7.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb"
-dependencies = [
- "const-oid",
- "zeroize",
-]
-
-[[package]]
-name = "digest"
-version = "0.10.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
-dependencies = [
- "block-buffer",
- "crypto-common",
-]
-
-[[package]]
-name = "ed25519"
-version = "2.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53"
-dependencies = [
- "pkcs8",
- "signature",
-]
-
-[[package]]
-name = "ed25519-dalek"
-version = "2.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9"
-dependencies = [
- "curve25519-dalek",
- "ed25519",
- "serde",
- "sha2",
- "subtle",
- "zeroize",
-]
-
-[[package]]
-name = "either"
-version = "1.15.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
-
-[[package]]
-name = "endian-type"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d"
-
-[[package]]
-name = "equivalent"
-version = "1.0.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
-
-[[package]]
-name = "fiat-crypto"
-version = "0.2.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d"
-
-[[package]]
-name = "foldhash"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
-
-[[package]]
-name = "generic-array"
-version = "0.14.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
-dependencies = [
- "typenum",
- "version_check",
-]
-
-[[package]]
-name = "generic-array"
-version = "1.3.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eaf57c49a95fd1fe24b90b3033bee6dc7e8f1288d51494cb44e627c295e38542"
-dependencies = [
- "rustversion",
- "typenum",
-]
-
-[[package]]
-name = "getrandom"
-version = "0.2.17"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0"
-dependencies = [
- "cfg-if",
- "libc",
- "wasi",
-]
-
-[[package]]
-name = "hashbrown"
-version = "0.15.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
-dependencies = [
- "foldhash",
- "serde",
-]
-
-[[package]]
-name = "hashbrown"
-version = "0.16.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
-
-[[package]]
-name = "heck"
-version = "0.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
-
-[[package]]
-name = "hex"
-version = "0.4.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
-
-[[package]]
-name = "hex-literal"
-version = "0.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46"
-
-[[package]]
-name = "indexmap"
-version = "2.13.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017"
-dependencies = [
- "equivalent",
- "hashbrown 0.16.1",
- "serde",
- "serde_core",
-]
-
-[[package]]
-name = "is_terminal_polyfill"
-version = "1.70.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695"
-
-[[package]]
-name = "itertools"
-version = "0.14.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285"
-dependencies = [
- "either",
-]
-
-[[package]]
-name = "itoa"
-version = "1.0.17"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2"
-
-[[package]]
-name = "keccak"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654"
-dependencies = [
- "cpufeatures",
-]
-
-[[package]]
-name = "lazy_static"
-version = "1.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
-
-[[package]]
-name = "leb128fmt"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2"
-
-[[package]]
-name = "libc"
-version = "0.2.180"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc"
-
-[[package]]
-name = "log"
-version = "0.4.29"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
-
-[[package]]
-name = "memchr"
-version = "2.7.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273"
-
-[[package]]
-name = "multiversx-chain-core"
-version = "0.14.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "73f1f0526ca094185847776c2c03de97ea082743ee4e6f799860ad67e7d78250"
-dependencies = [
- "bitflags",
- "multiversx-sc-codec",
-]
-
-[[package]]
-name = "multiversx-chain-scenario-format"
-version = "0.23.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e688a0d32a5873871cd19224186ecbfaa0b26f7c8ec62f0ca35d7ee9d4616b40"
-dependencies = [
- "bech32",
- "hex",
- "num-bigint",
- "num-traits",
- "serde",
- "serde_json",
- "sha3",
-]
-
-[[package]]
-name = "multiversx-chain-vm"
-version = "0.14.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6d9e0408c341bbd1d73365b2dd8a96b0c2a41f9458d3dc3519f64275754e7971"
-dependencies = [
- "bitflags",
- "colored",
- "ed25519-dalek",
- "hex",
- "hex-literal",
- "itertools",
- "multiversx-chain-core",
- "multiversx-chain-vm-executor",
- "num-bigint",
- "num-traits",
- "rand",
- "rand_seeder",
- "sha2",
- "sha3",
-]
-
-[[package]]
-name = "multiversx-chain-vm-executor"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "51cce7ae386960fbf5e85afe40ca16d63f926f0620ed1a36b019212b28e17219"
-
-[[package]]
-name = "multiversx-sc"
-version = "0.57.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "20602d4fc336092faadc03b6b445c4bb5e4dbc4c86fb53726e46eca67070813a"
-dependencies = [
- "bitflags",
- "generic-array 1.3.5",
- "hex-literal",
- "multiversx-chain-core",
- "multiversx-sc-codec",
- "multiversx-sc-derive",
- "num-traits",
- "unwrap-infallible",
-]
-
-[[package]]
-name = "multiversx-sc-codec"
-version = "0.22.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "43e0f24a020adf32faffae1c57475c6b7285a3216d1a36e4a73617639721c2e0"
-dependencies = [
- "arrayvec",
- "bitflags",
- "multiversx-sc-codec-derive",
- "num-bigint",
- "unwrap-infallible",
-]
-
-[[package]]
-name = "multiversx-sc-codec-derive"
-version = "0.22.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7c5f17d5ee23657d5cddc7f4471925b5a49f7e25306f8bba656ea6917acc629d"
-dependencies = [
- "hex",
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "multiversx-sc-derive"
-version = "0.57.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0d44d08d3376c199e8c391cc07752d2822cd289693da5319d7905599501e557f"
-dependencies = [
- "hex",
- "proc-macro2",
- "quote",
- "radix_trie",
- "syn",
-]
-
-[[package]]
-name = "multiversx-sc-meta-lib"
-version = "0.57.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "438149f455382e64d1d383b2cb5bee144c215d2943d6a0ae06a50d3225680fbb"
-dependencies = [
- "clap",
- "colored",
- "convert_case",
- "hex",
- "lazy_static",
- "multiversx-sc",
- "rustc_version",
- "semver",
- "serde",
- "serde_json",
- "toml",
- "wasmparser 0.227.1",
- "wasmprinter",
- "wat",
-]
-
-[[package]]
-name = "multiversx-sc-scenario"
-version = "0.57.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2a96dfc78030fec0f05928d2fa0334d1eeaaac2df3b819182876e402461e8c7e"
-dependencies = [
- "base64",
- "bech32",
- "colored",
- "hex",
- "itertools",
- "log",
- "multiversx-chain-scenario-format",
- "multiversx-chain-vm",
- "multiversx-chain-vm-executor",
- "multiversx-sc",
- "multiversx-sc-meta-lib",
- "num-bigint",
- "num-traits",
- "pathdiff",
- "serde",
- "serde_json",
- "sha2",
- "unwrap-infallible",
-]
-
-[[package]]
-name = "nibble_vec"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43"
-dependencies = [
- "smallvec",
-]
-
-[[package]]
-name = "num-bigint"
-version = "0.4.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"
-dependencies = [
- "num-integer",
- "num-traits",
-]
-
-[[package]]
-name = "num-integer"
-version = "0.1.46"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
-dependencies = [
- "num-traits",
-]
-
-[[package]]
-name = "num-traits"
-version = "0.2.19"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
-dependencies = [
- "autocfg",
-]
-
-[[package]]
-name = "once_cell_polyfill"
-version = "1.70.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe"
-
-[[package]]
-name = "pathdiff"
-version = "0.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3"
-
-[[package]]
-name = "pkcs8"
-version = "0.10.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
-dependencies = [
- "der",
- "spki",
-]
-
-[[package]]
-name = "ppv-lite86"
-version = "0.2.21"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
-dependencies = [
- "zerocopy",
-]
-
-[[package]]
-name = "proc-macro2"
-version = "1.0.94"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84"
-dependencies = [
- "unicode-ident",
-]
-
-[[package]]
-name = "quote"
-version = "1.0.39"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c1f1914ce909e1658d9907913b4b91947430c7d9be598b15a1912935b8c04801"
-dependencies = [
- "proc-macro2",
-]
-
-[[package]]
-name = "radix_trie"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd"
-dependencies = [
- "endian-type",
- "nibble_vec",
-]
-
-[[package]]
-name = "rand"
-version = "0.8.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
-dependencies = [
- "libc",
- "rand_chacha",
- "rand_core",
-]
-
-[[package]]
-name = "rand_chacha"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
-dependencies = [
- "ppv-lite86",
- "rand_core",
-]
-
-[[package]]
-name = "rand_core"
-version = "0.6.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
-dependencies = [
- "getrandom",
-]
-
-[[package]]
-name = "rand_seeder"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4a9febe641d2842ffc76ee962668a17578767c4e01735e4802b21ed9a24b2e4e"
-dependencies = [
- "rand_core",
-]
-
-[[package]]
-name = "requests"
-version = "0.0.0"
-dependencies = [
- "multiversx-sc",
- "multiversx-sc-scenario",
-]
-
-[[package]]
-name = "rustc_version"
-version = "0.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
-dependencies = [
- "semver",
-]
-
-[[package]]
-name = "rustversion"
-version = "1.0.22"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
-
-[[package]]
-name = "semver"
-version = "1.0.27"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2"
-
-[[package]]
-name = "serde"
-version = "1.0.228"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
-dependencies = [
- "serde_core",
- "serde_derive",
-]
-
-[[package]]
-name = "serde_core"
-version = "1.0.228"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
-dependencies = [
- "serde_derive",
-]
-
-[[package]]
-name = "serde_derive"
-version = "1.0.228"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "serde_json"
-version = "1.0.149"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86"
-dependencies = [
- "itoa",
- "memchr",
- "serde",
- "serde_core",
- "zmij",
-]
-
-[[package]]
-name = "serde_spanned"
-version = "0.6.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3"
-dependencies = [
- "serde",
-]
-
-[[package]]
-name = "sha2"
-version = "0.10.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
-dependencies = [
- "cfg-if",
- "cpufeatures",
- "digest",
-]
-
-[[package]]
-name = "sha3"
-version = "0.10.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60"
-dependencies = [
- "digest",
- "keccak",
-]
-
-[[package]]
-name = "signature"
-version = "2.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de"
-dependencies = [
- "rand_core",
-]
-
-[[package]]
-name = "smallvec"
-version = "1.15.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
-
-[[package]]
-name = "spki"
-version = "0.7.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d"
-dependencies = [
- "base64ct",
- "der",
-]
-
-[[package]]
-name = "strsim"
-version = "0.11.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
-
-[[package]]
-name = "subtle"
-version = "2.6.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
-
-[[package]]
-name = "syn"
-version = "2.0.100"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0"
-dependencies = [
- "proc-macro2",
- "quote",
- "unicode-ident",
-]
-
-[[package]]
-name = "termcolor"
-version = "1.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755"
-dependencies = [
- "winapi-util",
-]
-
-[[package]]
-name = "toml"
-version = "0.8.23"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362"
-dependencies = [
- "indexmap",
- "serde",
- "serde_spanned",
- "toml_datetime",
- "toml_edit",
-]
-
-[[package]]
-name = "toml_datetime"
-version = "0.6.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c"
-dependencies = [
- "serde",
-]
-
-[[package]]
-name = "toml_edit"
-version = "0.22.27"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a"
-dependencies = [
- "indexmap",
- "serde",
- "serde_spanned",
- "toml_datetime",
- "toml_write",
- "winnow",
-]
-
-[[package]]
-name = "toml_write"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801"
-
-[[package]]
-name = "typenum"
-version = "1.19.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb"
-
-[[package]]
-name = "unicode-ident"
-version = "1.0.22"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"
-
-[[package]]
-name = "unicode-segmentation"
-version = "1.12.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493"
-
-[[package]]
-name = "unicode-width"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254"
-
-[[package]]
-name = "unwrap-infallible"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "151ac09978d3c2862c4e39b557f4eceee2cc72150bc4cb4f16abf061b6e381fb"
-
-[[package]]
-name = "utf8parse"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
-
-[[package]]
-name = "version_check"
-version = "0.9.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
-
-[[package]]
-name = "wasi"
-version = "0.11.1+wasi-snapshot-preview1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
-
-[[package]]
-name = "wasm-encoder"
-version = "0.244.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319"
-dependencies = [
- "leb128fmt",
- "wasmparser 0.244.0",
-]
-
-[[package]]
-name = "wasmparser"
-version = "0.227.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0f51cad774fb3c9461ab9bccc9c62dfb7388397b5deda31bf40e8108ccd678b2"
-dependencies = [
- "bitflags",
- "hashbrown 0.15.5",
- "indexmap",
- "semver",
- "serde",
-]
-
-[[package]]
-name = "wasmparser"
-version = "0.244.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe"
-dependencies = [
- "bitflags",
- "indexmap",
- "semver",
-]
-
-[[package]]
-name = "wasmprinter"
-version = "0.227.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "32475a0459db5639e989206dd8833fb07110ec092a7cb3468c82341989cac4d3"
-dependencies = [
- "anyhow",
- "termcolor",
- "wasmparser 0.227.1",
-]
-
-[[package]]
-name = "wast"
-version = "244.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2e7b9f9e23311275920e3d6b56d64137c160cf8af4f84a7283b36cfecbf4acb"
-dependencies = [
- "bumpalo",
- "leb128fmt",
- "memchr",
- "unicode-width",
- "wasm-encoder",
-]
-
-[[package]]
-name = "wat"
-version = "1.244.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bbf35b87ed352f9ab6cd0732abde5a67dd6153dfd02c493e61459218b19456fa"
-dependencies = [
- "wast",
-]
-
-[[package]]
-name = "winapi-util"
-version = "0.1.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
-dependencies = [
- "windows-sys 0.61.2",
-]
-
-[[package]]
-name = "windows-link"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
-
-[[package]]
-name = "windows-sys"
-version = "0.59.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
-dependencies = [
- "windows-targets",
-]
-
-[[package]]
-name = "windows-sys"
-version = "0.61.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
-dependencies = [
- "windows-link",
-]
-
-[[package]]
-name = "windows-targets"
-version = "0.52.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
-dependencies = [
- "windows_aarch64_gnullvm",
- "windows_aarch64_msvc",
- "windows_i686_gnu",
- "windows_i686_gnullvm",
- "windows_i686_msvc",
- "windows_x86_64_gnu",
- "windows_x86_64_gnullvm",
- "windows_x86_64_msvc",
-]
-
-[[package]]
-name = "windows_aarch64_gnullvm"
-version = "0.52.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
-
-[[package]]
-name = "windows_aarch64_msvc"
-version = "0.52.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
-
-[[package]]
-name = "windows_i686_gnu"
-version = "0.52.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
-
-[[package]]
-name = "windows_i686_gnullvm"
-version = "0.52.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
-
-[[package]]
-name = "windows_i686_msvc"
-version = "0.52.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
-
-[[package]]
-name = "windows_x86_64_gnu"
-version = "0.52.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
-
-[[package]]
-name = "windows_x86_64_gnullvm"
-version = "0.52.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
-
-[[package]]
-name = "windows_x86_64_msvc"
-version = "0.52.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
-
-[[package]]
-name = "winnow"
-version = "0.7.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829"
-dependencies = [
- "memchr",
-]
-
-[[package]]
-name = "zerocopy"
-version = "0.8.27"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c"
-dependencies = [
- "zerocopy-derive",
-]
-
-[[package]]
-name = "zerocopy-derive"
-version = "0.8.27"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "zeroize"
-version = "1.8.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0"
-
-[[package]]
-name = "zmij"
-version = "1.0.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bd8f3f50b848df28f887acb68e41201b5aea6bc8a8dacc00fb40635ff9a72fea"
diff --git a/requests-contract/Cargo.toml b/requests-contract/Cargo.toml
deleted file mode 100644
index a15bbc5..0000000
--- a/requests-contract/Cargo.toml
+++ /dev/null
@@ -1,15 +0,0 @@
-[package]
-name = "requests"
-version = "0.0.0"
-authors = ["Andrei Marinica "]
-edition = "2021"
-publish = false
-
-[lib]
-path = "src/lib.rs"
-
-[dependencies.multiversx-sc]
-version = "0.57.1"
-
-[dev-dependencies.multiversx-sc-scenario]
-version = "0.57.1"
diff --git a/requests-contract/build_reproducible.sh b/requests-contract/build_reproducible.sh
deleted file mode 100755
index 703732c..0000000
--- a/requests-contract/build_reproducible.sh
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/bin/bash
-set -e
-
-# Ensure we are in the script's directory
-cd "$(dirname "$0")"
-
-BUILDER_TAG="v10.0.0"
-SCRIPT_URL="https://raw.githubusercontent.com/multiversx/mx-sdk-rust-contract-builder/${BUILDER_TAG}/build_with_docker.py"
-SCRIPT_NAME="build_with_docker.py"
-
-# Download the build script
-echo "Downloading build script from ${SCRIPT_URL}..."
-curl -s -o "${SCRIPT_NAME}" "${SCRIPT_URL}"
-
-# Clean and create output directory
-rm -rf output
-mkdir -p output
-
-# Run the build
-echo "Starting reproducible build using Docker image multiversx/sdk-rust-contract-builder:${BUILDER_TAG}..."
-python3 "${SCRIPT_NAME}" \
- --image="multiversx/sdk-rust-contract-builder:${BUILDER_TAG}" \
- --project="$(pwd)" \
- --output="$(pwd)/output" \
- --no-docker-interactive \
- --contract=requests
-
-echo "Build complete. Artifacts are in $(pwd)/output"
diff --git a/requests-contract/build_with_docker.py b/requests-contract/build_with_docker.py
deleted file mode 100644
index 83ebc2b..0000000
--- a/requests-contract/build_with_docker.py
+++ /dev/null
@@ -1,120 +0,0 @@
-import logging
-import os
-import subprocess
-import sys
-from argparse import ArgumentParser
-from pathlib import Path
-from typing import List
-
-logger = logging.getLogger("build-with-docker")
-
-
-def main(cli_args: List[str]):
- logging.basicConfig(level=logging.DEBUG)
-
- parser = ArgumentParser()
- parser.add_argument("--image", type=str, required=True)
- parser.add_argument("--no-docker-interactive", action="store_true", default=False)
- parser.add_argument("--no-docker-tty", action="store_true", default=False)
- parser.add_argument("--project", type=str, help="source code folder (project)")
- parser.add_argument("--packaged-src", type=str, help="source code packaged in a JSON file")
- parser.add_argument("--contract", type=str, help="contract to build (contract name, as found in Cargo.toml)")
- parser.add_argument("--output", type=str, default=Path(os.getcwd()) / "output")
- parser.add_argument("--package-whole-project-src", action="store_true", default=False, help="deprecated parameter, not used anymore")
- parser.add_argument("--cargo-target-dir", help="deprecated parameter, not used anymore")
- parser.add_argument("--no-wasm-opt", action="store_true", default=False, help="do not optimize wasm files after the build (default: %(default)s)")
- parser.add_argument("--build-root", type=str, required=False, help="root path (within container) for the build (default: %(default)s)")
- parser.add_argument("--cargo-verbose", action="store_true", default=False, help="set 'CARGO_TERM_VERBOSE' environment variable (default: %(default)s)")
-
- # Handle CLI arguments
- parsed_args = parser.parse_args(cli_args)
- image = parsed_args.image
- docker_interactive = not parsed_args.no_docker_interactive
- docker_tty = not parsed_args.no_docker_tty
- project_path = Path(parsed_args.project).expanduser().resolve() if parsed_args.project else None
- packaged_src_path = Path(parsed_args.packaged_src).expanduser().resolve() if parsed_args.packaged_src else None
- contract_path = parsed_args.contract
- output_path = Path(parsed_args.output).expanduser().resolve()
- no_wasm_opt = parsed_args.no_wasm_opt
- build_root = Path(parsed_args.build_root) if parsed_args.build_root else None
- cargo_verbose = parsed_args.cargo_verbose
-
- # Prepare (and check) output folder
- output_path.mkdir(parents=True, exist_ok=True)
- ensure_output_folder_is_empty(output_path)
-
- # Prepare general docker arguments
- docker_general_args = ["docker", "run"]
-
- if docker_interactive:
- docker_general_args += ["--interactive"]
- if docker_tty:
- docker_general_args += ["--tty"]
-
- docker_general_args += ["--user", f"{str(os.getuid())}:{str(os.getgid())}"]
- docker_general_args += ["--rm"]
-
- # Prepare docker arguments related to mounting volumes
- docker_mount_args: List[str] = ["--volume", f"{output_path}:/output"]
-
- if project_path:
- docker_mount_args.extend(["--volume", f"{project_path}:/project"])
-
- if packaged_src_path:
- docker_mount_args.extend(["--volume", f"{packaged_src_path}:/packaged-src.json"])
-
- mounted_temporary_root = Path("/tmp/multiversx_sdk_rust_contract_builder")
- mounted_cargo_target_dir = mounted_temporary_root / "cargo-target-dir"
- mounted_cargo_registry = mounted_temporary_root / "cargo-registry"
- mounted_cargo_git = mounted_temporary_root / "cargo-git"
-
- mounted_cargo_target_dir.mkdir(parents=True, exist_ok=True)
- mounted_cargo_registry.mkdir(parents=True, exist_ok=True)
- mounted_cargo_git.mkdir(parents=True, exist_ok=True)
-
- docker_mount_args += ["--volume", f"{mounted_cargo_target_dir}:/rust/cargo-target-dir"]
- docker_mount_args += ["--volume", f"{mounted_cargo_registry}:/rust/registry"]
- docker_mount_args += ["--volume", f"{mounted_cargo_git}:/rust/git"]
-
- docker_env_args = ["--env", f"CARGO_TERM_VERBOSE={str(cargo_verbose).lower()}"]
-
- # Prepare entrypoint arguments
- entrypoint_args: List[str] = []
-
- if project_path:
- entrypoint_args.extend(["--project", "project"])
-
- if packaged_src_path:
- entrypoint_args.extend(["--packaged-src", "packaged-src.json"])
-
- if no_wasm_opt:
- entrypoint_args.append("--no-wasm-opt")
-
- if contract_path:
- entrypoint_args.extend(["--contract", contract_path])
-
- if build_root:
- entrypoint_args.extend(["--build-root", str(build_root)])
-
- # Run docker container
- args = docker_general_args + docker_mount_args + docker_env_args + [image] + entrypoint_args
- logger.info(f"Running docker: {args}")
-
- result = subprocess.run(args)
- return result.returncode
-
-
-def ensure_output_folder_is_empty(parent_output_folder: Path):
- is_empty = len(os.listdir(parent_output_folder)) == 0
- if not is_empty:
- raise Exception(f"Output folder must be empty: {parent_output_folder}")
-
-
-if __name__ == "__main__":
- try:
- return_code = main(sys.argv[1:])
- exit(return_code)
- except Exception as err:
- print("An error occurred.")
- print(err)
- exit(1)
diff --git a/requests-contract/meta/Cargo.lock b/requests-contract/meta/Cargo.lock
deleted file mode 100644
index b53ce30..0000000
--- a/requests-contract/meta/Cargo.lock
+++ /dev/null
@@ -1,785 +0,0 @@
-# This file is automatically @generated by Cargo.
-# It is not intended for manual editing.
-version = 4
-
-[[package]]
-name = "anstream"
-version = "0.6.21"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a"
-dependencies = [
- "anstyle",
- "anstyle-parse",
- "anstyle-query",
- "anstyle-wincon",
- "colorchoice",
- "is_terminal_polyfill",
- "utf8parse",
-]
-
-[[package]]
-name = "anstyle"
-version = "1.0.13"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78"
-
-[[package]]
-name = "anstyle-parse"
-version = "0.2.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2"
-dependencies = [
- "utf8parse",
-]
-
-[[package]]
-name = "anstyle-query"
-version = "1.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc"
-dependencies = [
- "windows-sys 0.61.2",
-]
-
-[[package]]
-name = "anstyle-wincon"
-version = "3.0.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d"
-dependencies = [
- "anstyle",
- "once_cell_polyfill",
- "windows-sys 0.61.2",
-]
-
-[[package]]
-name = "anyhow"
-version = "1.0.100"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61"
-
-[[package]]
-name = "arrayvec"
-version = "0.7.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
-
-[[package]]
-name = "autocfg"
-version = "1.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
-
-[[package]]
-name = "bitflags"
-version = "2.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd"
-
-[[package]]
-name = "bumpalo"
-version = "3.19.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510"
-
-[[package]]
-name = "clap"
-version = "4.5.54"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c6e6ff9dcd79cff5cd969a17a545d79e84ab086e444102a591e288a8aa3ce394"
-dependencies = [
- "clap_builder",
- "clap_derive",
-]
-
-[[package]]
-name = "clap_builder"
-version = "4.5.54"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fa42cf4d2b7a41bc8f663a7cab4031ebafa1bf3875705bfaf8466dc60ab52c00"
-dependencies = [
- "anstream",
- "anstyle",
- "clap_lex",
- "strsim",
-]
-
-[[package]]
-name = "clap_derive"
-version = "4.5.49"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671"
-dependencies = [
- "heck",
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "clap_lex"
-version = "0.7.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32"
-
-[[package]]
-name = "colorchoice"
-version = "1.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75"
-
-[[package]]
-name = "colored"
-version = "3.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fde0e0ec90c9dfb3b4b1a0891a7dcd0e2bffde2f7efed5fe7c9bb00e5bfb915e"
-dependencies = [
- "windows-sys 0.59.0",
-]
-
-[[package]]
-name = "convert_case"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "baaaa0ecca5b51987b9423ccdc971514dd8b0bb7b4060b983d3664dad3f1f89f"
-dependencies = [
- "unicode-segmentation",
-]
-
-[[package]]
-name = "endian-type"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d"
-
-[[package]]
-name = "equivalent"
-version = "1.0.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
-
-[[package]]
-name = "foldhash"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
-
-[[package]]
-name = "generic-array"
-version = "1.3.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eaf57c49a95fd1fe24b90b3033bee6dc7e8f1288d51494cb44e627c295e38542"
-dependencies = [
- "rustversion",
- "typenum",
-]
-
-[[package]]
-name = "hashbrown"
-version = "0.15.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
-dependencies = [
- "foldhash",
- "serde",
-]
-
-[[package]]
-name = "hashbrown"
-version = "0.16.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
-
-[[package]]
-name = "heck"
-version = "0.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
-
-[[package]]
-name = "hex"
-version = "0.4.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
-
-[[package]]
-name = "hex-literal"
-version = "0.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46"
-
-[[package]]
-name = "indexmap"
-version = "2.13.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017"
-dependencies = [
- "equivalent",
- "hashbrown 0.16.1",
- "serde",
- "serde_core",
-]
-
-[[package]]
-name = "is_terminal_polyfill"
-version = "1.70.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695"
-
-[[package]]
-name = "itoa"
-version = "1.0.17"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2"
-
-[[package]]
-name = "lazy_static"
-version = "1.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
-
-[[package]]
-name = "leb128fmt"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2"
-
-[[package]]
-name = "memchr"
-version = "2.7.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273"
-
-[[package]]
-name = "multiversx-chain-core"
-version = "0.14.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "73f1f0526ca094185847776c2c03de97ea082743ee4e6f799860ad67e7d78250"
-dependencies = [
- "bitflags",
- "multiversx-sc-codec",
-]
-
-[[package]]
-name = "multiversx-sc"
-version = "0.57.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "20602d4fc336092faadc03b6b445c4bb5e4dbc4c86fb53726e46eca67070813a"
-dependencies = [
- "bitflags",
- "generic-array",
- "hex-literal",
- "multiversx-chain-core",
- "multiversx-sc-codec",
- "multiversx-sc-derive",
- "num-traits",
- "unwrap-infallible",
-]
-
-[[package]]
-name = "multiversx-sc-codec"
-version = "0.22.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "43e0f24a020adf32faffae1c57475c6b7285a3216d1a36e4a73617639721c2e0"
-dependencies = [
- "arrayvec",
- "bitflags",
- "multiversx-sc-codec-derive",
- "num-bigint",
- "unwrap-infallible",
-]
-
-[[package]]
-name = "multiversx-sc-codec-derive"
-version = "0.22.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7c5f17d5ee23657d5cddc7f4471925b5a49f7e25306f8bba656ea6917acc629d"
-dependencies = [
- "hex",
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "multiversx-sc-derive"
-version = "0.57.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0d44d08d3376c199e8c391cc07752d2822cd289693da5319d7905599501e557f"
-dependencies = [
- "hex",
- "proc-macro2",
- "quote",
- "radix_trie",
- "syn",
-]
-
-[[package]]
-name = "multiversx-sc-meta-lib"
-version = "0.57.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "438149f455382e64d1d383b2cb5bee144c215d2943d6a0ae06a50d3225680fbb"
-dependencies = [
- "clap",
- "colored",
- "convert_case",
- "hex",
- "lazy_static",
- "multiversx-sc",
- "rustc_version",
- "semver",
- "serde",
- "serde_json",
- "toml",
- "wasmparser 0.227.1",
- "wasmprinter",
- "wat",
-]
-
-[[package]]
-name = "nibble_vec"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43"
-dependencies = [
- "smallvec",
-]
-
-[[package]]
-name = "num-bigint"
-version = "0.4.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"
-dependencies = [
- "num-integer",
- "num-traits",
-]
-
-[[package]]
-name = "num-integer"
-version = "0.1.46"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
-dependencies = [
- "num-traits",
-]
-
-[[package]]
-name = "num-traits"
-version = "0.2.19"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
-dependencies = [
- "autocfg",
-]
-
-[[package]]
-name = "once_cell_polyfill"
-version = "1.70.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe"
-
-[[package]]
-name = "proc-macro2"
-version = "1.0.94"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84"
-dependencies = [
- "unicode-ident",
-]
-
-[[package]]
-name = "quote"
-version = "1.0.39"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c1f1914ce909e1658d9907913b4b91947430c7d9be598b15a1912935b8c04801"
-dependencies = [
- "proc-macro2",
-]
-
-[[package]]
-name = "radix_trie"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd"
-dependencies = [
- "endian-type",
- "nibble_vec",
-]
-
-[[package]]
-name = "requests"
-version = "0.0.0"
-dependencies = [
- "multiversx-sc",
-]
-
-[[package]]
-name = "requests-meta"
-version = "0.0.0"
-dependencies = [
- "multiversx-sc-meta-lib",
- "requests",
-]
-
-[[package]]
-name = "rustc_version"
-version = "0.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
-dependencies = [
- "semver",
-]
-
-[[package]]
-name = "rustversion"
-version = "1.0.22"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
-
-[[package]]
-name = "semver"
-version = "1.0.27"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2"
-
-[[package]]
-name = "serde"
-version = "1.0.228"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
-dependencies = [
- "serde_core",
- "serde_derive",
-]
-
-[[package]]
-name = "serde_core"
-version = "1.0.228"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
-dependencies = [
- "serde_derive",
-]
-
-[[package]]
-name = "serde_derive"
-version = "1.0.228"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "serde_json"
-version = "1.0.149"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86"
-dependencies = [
- "itoa",
- "memchr",
- "serde",
- "serde_core",
- "zmij",
-]
-
-[[package]]
-name = "serde_spanned"
-version = "0.6.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3"
-dependencies = [
- "serde",
-]
-
-[[package]]
-name = "smallvec"
-version = "1.15.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
-
-[[package]]
-name = "strsim"
-version = "0.11.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
-
-[[package]]
-name = "syn"
-version = "2.0.100"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0"
-dependencies = [
- "proc-macro2",
- "quote",
- "unicode-ident",
-]
-
-[[package]]
-name = "termcolor"
-version = "1.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755"
-dependencies = [
- "winapi-util",
-]
-
-[[package]]
-name = "toml"
-version = "0.8.23"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362"
-dependencies = [
- "indexmap",
- "serde",
- "serde_spanned",
- "toml_datetime",
- "toml_edit",
-]
-
-[[package]]
-name = "toml_datetime"
-version = "0.6.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c"
-dependencies = [
- "serde",
-]
-
-[[package]]
-name = "toml_edit"
-version = "0.22.27"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a"
-dependencies = [
- "indexmap",
- "serde",
- "serde_spanned",
- "toml_datetime",
- "toml_write",
- "winnow",
-]
-
-[[package]]
-name = "toml_write"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801"
-
-[[package]]
-name = "typenum"
-version = "1.19.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb"
-
-[[package]]
-name = "unicode-ident"
-version = "1.0.22"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"
-
-[[package]]
-name = "unicode-segmentation"
-version = "1.12.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493"
-
-[[package]]
-name = "unicode-width"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254"
-
-[[package]]
-name = "unwrap-infallible"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "151ac09978d3c2862c4e39b557f4eceee2cc72150bc4cb4f16abf061b6e381fb"
-
-[[package]]
-name = "utf8parse"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
-
-[[package]]
-name = "wasm-encoder"
-version = "0.244.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319"
-dependencies = [
- "leb128fmt",
- "wasmparser 0.244.0",
-]
-
-[[package]]
-name = "wasmparser"
-version = "0.227.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0f51cad774fb3c9461ab9bccc9c62dfb7388397b5deda31bf40e8108ccd678b2"
-dependencies = [
- "bitflags",
- "hashbrown 0.15.5",
- "indexmap",
- "semver",
- "serde",
-]
-
-[[package]]
-name = "wasmparser"
-version = "0.244.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe"
-dependencies = [
- "bitflags",
- "indexmap",
- "semver",
-]
-
-[[package]]
-name = "wasmprinter"
-version = "0.227.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "32475a0459db5639e989206dd8833fb07110ec092a7cb3468c82341989cac4d3"
-dependencies = [
- "anyhow",
- "termcolor",
- "wasmparser 0.227.1",
-]
-
-[[package]]
-name = "wast"
-version = "244.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2e7b9f9e23311275920e3d6b56d64137c160cf8af4f84a7283b36cfecbf4acb"
-dependencies = [
- "bumpalo",
- "leb128fmt",
- "memchr",
- "unicode-width",
- "wasm-encoder",
-]
-
-[[package]]
-name = "wat"
-version = "1.244.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bbf35b87ed352f9ab6cd0732abde5a67dd6153dfd02c493e61459218b19456fa"
-dependencies = [
- "wast",
-]
-
-[[package]]
-name = "winapi-util"
-version = "0.1.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
-dependencies = [
- "windows-sys 0.61.2",
-]
-
-[[package]]
-name = "windows-link"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
-
-[[package]]
-name = "windows-sys"
-version = "0.59.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
-dependencies = [
- "windows-targets",
-]
-
-[[package]]
-name = "windows-sys"
-version = "0.61.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
-dependencies = [
- "windows-link",
-]
-
-[[package]]
-name = "windows-targets"
-version = "0.52.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
-dependencies = [
- "windows_aarch64_gnullvm",
- "windows_aarch64_msvc",
- "windows_i686_gnu",
- "windows_i686_gnullvm",
- "windows_i686_msvc",
- "windows_x86_64_gnu",
- "windows_x86_64_gnullvm",
- "windows_x86_64_msvc",
-]
-
-[[package]]
-name = "windows_aarch64_gnullvm"
-version = "0.52.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
-
-[[package]]
-name = "windows_aarch64_msvc"
-version = "0.52.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
-
-[[package]]
-name = "windows_i686_gnu"
-version = "0.52.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
-
-[[package]]
-name = "windows_i686_gnullvm"
-version = "0.52.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
-
-[[package]]
-name = "windows_i686_msvc"
-version = "0.52.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
-
-[[package]]
-name = "windows_x86_64_gnu"
-version = "0.52.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
-
-[[package]]
-name = "windows_x86_64_gnullvm"
-version = "0.52.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
-
-[[package]]
-name = "windows_x86_64_msvc"
-version = "0.52.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
-
-[[package]]
-name = "winnow"
-version = "0.7.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829"
-dependencies = [
- "memchr",
-]
-
-[[package]]
-name = "zmij"
-version = "1.0.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bd8f3f50b848df28f887acb68e41201b5aea6bc8a8dacc00fb40635ff9a72fea"
diff --git a/requests-contract/meta/Cargo.toml b/requests-contract/meta/Cargo.toml
deleted file mode 100644
index 83f38a8..0000000
--- a/requests-contract/meta/Cargo.toml
+++ /dev/null
@@ -1,12 +0,0 @@
-[package]
-name = "requests-meta"
-version = "0.0.0"
-edition = "2021"
-publish = false
-
-[dependencies.requests]
-path = ".."
-
-[dependencies.multiversx-sc-meta-lib]
-version = "0.57.1"
-default-features = false
diff --git a/requests-contract/meta/src/main.rs b/requests-contract/meta/src/main.rs
deleted file mode 100644
index 3f71a26..0000000
--- a/requests-contract/meta/src/main.rs
+++ /dev/null
@@ -1,3 +0,0 @@
-fn main() {
- multiversx_sc_meta_lib::cli_main::();
-}
diff --git a/requests-contract/multiversx.json b/requests-contract/multiversx.json
deleted file mode 100644
index 7365539..0000000
--- a/requests-contract/multiversx.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "language": "rust"
-}
\ No newline at end of file
diff --git a/requests-contract/mxsc-template.toml b/requests-contract/mxsc-template.toml
deleted file mode 100644
index f6a6bb7..0000000
--- a/requests-contract/mxsc-template.toml
+++ /dev/null
@@ -1,25 +0,0 @@
-name = "adder"
-contract_trait = "Adder"
-src_file = "adder.rs"
-rename_pairs = [
- [
- "blockchain.set_current_dir_from_workspace(\"contracts/examples/adder\");",
- "// blockchain.set_current_dir_from_workspace(\"relative path to your workspace, if applicable\");",
- ],
-]
-files_include = [
- "meta",
- "scenarios",
- "src",
- "tests",
- "Cargo.toml",
- "README.md",
- "sc-config.toml",
- "multiversx.json",
- "interactor/Cargo.toml",
- "interactor/config.toml",
- "interactor/.gitignore",
- "interactor/src",
- "interactor/tests",
-]
-has_interactor = true
diff --git a/requests-contract/output/artifacts.json b/requests-contract/output/artifacts.json
deleted file mode 100644
index 9100616..0000000
--- a/requests-contract/output/artifacts.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "buildMetadata": {
- "versionRust": "1.86.0",
- "versionScTool": "0.57.1",
- "versionWasmOpt": "0.116.1",
- "targetPlatform": "linux/amd64"
- },
- "buildOptions": {
- "packageWholeProjectSrc": true,
- "specificContract": "requests",
- "cargoTargetDir": "/rust/cargo-target-dir",
- "noWasmOpt": false,
- "buildRootFolder": "/tmp/project"
- },
- "contracts": {
- "requests": {
- "version": "0.0.0",
- "codehash": "1e8c9ef47f3f3f00b58b48075411edab699126c8ee9ff69f53827dfcf2eecf0a",
- "artifacts": {
- "bytecode": "requests.wasm",
- "abi": "requests.abi.json",
- "srcPackage": "requests-0.0.0.source.json"
- }
- }
- }
-}
\ No newline at end of file
diff --git a/requests-contract/output/requests/requests-0.0.0.source.json b/requests-contract/output/requests/requests-0.0.0.source.json
deleted file mode 100644
index c4f29d6..0000000
--- a/requests-contract/output/requests/requests-0.0.0.source.json
+++ /dev/null
@@ -1,106 +0,0 @@
-{
- "schemaVersion": "2.0.0",
- "metadata": {
- "contractName": "requests",
- "contractVersion": "0.0.0",
- "buildMetadata": {
- "versionRust": "1.86.0",
- "versionScTool": "0.57.1",
- "versionWasmOpt": "0.116.1",
- "targetPlatform": "linux/amd64"
- },
- "buildOptions": {
- "packageWholeProjectSrc": true,
- "specificContract": "requests",
- "cargoTargetDir": "/rust/cargo-target-dir",
- "noWasmOpt": false,
- "buildRootFolder": "/tmp/project"
- }
- },
- "entries": [
- {
- "path": "Cargo.lock",
- "content": "IyBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBAZ2VuZXJhdGVkIGJ5IENhcmdvLgojIEl0IGlzIG5vdCBpbnRlbmRlZCBmb3IgbWFudWFsIGVkaXRpbmcuCnZlcnNpb24gPSA0CgpbW3BhY2thZ2VdXQpuYW1lID0gImFuc3RyZWFtIgp2ZXJzaW9uID0gIjAuNi4yMSIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICI0M2Q1YjI4MWU3Mzc1NDQzODRlOTY5YTVjY2FkM2YxY2RkMjRiNDgwODZhMGZjMWIyYTUyNjJhMjZiOGY0ZjRhIgpkZXBlbmRlbmNpZXMgPSBbCiAiYW5zdHlsZSIsCiAiYW5zdHlsZS1wYXJzZSIsCiAiYW5zdHlsZS1xdWVyeSIsCiAiYW5zdHlsZS13aW5jb24iLAogImNvbG9yY2hvaWNlIiwKICJpc190ZXJtaW5hbF9wb2x5ZmlsbCIsCiAidXRmOHBhcnNlIiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJhbnN0eWxlIgp2ZXJzaW9uID0gIjEuMC4xMyIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICI1MTkyY2NhODAwNmYxZmQ0ZjcyMzc1MTZmNDBmYTE4M2JiMDdmOGZiZGZlZGFhMDAzNmRlNWVhOWIwYjQ1ZTc4IgoKW1twYWNrYWdlXV0KbmFtZSA9ICJhbnN0eWxlLXBhcnNlIgp2ZXJzaW9uID0gIjAuMi43Igpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjRlNzY0NDgyNGYwYWEyYzdiOTM4NDU3OTIzNGVmMTBlYjdlZmI2YTBkZWI4M2Y5NjMwYTQ5NTk0ZGQ5YzE1YzIiCmRlcGVuZGVuY2llcyA9IFsKICJ1dGY4cGFyc2UiLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gImFuc3R5bGUtcXVlcnkiCnZlcnNpb24gPSAiMS4xLjUiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiNDBjNDhmNzJmZDUzY2QyODkxMDRmYzY0MDk5YWJjYTczZGI0MTY2YWQ4NmVhMGI0MzQxYWJlNjVhZjgzZGFkYyIKZGVwZW5kZW5jaWVzID0gWwogIndpbmRvd3Mtc3lzIDAuNjEuMiIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAiYW5zdHlsZS13aW5jb24iCnZlcnNpb24gPSAiMy4wLjExIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjI5MWU2YTI1MGZmODZjZDRhODIwMTEyZmI4ODk4ODA4YTM2NmQ4ZjlmNThjZTE2ZDFmNTM4MzUzYWQ1NTc0N2QiCmRlcGVuZGVuY2llcyA9IFsKICJhbnN0eWxlIiwKICJvbmNlX2NlbGxfcG9seWZpbGwiLAogIndpbmRvd3Mtc3lzIDAuNjEuMiIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAiYW55aG93Igp2ZXJzaW9uID0gIjEuMC4xMDAiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiYTIzZWI2YjE2MTQzMThhODA3MWM5YjI1MjFmMzZiNDI0YjJjODNkYjVlYjNhMGZlYWQ0YTZjMDgwOWFmNmU2MSIKCltbcGFja2FnZV1dCm5hbWUgPSAiYXJyYXl2ZWMiCnZlcnNpb24gPSAiMC43LjYiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiN2MwMmQxMjNkZjAxN2VmY2RmYmQ3MzllZjgxNzM1YjM2YzViYTgzZWMzYzU5YzgwYTlkN2VjYzcxOGY5MmU1MCIKCltbcGFja2FnZV1dCm5hbWUgPSAiYXV0b2NmZyIKdmVyc2lvbiA9ICIxLjUuMCIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICJjMDg2MDZmOGMzY2JmNGNlNmVjOGUyOGZiMDAxNGEyYzA4NjcwOGZlOTU0ZWFhODg1Mzg0YTYxNjUxNzJlN2U4IgoKW1twYWNrYWdlXV0KbmFtZSA9ICJiYXNlNjQiCnZlcnNpb24gPSAiMC4yMi4xIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjcyYjMyNTRmMTYyNTFhODM4MWFhMTJlNDBlM2M0ZDJmMDE5OWY4YzY1MDhmYmVjYjlkOTFmNTc1ZTBmYmI4YzYiCgpbW3BhY2thZ2VdXQpuYW1lID0gImJhc2U2NGN0Igp2ZXJzaW9uID0gIjEuOC4zIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjJhZjUwMTc3ZTE5MGUwN2EyNmFiNzRmOGIxZWZiZmUyZWY4N2RhMjExNjIyMTMxOGNiMWMyZTgyYmFmN2RlMDYiCgpbW3BhY2thZ2VdXQpuYW1lID0gImJlY2gzMiIKdmVyc2lvbiA9ICIwLjExLjEiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiMzI2MzcyNjgzNzdmYzdiMTBhOGM2ZDUxZGUzZTdmYmExY2U1ZGQzNzFhOTZlMzQyYjM0ZTYwNzhkYjU1OGU3ZiIKCltbcGFja2FnZV1dCm5hbWUgPSAiYml0ZmxhZ3MiCnZlcnNpb24gPSAiMi45LjAiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiNWM4MjE0MTE1YjdiZjg0MDk5ZjEzMDkzMjRlNjMxNDFkNGM1ZDdjYzI2ODYyZjk3YTBhODU3ZGJlZmUxNjViZCIKCltbcGFja2FnZV1dCm5hbWUgPSAiYmxvY2stYnVmZmVyIgp2ZXJzaW9uID0gIjAuMTAuNCIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICIzMDc4Yzc2MjliNjJkM2YwNDM5NTE3ZmEzOTQ5OTZhY2FjYzVjYmM5MWM1YTIwZDhjNjU4ZTc3YWJkNTAzYTcxIgpkZXBlbmRlbmNpZXMgPSBbCiAiZ2VuZXJpYy1hcnJheSAwLjE0LjciLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gImJ1bXBhbG8iCnZlcnNpb24gPSAiMy4xOS4xIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjVkZDlkYzczOGI3YTgzMTFjN2FkZTE1MjQyNDk3NGQ4MTE1ZjJjZGFkNjFlOGRhYjhkYWM5ZjIzNjIyOTg1MTAiCgpbW3BhY2thZ2VdXQpuYW1lID0gImNmZy1pZiIKdmVyc2lvbiA9ICIxLjAuNCIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICI5MzMwZjhiMmZmMTNmMzQ1NDBiNDRlOTQ2ZWYzNTExMTgyNTcyN2IzOGQzMzI4NmVmOTg2MTQyNjE1MTIxODAxIgoKW1twYWNrYWdlXV0KbmFtZSA9ICJjbGFwIgp2ZXJzaW9uID0gIjQuNS41NCIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICJjNmU2ZmY5ZGNkNzljZmY1Y2Q5NjlhMTdhNTQ1ZDc5ZTg0YWIwODZlNDQ0MTAyYTU5MWUyODhhOGFhM2NlMzk0IgpkZXBlbmRlbmNpZXMgPSBbCiAiY2xhcF9idWlsZGVyIiwKICJjbGFwX2Rlcml2ZSIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAiY2xhcF9idWlsZGVyIgp2ZXJzaW9uID0gIjQuNS41NCIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICJmYTQyY2Y0ZDJiN2E0MWJjOGY2NjNhN2NhYjQwMzFlYmFmYTFiZjM4NzU3MDViZmFmODQ2NmRjNjBhYjUyYzAwIgpkZXBlbmRlbmNpZXMgPSBbCiAiYW5zdHJlYW0iLAogImFuc3R5bGUiLAogImNsYXBfbGV4IiwKICJzdHJzaW0iLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gImNsYXBfZGVyaXZlIgp2ZXJzaW9uID0gIjQuNS40OSIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICIyYTBiNTQ4N2FmZWFiMmRlYjJmZjRlMDNhODA3YWQxYTAzYWM1MzJmZjVhMmNlZTVkODY4ODQ0NDBjN2Y3NjcxIgpkZXBlbmRlbmNpZXMgPSBbCiAiaGVjayIsCiAicHJvYy1tYWNybzIiLAogInF1b3RlIiwKICJzeW4iLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gImNsYXBfbGV4Igp2ZXJzaW9uID0gIjAuNy43Igpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gImMzZTY0YjBjYzA0MzliMTJkZjJmYTY3OGVhZTg5YTFjNTZhNTI5ZmQwNjdhOTExNWY3ODI3ZjFmZmZkMjJiMzIiCgpbW3BhY2thZ2VdXQpuYW1lID0gImNvbG9yY2hvaWNlIgp2ZXJzaW9uID0gIjEuMC40Igpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gImIwNWI2MWRjNTExMmNiYjE3ZTRiNmNkNjE3OTBkOTg0NWQxMzg4ODM1NjM5MTYyNGNiZTdlNDFlZmVhYzFlNzUiCgpbW3BhY2thZ2VdXQpuYW1lID0gImNvbG9yZWQiCnZlcnNpb24gPSAiMy4wLjAiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiZmRlMGUwZWM5MGM5ZGZiM2I0YjFhMDg5MWE3ZGNkMGUyYmZmZGUyZjdlZmVkNWZlN2M5YmIwMGU1YmZiOTE1ZSIKZGVwZW5kZW5jaWVzID0gWwogIndpbmRvd3Mtc3lzIDAuNTkuMCIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAiY29uc3Qtb2lkIgp2ZXJzaW9uID0gIjAuOS42Igpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gImMyNDU5Mzc3Mjg1YWQ4NzQwNTRkNzk3ZjNjY2ViZjk4NDk3OGFhMzkxMjlmNmVhZmRlNWNkYzgzMTViNjEyZjgiCgpbW3BhY2thZ2VdXQpuYW1lID0gImNvbnZlcnRfY2FzZSIKdmVyc2lvbiA9ICIwLjguMCIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICJiYWFhYTBlY2NhNWI1MTk4N2I5NDIzY2NkYzk3MTUxNGRkOGIwYmI3YjQwNjBiOTgzZDM2NjRkYWQzZjFmODlmIgpkZXBlbmRlbmNpZXMgPSBbCiAidW5pY29kZS1zZWdtZW50YXRpb24iLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gImNwdWZlYXR1cmVzIgp2ZXJzaW9uID0gIjAuMi4xNyIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICI1OWVkNTgzOGVlYmIyNmEyYmIyZTU4ZjZkNWI1MzE2OTg5YWU5ZDA4YmFiMTBlMGU2ZDEwM2U2NTZkMWIwMjgwIgpkZXBlbmRlbmNpZXMgPSBbCiAibGliYyIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAiY3J5cHRvLWNvbW1vbiIKdmVyc2lvbiA9ICIwLjEuNyIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICI3OGM4MjkyMDU1ZDFjMWRmMGNjZTVkMTgwMzkzZGM4Y2NlMGFiZWMwYTcxMDJhZGI2YzdiMWVlZjYwMTZkNjBhIgpkZXBlbmRlbmNpZXMgPSBbCiAiZ2VuZXJpYy1hcnJheSAwLjE0LjciLAogInR5cGVudW0iLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gImN1cnZlMjU1MTktZGFsZWsiCnZlcnNpb24gPSAiNC4xLjMiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiOTdmYjhiN2M0NTAzZGU3ZDZhZTdiNDJhYjcyYTVhNTk4NTdiNGM5MzdlYzI3YTNkNDUzOWRiYTk1YjVhYjJiZSIKZGVwZW5kZW5jaWVzID0gWwogImNmZy1pZiIsCiAiY3B1ZmVhdHVyZXMiLAogImN1cnZlMjU1MTktZGFsZWstZGVyaXZlIiwKICJkaWdlc3QiLAogImZpYXQtY3J5cHRvIiwKICJydXN0Y192ZXJzaW9uIiwKICJzdWJ0bGUiLAogInplcm9pemUiLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gImN1cnZlMjU1MTktZGFsZWstZGVyaXZlIgp2ZXJzaW9uID0gIjAuMS4xIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gImY0Njg4MmUxNzk5OWM2Y2M1OTBhZjU5MjI5MDQzMmJlM2JjZTA0MjhjYjBkNWY4YjY3MTVlNGRjN2IzODNlYjMiCmRlcGVuZGVuY2llcyA9IFsKICJwcm9jLW1hY3JvMiIsCiAicXVvdGUiLAogInN5biIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAiZGVyIgp2ZXJzaW9uID0gIjAuNy4xMCIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICJlN2MxODMyODM3YjkwNWJiZmI1MTAxZTA3Y2MyNGM4ZGVkZGY1MmY5MzIyNWVlZTZlYWQ1ZjRkNjNkNTNkZGNiIgpkZXBlbmRlbmNpZXMgPSBbCiAiY29uc3Qtb2lkIiwKICJ6ZXJvaXplIiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJkaWdlc3QiCnZlcnNpb24gPSAiMC4xMC43Igpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjllZDlhMjgxZjdiYzliNzU3NmU2MTQ2OGJhNjE1YTY2YTVjOGNmZGZmNDI0MjBhNzBhYTgyNzAxYTNiMWUyOTIiCmRlcGVuZGVuY2llcyA9IFsKICJibG9jay1idWZmZXIiLAogImNyeXB0by1jb21tb24iLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gImVkMjU1MTkiCnZlcnNpb24gPSAiMi4yLjMiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiMTE1NTMxYmFiYzEyOTY5NmE1OGM2NGE0ZmVmMGE4YmY5ZTk2OTg2MjlmYjk3ZTllNDA3NjdkMjM1Y2ZiY2Q1MyIKZGVwZW5kZW5jaWVzID0gWwogInBrY3M4IiwKICJzaWduYXR1cmUiLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gImVkMjU1MTktZGFsZWsiCnZlcnNpb24gPSAiMi4yLjAiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiNzBlNzk2YzA4MWNlZTY3ZGM3NTVlMWEzNmEwYTE3MmI4OTdmYWI4NWZjM2Y2YmM0ODMwNzk5MWY2NGU0ZWNhOSIKZGVwZW5kZW5jaWVzID0gWwogImN1cnZlMjU1MTktZGFsZWsiLAogImVkMjU1MTkiLAogInNlcmRlIiwKICJzaGEyIiwKICJzdWJ0bGUiLAogInplcm9pemUiLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gImVpdGhlciIKdmVyc2lvbiA9ICIxLjE1LjAiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiNDhjNzU3OTQ4YzVlZGUwZTQ2MTc3YjdhZGQyZTY3MTU1ZjcwZTMzYzA3ZmVhODI4NGRmNjU3NmRhNzBiMzcxOSIKCltbcGFja2FnZV1dCm5hbWUgPSAiZW5kaWFuLXR5cGUiCnZlcnNpb24gPSAiMC4xLjIiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiYzM0ZjA0NjY2ZDgzNWZmNWQ2MmUwNThjMzk5NTE0N2MwNmY0MmZlODZmZjA1MzMzNzYzMmJjYTgzZTQyNzAyZCIKCltbcGFja2FnZV1dCm5hbWUgPSAiZXF1aXZhbGVudCIKdmVyc2lvbiA9ICIxLjAuMiIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICI4NzdhNGFjZTg3MTNiMGJjZjJhNGU3ZWVjODI1MjljMDI5ZjFkMDYxOTg4NmQxODE0NWZlYTk2YzNmZmU1YzBmIgoKW1twYWNrYWdlXV0KbmFtZSA9ICJmaWF0LWNyeXB0byIKdmVyc2lvbiA9ICIwLjIuOSIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICIyOGRlYTUxOWE5Njk1Yjk5NzcyMTY4NzlhM2ViZmRkZjkyZjFjMDhjMDVkOTg0Zjg5OTZhZWNkNmVjZGM4MTFkIgoKW1twYWNrYWdlXV0KbmFtZSA9ICJmb2xkaGFzaCIKdmVyc2lvbiA9ICIwLjEuNSIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICJkOWM0ZjVkYWM1ZTE1YzI0ZWI5OTljMjYxODFhNmNhNDBiMzlmZTk0NmNiZTRjMjYzYzcyMDk0NjdiYzgzYWYyIgoKW1twYWNrYWdlXV0KbmFtZSA9ICJnZW5lcmljLWFycmF5Igp2ZXJzaW9uID0gIjAuMTQuNyIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICI4NTY0OWNhNTFmZDcyMjcyZDc4MjFhZGFmMjc0YWQ5MWMyODgyNzc3MTNkOWMxODgyMGQ4NDk5YTdmZjY5ZTlhIgpkZXBlbmRlbmNpZXMgPSBbCiAidHlwZW51bSIsCiAidmVyc2lvbl9jaGVjayIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAiZ2VuZXJpYy1hcnJheSIKdmVyc2lvbiA9ICIxLjMuNSIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICJlYWY1N2M0OWE5NWZkMWZlMjRiOTBiMzAzM2JlZTZkYzdlOGYxMjg4ZDUxNDk0Y2I0NGU2MjdjMjk1ZTM4NTQyIgpkZXBlbmRlbmNpZXMgPSBbCiAicnVzdHZlcnNpb24iLAogInR5cGVudW0iLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gImdldHJhbmRvbSIKdmVyc2lvbiA9ICIwLjIuMTciCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiZmYyYWJjMDBiZTdmY2E2ZWJjNDc0NTI0Njk3YWUyNzZhZDg0N2FkMGE2YjNmYWE0YmNiMDI3ZTlhNDYxNGFkMCIKZGVwZW5kZW5jaWVzID0gWwogImNmZy1pZiIsCiAibGliYyIsCiAid2FzaSIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAiaGFzaGJyb3duIgp2ZXJzaW9uID0gIjAuMTUuNSIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICI5MjI5Y2ZlNTNkZmQ2OWYwNjA5YTQ5ZjY1NDYxYmQ5MzAwMWVhMWVmODg5Y2Q1NTI5ZGQxNzY1OTNmNTMzOGExIgpkZXBlbmRlbmNpZXMgPSBbCiAiZm9sZGhhc2giLAogInNlcmRlIiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJoYXNoYnJvd24iCnZlcnNpb24gPSAiMC4xNi4xIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjg0MWQxY2M5YmVkN2Y5MjM2ZjMyMWRmOTc3MDMwMzczZjRhNDE2M2FlMWE3ZGJmZTFhNTFhMmMxYTUxZDkxMDAiCgpbW3BhY2thZ2VdXQpuYW1lID0gImhlY2siCnZlcnNpb24gPSAiMC41LjAiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiMjMwNGUwMDk4M2Y4N2ZmYjM4YjU1YjQ0NGI1ZTNiNjBhODg0YjVkMzBjMGZjYTdkODJmZTMzNDQ5YmJlNTVlYSIKCltbcGFja2FnZV1dCm5hbWUgPSAiaGV4Igp2ZXJzaW9uID0gIjAuNC4zIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjdmMjQyNTRhYTlhNTRiNWM4NThlYWVlMmY1YmNjZGI0NmFhZjBlNDg2YTU5NWVkNWZkOGY4NmJhNTUyMzJhNzAiCgpbW3BhY2thZ2VdXQpuYW1lID0gImhleC1saXRlcmFsIgp2ZXJzaW9uID0gIjAuNC4xIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjZmZTIyNjdkNGVkNDliYzA3YjYzODAxNTU5YmUyOGM3MThlYTA2YzQ3MzhiN2EwM2M5NGRmNzM4NmQyY2RlNDYiCgpbW3BhY2thZ2VdXQpuYW1lID0gImluZGV4bWFwIgp2ZXJzaW9uID0gIjIuMTMuMCIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICI3NzE0ZTcwNDM3YTdkYzNhYzhlYjdlNmY4ZGY3NWZkOGViNDIyNjc1ZmM3Njc4YWZmNzM2NDMwMTA5MmIxMDE3IgpkZXBlbmRlbmNpZXMgPSBbCiAiZXF1aXZhbGVudCIsCiAiaGFzaGJyb3duIDAuMTYuMSIsCiAic2VyZGUiLAogInNlcmRlX2NvcmUiLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gImlzX3Rlcm1pbmFsX3BvbHlmaWxsIgp2ZXJzaW9uID0gIjEuNzAuMiIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICJhNmNiMTM4YmI3OWExNDZjMWJkNDYwMDA1NjIzZTE0MmVmMDE4MWUzZDAyMTljYjQ5M2UwMmY3ZDA4YTM1Njk1IgoKW1twYWNrYWdlXV0KbmFtZSA9ICJpdGVydG9vbHMiCnZlcnNpb24gPSAiMC4xNC4wIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjJiMTkyYzc4MjAzN2ZhZGQ5Y2ZhNzU1NDgzMTA0ODhhYWJkYmYzZDJkYTczODg1YjMxYmQwYWJkMDMzNTEyODUiCmRlcGVuZGVuY2llcyA9IFsKICJlaXRoZXIiLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gIml0b2EiCnZlcnNpb24gPSAiMS4wLjE3Igpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjkyZWNjNjYxODE4MWRlZjA0NTczOTJjY2QwZWU1MTE5OGUwNjVlMDE2ZDFkNTI3YTdhYzFiNmRjN2MxZjA5ZDIiCgpbW3BhY2thZ2VdXQpuYW1lID0gImtlY2NhayIKdmVyc2lvbiA9ICIwLjEuNSIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICJlY2MyYWY5YTExMTljNTFmMTJhMTQ2MDdlNzgzY2I5NzdiZGU1OGJjMDY5ZmYwYzNkYTEwOTVlNjM1ZDcwNjU0IgpkZXBlbmRlbmNpZXMgPSBbCiAiY3B1ZmVhdHVyZXMiLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gImxhenlfc3RhdGljIgp2ZXJzaW9uID0gIjEuNS4wIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gImJiZDJiY2I0Yzk2M2YyZGRhZTA2YTJlZmM3ZTlmMzU5MTMxMjQ3M2M1MGM2Njg1ZTFmMjk4MDY4MzE2ZTY2ZmUiCgpbW3BhY2thZ2VdXQpuYW1lID0gImxlYjEyOGZtdCIKdmVyc2lvbiA9ICIwLjEuMCIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICIwOWVkZDllOGI1NGU0OWU1ODdlNGY2Mjk1YTdkMjljM2VhOTRkNDY5Y2I0MGFiOGNhNzBiMjg4MjQ4YTgxZGIyIgoKW1twYWNrYWdlXV0KbmFtZSA9ICJsaWJjIgp2ZXJzaW9uID0gIjAuMi4xODAiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiYmNjMzVhMzg1NDRhODkxYTVmN2M4NjVhY2E1NDhhOTgyY2NiM2I4NjUwYTViMDZkMGZkMzNhMTAyODNjNTZmYyIKCltbcGFja2FnZV1dCm5hbWUgPSAibG9nIgp2ZXJzaW9uID0gIjAuNC4yOSIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICI1ZTUwMzJlMjQwMTkwNDVjNzYyZDNjMGYyOGY1YjZiOGJiZjM4NTYzYTY1OTA4Mzg5YmY3OTc4NzU4OTIwODk3IgoKW1twYWNrYWdlXV0KbmFtZSA9ICJtZW1jaHIiCnZlcnNpb24gPSAiMi43LjYiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiZjUyYjAwZDM5OTYxZmM1YjI3MzZlYTg1M2M5Y2M4NjIzOGUxNjUwMTdhNDkzZDFkNWM4ZWFjNmJkYzRjYzI3MyIKCltbcGFja2FnZV1dCm5hbWUgPSAibXVsdGl2ZXJzeC1jaGFpbi1jb3JlIgp2ZXJzaW9uID0gIjAuMTQuMCIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICI3M2YxZjA1MjZjYTA5NDE4NTg0Nzc3NmMyYzAzZGU5N2VhMDgyNzQzZWU0ZTZmNzk5ODYwYWQ2N2U3ZDc4MjUwIgpkZXBlbmRlbmNpZXMgPSBbCiAiYml0ZmxhZ3MiLAogIm11bHRpdmVyc3gtc2MtY29kZWMiLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gIm11bHRpdmVyc3gtY2hhaW4tc2NlbmFyaW8tZm9ybWF0Igp2ZXJzaW9uID0gIjAuMjMuMSIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICJlNjg4YTBkMzJhNTg3Mzg3MWNkMTkyMjQxODZlY2JmYWEwYjI2ZjdjOGVjNjJmMGNhMzVkN2VlOWQ0NjE2YjQwIgpkZXBlbmRlbmNpZXMgPSBbCiAiYmVjaDMyIiwKICJoZXgiLAogIm51bS1iaWdpbnQiLAogIm51bS10cmFpdHMiLAogInNlcmRlIiwKICJzZXJkZV9qc29uIiwKICJzaGEzIiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJtdWx0aXZlcnN4LWNoYWluLXZtIgp2ZXJzaW9uID0gIjAuMTQuMCIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICI2ZDllMDQwOGMzNDFiYmQxZDczMzY1YjJkZDhhOTZiMGMyYTQxZjk0NThkM2RjMzUxOWY2NDI3NTc1NGU3OTcxIgpkZXBlbmRlbmNpZXMgPSBbCiAiYml0ZmxhZ3MiLAogImNvbG9yZWQiLAogImVkMjU1MTktZGFsZWsiLAogImhleCIsCiAiaGV4LWxpdGVyYWwiLAogIml0ZXJ0b29scyIsCiAibXVsdGl2ZXJzeC1jaGFpbi1jb3JlIiwKICJtdWx0aXZlcnN4LWNoYWluLXZtLWV4ZWN1dG9yIiwKICJudW0tYmlnaW50IiwKICJudW0tdHJhaXRzIiwKICJyYW5kIiwKICJyYW5kX3NlZWRlciIsCiAic2hhMiIsCiAic2hhMyIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAibXVsdGl2ZXJzeC1jaGFpbi12bS1leGVjdXRvciIKdmVyc2lvbiA9ICIwLjMuMCIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICI1MWNjZTdhZTM4Njk2MGZiZjVlODVhZmU0MGNhMTZkNjNmOTI2ZjA2MjBlZDFhMzZiMDE5MjEyYjI4ZTE3MjE5IgoKW1twYWNrYWdlXV0KbmFtZSA9ICJtdWx0aXZlcnN4LXNjIgp2ZXJzaW9uID0gIjAuNTcuMSIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICIyMDYwMmQ0ZmMzMzYwOTJmYWFkYzAzYjZiNDQ1YzRiYjVlNGRiYzRjODZmYjUzNzI2ZTQ2ZWNhNjcwNzA4MTNhIgpkZXBlbmRlbmNpZXMgPSBbCiAiYml0ZmxhZ3MiLAogImdlbmVyaWMtYXJyYXkgMS4zLjUiLAogImhleC1saXRlcmFsIiwKICJtdWx0aXZlcnN4LWNoYWluLWNvcmUiLAogIm11bHRpdmVyc3gtc2MtY29kZWMiLAogIm11bHRpdmVyc3gtc2MtZGVyaXZlIiwKICJudW0tdHJhaXRzIiwKICJ1bndyYXAtaW5mYWxsaWJsZSIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAibXVsdGl2ZXJzeC1zYy1jb2RlYyIKdmVyc2lvbiA9ICIwLjIyLjAiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiNDNlMGYyNGEwMjBhZGYzMmZhZmZhZTFjNTc0NzVjNmI3Mjg1YTMyMTZkMWEzNmU0YTczNjE3NjM5NzIxYzJlMCIKZGVwZW5kZW5jaWVzID0gWwogImFycmF5dmVjIiwKICJiaXRmbGFncyIsCiAibXVsdGl2ZXJzeC1zYy1jb2RlYy1kZXJpdmUiLAogIm51bS1iaWdpbnQiLAogInVud3JhcC1pbmZhbGxpYmxlIiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJtdWx0aXZlcnN4LXNjLWNvZGVjLWRlcml2ZSIKdmVyc2lvbiA9ICIwLjIyLjAiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiN2M1ZjE3ZDVlZTIzNjU3ZDVjZGRjN2Y0NDcxOTI1YjVhNDlmN2UyNTMwNmY4YmJhNjU2ZWE2OTE3YWNjNjI5ZCIKZGVwZW5kZW5jaWVzID0gWwogImhleCIsCiAicHJvYy1tYWNybzIiLAogInF1b3RlIiwKICJzeW4iLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gIm11bHRpdmVyc3gtc2MtZGVyaXZlIgp2ZXJzaW9uID0gIjAuNTcuMSIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICIwZDQ0ZDA4ZDMzNzZjMTk5ZThjMzkxY2MwNzc1MmQyODIyY2QyODk2OTNkYTUzMTlkNzkwNTU5OTUwMWU1NTdmIgpkZXBlbmRlbmNpZXMgPSBbCiAiaGV4IiwKICJwcm9jLW1hY3JvMiIsCiAicXVvdGUiLAogInJhZGl4X3RyaWUiLAogInN5biIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAibXVsdGl2ZXJzeC1zYy1tZXRhLWxpYiIKdmVyc2lvbiA9ICIwLjU3LjEiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiNDM4MTQ5ZjQ1NTM4MmU2NGQxZDM4M2IyY2I1YmVlMTQ0YzIxNWQyOTQzZDZhMGFlMDZhNTBkMzIyNTY4MGZiYiIKZGVwZW5kZW5jaWVzID0gWwogImNsYXAiLAogImNvbG9yZWQiLAogImNvbnZlcnRfY2FzZSIsCiAiaGV4IiwKICJsYXp5X3N0YXRpYyIsCiAibXVsdGl2ZXJzeC1zYyIsCiAicnVzdGNfdmVyc2lvbiIsCiAic2VtdmVyIiwKICJzZXJkZSIsCiAic2VyZGVfanNvbiIsCiAidG9tbCIsCiAid2FzbXBhcnNlciAwLjIyNy4xIiwKICJ3YXNtcHJpbnRlciIsCiAid2F0IiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJtdWx0aXZlcnN4LXNjLXNjZW5hcmlvIgp2ZXJzaW9uID0gIjAuNTcuMSIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICIyYTk2ZGZjNzgwMzBmZWMwZjA1OTI4ZDJmYTAzMzRkMWVlYWFhYzJkZjNiODE5MTgyODc2ZTQwMjQ2MWU4YzdlIgpkZXBlbmRlbmNpZXMgPSBbCiAiYmFzZTY0IiwKICJiZWNoMzIiLAogImNvbG9yZWQiLAogImhleCIsCiAiaXRlcnRvb2xzIiwKICJsb2ciLAogIm11bHRpdmVyc3gtY2hhaW4tc2NlbmFyaW8tZm9ybWF0IiwKICJtdWx0aXZlcnN4LWNoYWluLXZtIiwKICJtdWx0aXZlcnN4LWNoYWluLXZtLWV4ZWN1dG9yIiwKICJtdWx0aXZlcnN4LXNjIiwKICJtdWx0aXZlcnN4LXNjLW1ldGEtbGliIiwKICJudW0tYmlnaW50IiwKICJudW0tdHJhaXRzIiwKICJwYXRoZGlmZiIsCiAic2VyZGUiLAogInNlcmRlX2pzb24iLAogInNoYTIiLAogInVud3JhcC1pbmZhbGxpYmxlIiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJuaWJibGVfdmVjIgp2ZXJzaW9uID0gIjAuMS4wIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjc3YTVkODNkZjlmMzZmZTIzZjBjMzY0OGM2YmJiOGIwMjk4YmI1ZjE5MzljOGYyNzA0NDMxMzcxZjRiODRkNDMiCmRlcGVuZGVuY2llcyA9IFsKICJzbWFsbHZlYyIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAibnVtLWJpZ2ludCIKdmVyc2lvbiA9ICIwLjQuNiIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICJhNWU0NGY3MjNmMTEzM2M5ZGVhYzY0Njc2MzU3OWZkYjNhYzc0NWU0MThmMmE3YWY5Y2QwYzQzMWRhMWYyMGI5IgpkZXBlbmRlbmNpZXMgPSBbCiAibnVtLWludGVnZXIiLAogIm51bS10cmFpdHMiLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gIm51bS1pbnRlZ2VyIgp2ZXJzaW9uID0gIjAuMS40NiIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICI3OTY5NjYxZmQyOTU4YTVjYjA5NmU1NmM4ZTFhZDA0NDRhYzJiYmNkMDA2MWJkMjg2NjA0ODVhNDQ4Nzk4NThmIgpkZXBlbmRlbmNpZXMgPSBbCiAibnVtLXRyYWl0cyIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAibnVtLXRyYWl0cyIKdmVyc2lvbiA9ICIwLjIuMTkiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiMDcxZGZjMDYyNjkwZTkwYjczNGMwYjIyNzNjZTcyYWQwZmZhOTVmMGM3NDU5NmJjMjUwZGNmZDk2MDI2Mjg0MSIKZGVwZW5kZW5jaWVzID0gWwogImF1dG9jZmciLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gIm9uY2VfY2VsbF9wb2x5ZmlsbCIKdmVyc2lvbiA9ICIxLjcwLjIiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiMzg0YjhhYjZkMzcyMTVmM2M1MzAxYTk1YTRhY2NiNWQ2NGFhNjA3ZjFmY2IyNmExMWI1MzAzODc4NDUxYjRmZSIKCltbcGFja2FnZV1dCm5hbWUgPSAicGF0aGRpZmYiCnZlcnNpb24gPSAiMC4yLjMiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiZGY5NGNlMjEwZTViYzEzY2I2NjUxNDc5ZmE0OGQxNGY2MDFkOTg1OGNmZTA0NjdmNDNhZTE1NzAyM2I5MzhkMyIKCltbcGFja2FnZV1dCm5hbWUgPSAicGtjczgiCnZlcnNpb24gPSAiMC4xMC4yIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gImY5NTBiMjM3Nzg0NWNlYmU1Y2Y4YjUxNjVjYjNjYzFhNWUwZmE1Y2ZhM2UxZjdmNTU3MDdkOGZkODJlMGE3YjciCmRlcGVuZGVuY2llcyA9IFsKICJkZXIiLAogInNwa2kiLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gInBwdi1saXRlODYiCnZlcnNpb24gPSAiMC4yLjIxIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjg1ZWFlM2M0ZWQyZjUwZGNmZTcyNjQzZGE0YmVmYzMwZGVhZGI0NThhOWI1OTBkNzIwY2RlMmYyYjFlOTdkYTkiCmRlcGVuZGVuY2llcyA9IFsKICJ6ZXJvY29weSIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAicHJvYy1tYWNybzIiCnZlcnNpb24gPSAiMS4wLjk0Igpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gImEzMTk3MTc1MmU3MGI4YjI2ODZkN2U0NmVjMTdmYjM4ZGFkNDA1MWQ5NDAyNGM4OGRmNDliNjY3Y2FlYTljODQiCmRlcGVuZGVuY2llcyA9IFsKICJ1bmljb2RlLWlkZW50IiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJxdW90ZSIKdmVyc2lvbiA9ICIxLjAuMzkiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiYzFmMTkxNGNlOTA5ZTE2NThkOTkwNzkxM2I0YjkxOTQ3NDMwYzdkOWJlNTk4YjE1YTE5MTI5MzViOGMwNDgwMSIKZGVwZW5kZW5jaWVzID0gWwogInByb2MtbWFjcm8yIiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJyYWRpeF90cmllIgp2ZXJzaW9uID0gIjAuMi4xIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gImMwNjljMTc5ZmNkYzZhMmZlMjRkOGQxODMwNWNmMDg1ZmRiZDRmOTIyYzA0MTk0M2UyMDM2ODVkNmExYzU4ZmQiCmRlcGVuZGVuY2llcyA9IFsKICJlbmRpYW4tdHlwZSIsCiAibmliYmxlX3ZlYyIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAicmFuZCIKdmVyc2lvbiA9ICIwLjguNSIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICIzNGFmOGQxYTBlMjU5MjRiYzViN2M0M2MwNzljOTQyMzM5ZDhmMGE4YjU3YzM5MDQ5YmVmNTgxYjQ2MzI3NDA0IgpkZXBlbmRlbmNpZXMgPSBbCiAibGliYyIsCiAicmFuZF9jaGFjaGEiLAogInJhbmRfY29yZSIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAicmFuZF9jaGFjaGEiCnZlcnNpb24gPSAiMC4zLjEiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiZTZjMTBhNjNhMGZhMzIyNTJiZTQ5ZDIxZTc3MDlkNGQ0YmFmOGQyMzFjMmRiY2UxZWFhODE0MWI5YjEyN2Q4OCIKZGVwZW5kZW5jaWVzID0gWwogInBwdi1saXRlODYiLAogInJhbmRfY29yZSIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAicmFuZF9jb3JlIgp2ZXJzaW9uID0gIjAuNi40Igpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gImVjMGJlNDc5NWUyZjZhMjgwNjliZWMwYjVmZjNlMmFjOWJhZmM5OWU2YTlhN2RjMzU0Nzk5NmM1YzgxNjkyMmMiCmRlcGVuZGVuY2llcyA9IFsKICJnZXRyYW5kb20iLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gInJhbmRfc2VlZGVyIgp2ZXJzaW9uID0gIjAuMy4wIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjRhOWZlYmU2NDFkMjg0MmZmYzc2ZWU5NjI2NjhhMTc1Nzg3NjdjNGUwMTczNWU0ODAyYjIxZWQ5YTI0YjJlNGUiCmRlcGVuZGVuY2llcyA9IFsKICJyYW5kX2NvcmUiLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gInJlcXVlc3RzIgp2ZXJzaW9uID0gIjAuMC4wIgpkZXBlbmRlbmNpZXMgPSBbCiAibXVsdGl2ZXJzeC1zYyIsCiAibXVsdGl2ZXJzeC1zYy1zY2VuYXJpbyIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAicnVzdGNfdmVyc2lvbiIKdmVyc2lvbiA9ICIwLjQuMSIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICJjZmNiM2EyMmVmNDZlODViNDVkZTZlZTdlNzlkMDYzMzE5ZWJiNjU5NGZhYWZjZjFjMjI1ZWE5MmFiNmU5YjkyIgpkZXBlbmRlbmNpZXMgPSBbCiAic2VtdmVyIiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJydXN0dmVyc2lvbiIKdmVyc2lvbiA9ICIxLjAuMjIiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiYjM5Y2RlZjBmYTgwMGZjNDQ1MjVjODRjY2I1NGEwMjk5NjFhODIxNWY5NjE5NzUzNjM1YTljMGQyNTM4ZDQ2ZCIKCltbcGFja2FnZV1dCm5hbWUgPSAic2VtdmVyIgp2ZXJzaW9uID0gIjEuMC4yNyIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICJkNzY3ZWIwYWFiYzg4MGIyOTk1NmMzNTczNDE3MGYyNmVkNTUxYTg1OWRiZDM2MWQxNDBjZGJlY2E2MWFiMWUyIgoKW1twYWNrYWdlXV0KbmFtZSA9ICJzZXJkZSIKdmVyc2lvbiA9ICIxLjAuMjI4Igpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjlhOGU5NGVhN2YzNzhiZDMyY2JiZDM3MTk4YTRhOTE0MzYxODBjNWJiNDcyNDExZTQ4YjVlYzJlMjEyNGFlOWUiCmRlcGVuZGVuY2llcyA9IFsKICJzZXJkZV9jb3JlIiwKICJzZXJkZV9kZXJpdmUiLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gInNlcmRlX2NvcmUiCnZlcnNpb24gPSAiMS4wLjIyOCIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICI0MWQzODVjN2Q0Y2E1OGU1OWZjNzMyYWYyNWMzOTgzYjY3YWM4NTJjMWEyNTAwMGFmZTExNzVkZTQ1OGI2N2FkIgpkZXBlbmRlbmNpZXMgPSBbCiAic2VyZGVfZGVyaXZlIiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJzZXJkZV9kZXJpdmUiCnZlcnNpb24gPSAiMS4wLjIyOCIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICJkNTQwZjIyMGQzMTg3MTczZGEyMjBmODg1YWI2NjYwODM2N2I2NTc0ZTkyNTAxMWE5MzUzZTRiYWRkYTkxZDc5IgpkZXBlbmRlbmNpZXMgPSBbCiAicHJvYy1tYWNybzIiLAogInF1b3RlIiwKICJzeW4iLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gInNlcmRlX2pzb24iCnZlcnNpb24gPSAiMS4wLjE0OSIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICI4M2ZjMDM5NDczYzU1OTVhY2U4NjBkOGM0ZmFmYTIyMGZmNDc0YjNmYzZiZmRiNDI5MzMyN2YxYTM3ZTk0ZDg2IgpkZXBlbmRlbmNpZXMgPSBbCiAiaXRvYSIsCiAibWVtY2hyIiwKICJzZXJkZSIsCiAic2VyZGVfY29yZSIsCiAiem1paiIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAic2VyZGVfc3Bhbm5lZCIKdmVyc2lvbiA9ICIwLjYuOSIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICJiZjQxZTBjZmFmNzIyNmRjYTE1ZTgxOTcxNzJjMjk1YTc4Mjg1N2ZjYjk3ZmFkMTgwOGExNjY4NzBkZWU3NWEzIgpkZXBlbmRlbmNpZXMgPSBbCiAic2VyZGUiLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gInNoYTIiCnZlcnNpb24gPSAiMC4xMC45Igpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gImE3NTA3ZDgxOTc2OWQwMWEzNjVhYjcwNzc5NGE0MDg0MzkyYzgyNGY1NGE3YTZhNzg2MmY4YzNkMDg5MmIyODMiCmRlcGVuZGVuY2llcyA9IFsKICJjZmctaWYiLAogImNwdWZlYXR1cmVzIiwKICJkaWdlc3QiLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gInNoYTMiCnZlcnNpb24gPSAiMC4xMC44Igpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjc1ODcyZDI3OGE4ZjM3ZWY4N2ZhMGRkYmRhNzgwMjYwNWNiMTgzNDQ0OTc5NDk4NjJjMGQ0ZGNiMjkxZWJhNjAiCmRlcGVuZGVuY2llcyA9IFsKICJkaWdlc3QiLAogImtlY2NhayIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAic2lnbmF0dXJlIgp2ZXJzaW9uID0gIjIuMi4wIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjc3NTQ5Mzk5NTUyZGU0NWE4OThhNTgwYzFiNDFkNDQ1YmY3MzBkZjg2N2NjNDRlNmMwMjMzYmJjNGI4MzI5ZGUiCmRlcGVuZGVuY2llcyA9IFsKICJyYW5kX2NvcmUiLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gInNtYWxsdmVjIgp2ZXJzaW9uID0gIjEuMTUuMSIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICI2N2IxYjdhM2I1ZmU0ZjEzNzY4ODcxODQwNDVmY2Y0NWM2OWU5MmFmNzM0YjdhYWRkYzA1ZmI3NzdiNmZiZDAzIgoKW1twYWNrYWdlXV0KbmFtZSA9ICJzcGtpIgp2ZXJzaW9uID0gIjAuNy4zIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gImQ5MWVkNmM4NThiMDFmOTQyY2Q1NmIzN2E5NGIzZTBhMTc5ODI5MDMyN2QxMjM2ZTRkOWNmNGVhY2E0NGQyOWQiCmRlcGVuZGVuY2llcyA9IFsKICJiYXNlNjRjdCIsCiAiZGVyIiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJzdHJzaW0iCnZlcnNpb24gPSAiMC4xMS4xIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjdkYThiNTczNjg0NWQ5ZjJmY2I4MzdlYTVkOWUyNjI4NTY0YjNiMDQzYTcwOTQ4YTNmMGI3Nzg4MzhjNWZiNGYiCgpbW3BhY2thZ2VdXQpuYW1lID0gInN1YnRsZSIKdmVyc2lvbiA9ICIyLjYuMSIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICIxM2MyYmRkZWNjNTdiMzg0ZGVlMTg2NTIzNThmYjIzMTcyZmFjYjhhMmM1MWNjYzEwZDc0YzE1N2JkZWEzMjkyIgoKW1twYWNrYWdlXV0KbmFtZSA9ICJzeW4iCnZlcnNpb24gPSAiMi4wLjEwMCIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICJiMDlhNDRhY2NhZDgxZTFiYTFjZDc0YTMyNDYxYmE4OWRlZTg5MDk1YmExN2IzMmY1ZDAzNjgzYjFiMWZjMmEwIgpkZXBlbmRlbmNpZXMgPSBbCiAicHJvYy1tYWNybzIiLAogInF1b3RlIiwKICJ1bmljb2RlLWlkZW50IiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJ0ZXJtY29sb3IiCnZlcnNpb24gPSAiMS40LjEiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiMDY3OTRmOGY2YzVjODk4YjMyNzVhZWJlZmE2YjhhMWNiMjRjZDJjNmM3OTM5N2FiMTU3NzQ4MzdhMGJjNTc1NSIKZGVwZW5kZW5jaWVzID0gWwogIndpbmFwaS11dGlsIiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJ0b21sIgp2ZXJzaW9uID0gIjAuOC4yMyIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICJkYzFiZWI5OTZiOWQ4MzUyOWE5ZTc1YzE3YTE2ODY3NjdkMTQ4ZDcwNjYzMTQzYzc4NTRkOGI0YTA5Y2VkMzYyIgpkZXBlbmRlbmNpZXMgPSBbCiAiaW5kZXhtYXAiLAogInNlcmRlIiwKICJzZXJkZV9zcGFubmVkIiwKICJ0b21sX2RhdGV0aW1lIiwKICJ0b21sX2VkaXQiLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gInRvbWxfZGF0ZXRpbWUiCnZlcnNpb24gPSAiMC42LjExIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjIyY2RkYWY4OGY0ZmJjMTNjNTFhZWJiZjVmOGVjZWI1YzdjNWE5ZGEyYWM0MGExMzUxOWViNWIwYTBlOGYxMWMiCmRlcGVuZGVuY2llcyA9IFsKICJzZXJkZSIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAidG9tbF9lZGl0Igp2ZXJzaW9uID0gIjAuMjIuMjciCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiNDFmZThjNjYwYWU0MjU3ODg3Y2Y2NjM5NDg2MmQyMWRiY2E0YTZkZGQyNmYwNGEzNTYwNDEwNDA2YTJmODE5YSIKZGVwZW5kZW5jaWVzID0gWwogImluZGV4bWFwIiwKICJzZXJkZSIsCiAic2VyZGVfc3Bhbm5lZCIsCiAidG9tbF9kYXRldGltZSIsCiAidG9tbF93cml0ZSIsCiAid2lubm93IiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJ0b21sX3dyaXRlIgp2ZXJzaW9uID0gIjAuMS4yIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjVkOTlmOGM5YTc3Mjc4ODRhZmU1MjJlOWJkNWVkYmZjOTFhMzMxMmIzNmE3N2I1ZmI4OTI2ZTRjMzFhNDE4MDEiCgpbW3BhY2thZ2VdXQpuYW1lID0gInR5cGVudW0iCnZlcnNpb24gPSAiMS4xOS4wIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjU2MmQ0ODEwNjZiZGUwNjU4Mjc2YTM1NDY3YzRhZjAwYmRjNmVlNzI2MzA1Njk4YTU1Yjg2ZTYxZDdhZDgyYmIiCgpbW3BhY2thZ2VdXQpuYW1lID0gInVuaWNvZGUtaWRlbnQiCnZlcnNpb24gPSAiMS4wLjIyIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjkzMTJmN2M0ZjZmZjkwNjliMTY1NDk4MjM0Y2U4YmU2NTgwNTljNjcyODYzMzY2N2M1MjZlMjdkYzJjZjFkZjUiCgpbW3BhY2thZ2VdXQpuYW1lID0gInVuaWNvZGUtc2VnbWVudGF0aW9uIgp2ZXJzaW9uID0gIjEuMTIuMCIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICJmNmNjZjI1MTIxMjExNGI1NDQzM2VjOTQ5ZmQ2YTc4NDEyNzVmOWFkYTIwZGRkZDJmMjllOWNlZWE0NTAxNDkzIgoKW1twYWNrYWdlXV0KbmFtZSA9ICJ1bmljb2RlLXdpZHRoIgp2ZXJzaW9uID0gIjAuMi4yIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gImI0YWMwNDhkNzFlZGU3ZWU3NmQ1ODU1MTdhZGQ0NWRhNTMwNjYwZWY0MzkwZTQ5YjA5ODczM2M2ZTg5N2YyNTQiCgpbW3BhY2thZ2VdXQpuYW1lID0gInVud3JhcC1pbmZhbGxpYmxlIgp2ZXJzaW9uID0gIjAuMS41Igpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjE1MWFjMDk5NzhkM2MyODYyYzRlMzliNTU3ZjRlY2VlZTJjYzcyMTUwYmM0Y2I0ZjE2YWJmMDYxYjZlMzgxZmIiCgpbW3BhY2thZ2VdXQpuYW1lID0gInV0ZjhwYXJzZSIKdmVyc2lvbiA9ICIwLjIuMiIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICIwNmFiZGUzNjExNjU3YWRmNjZkMzgzZjAwYjA5M2Q3ZmFlY2M3ZmE1NzA3MWNjZTI1Nzg2NjBjOWYxMDEwODIxIgoKW1twYWNrYWdlXV0KbmFtZSA9ICJ2ZXJzaW9uX2NoZWNrIgp2ZXJzaW9uID0gIjAuOS41Igpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjBiOTI4ZjMzZDk3NWZjNmFkOWY4NmM4ZjI4Mzg1M2FkMjZiZGQ1YjEwYjdmMTU0MmFhMmZhMTVlMjI4OTEwNWEiCgpbW3BhY2thZ2VdXQpuYW1lID0gIndhc2kiCnZlcnNpb24gPSAiMC4xMS4xK3dhc2ktc25hcHNob3QtcHJldmlldzEiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiY2NmM2VjNjUxYTg0N2ViMDFkZTczY2NhZDE1ZWI3ZDk5ZjgwNDg1ZGUwNDNlZmIyZjM3MGNkNjU0ZjRlYTQ0YiIKCltbcGFja2FnZV1dCm5hbWUgPSAid2FzbS1lbmNvZGVyIgp2ZXJzaW9uID0gIjAuMjQ0LjAiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiOTkwMDY1ZjJmZTYzMDAzZmUzMzdiOTMyY2ZiNWUzYjgwZTBiNGQwZjVmZjY1MGU2OTg1YjEwNDhmNjJjODMxOSIKZGVwZW5kZW5jaWVzID0gWwogImxlYjEyOGZtdCIsCiAid2FzbXBhcnNlciAwLjI0NC4wIiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJ3YXNtcGFyc2VyIgp2ZXJzaW9uID0gIjAuMjI3LjEiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiMGY1MWNhZDc3NGZiM2M5NDYxYWI5YmNjYzljNjJkZmI3Mzg4Mzk3YjVkZWRhMzFiZjQwZTgxMDhjY2Q2NzhiMiIKZGVwZW5kZW5jaWVzID0gWwogImJpdGZsYWdzIiwKICJoYXNoYnJvd24gMC4xNS41IiwKICJpbmRleG1hcCIsCiAic2VtdmVyIiwKICJzZXJkZSIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAid2FzbXBhcnNlciIKdmVyc2lvbiA9ICIwLjI0NC4wIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjQ3YjgwN2M3MmUxYmFjNjkzODJiM2E2ZmIzZGJlOGVhNGMwZWQ4N2ZmNTYyOWI4Njg1YWU2YjlhNjExMDI4ZmUiCmRlcGVuZGVuY2llcyA9IFsKICJiaXRmbGFncyIsCiAiaW5kZXhtYXAiLAogInNlbXZlciIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAid2FzbXByaW50ZXIiCnZlcnNpb24gPSAiMC4yMjcuMSIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICIzMjQ3NWEwNDU5ZGI1NjM5ZTk4OTIwNmRkODgzM2ZiMDcxMTBlYzA5MmE3Y2IzNDY4YzgyMzQxOTg5Y2FjNGQzIgpkZXBlbmRlbmNpZXMgPSBbCiAiYW55aG93IiwKICJ0ZXJtY29sb3IiLAogIndhc21wYXJzZXIgMC4yMjcuMSIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAid2FzdCIKdmVyc2lvbiA9ICIyNDQuMC4wIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gImIyZTdiOWY5ZTIzMzExMjc1OTIwZTNkNmI1NmQ2NDEzN2MxNjBjZjhhZjRmODRhNzI4M2IzNmNmZWNiZjRhY2IiCmRlcGVuZGVuY2llcyA9IFsKICJidW1wYWxvIiwKICJsZWIxMjhmbXQiLAogIm1lbWNociIsCiAidW5pY29kZS13aWR0aCIsCiAid2FzbS1lbmNvZGVyIiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJ3YXQiCnZlcnNpb24gPSAiMS4yNDQuMCIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICJiYmYzNWI4N2VkMzUyZjlhYjZjZDA3MzJhYmRlNWE2N2RkNjE1M2RmZDAyYzQ5M2U2MTQ1OTIxOGIxOTQ1NmZhIgpkZXBlbmRlbmNpZXMgPSBbCiAid2FzdCIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAid2luYXBpLXV0aWwiCnZlcnNpb24gPSAiMC4xLjExIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gImMyYTdiMWMwM2M4NzYxMjJhYTQzZjMwMjBlNmMzYzNlZTVjMDUwODFjOWEwMDczOWZhZjc1MDNhZWJhMTBkMjIiCmRlcGVuZGVuY2llcyA9IFsKICJ3aW5kb3dzLXN5cyAwLjYxLjIiLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gIndpbmRvd3MtbGluayIKdmVyc2lvbiA9ICIwLjIuMSIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICJmMDgwNTIyMmU1N2Y3NTIxZDZhNjJlMzZmYTkxNjNiYzg5MWFjZDQyMmY5NzFkZWZlOTdkNjRlNzBkMGE0ZmU1IgoKW1twYWNrYWdlXV0KbmFtZSA9ICJ3aW5kb3dzLXN5cyIKdmVyc2lvbiA9ICIwLjU5LjAiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiMWUzOGJjNGQ3OWVkNjdmZDA3NWJjYzI1MWExYzM5YjMyYTE3NzZiYmU5MmU1YmVmMWYwYmYxZjhjNTMxODUzYiIKZGVwZW5kZW5jaWVzID0gWwogIndpbmRvd3MtdGFyZ2V0cyIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAid2luZG93cy1zeXMiCnZlcnNpb24gPSAiMC42MS4yIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gImFlMTM3MjI5YmNiZDZjZGYwZjdiODBhMzFkZjYxNzY2MTQ1MDc3ZGRmNDk0MTZhNzI4YjAyY2IzOTIxZmYzZmMiCmRlcGVuZGVuY2llcyA9IFsKICJ3aW5kb3dzLWxpbmsiLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gIndpbmRvd3MtdGFyZ2V0cyIKdmVyc2lvbiA9ICIwLjUyLjYiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiOWI3MjRmNzI3OTZlMDM2YWI5MGMxMDIxZDQ3ODBkNGQzZDY0OGFjYTU5ZTQ5MWU2Yjk4ZTcyNWI4NGU5OTk3MyIKZGVwZW5kZW5jaWVzID0gWwogIndpbmRvd3NfYWFyY2g2NF9nbnVsbHZtIiwKICJ3aW5kb3dzX2FhcmNoNjRfbXN2YyIsCiAid2luZG93c19pNjg2X2dudSIsCiAid2luZG93c19pNjg2X2dudWxsdm0iLAogIndpbmRvd3NfaTY4Nl9tc3ZjIiwKICJ3aW5kb3dzX3g4Nl82NF9nbnUiLAogIndpbmRvd3NfeDg2XzY0X2dudWxsdm0iLAogIndpbmRvd3NfeDg2XzY0X21zdmMiLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gIndpbmRvd3NfYWFyY2g2NF9nbnVsbHZtIgp2ZXJzaW9uID0gIjAuNTIuNiIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICIzMmE0NjIyMTgwZTdhMGVjMDQ0YmI1NTU0MDRjODAwYmM5ZmQ5ZWMyNjJlYzE0N2VkZDU5ODljY2QwYzAyY2QzIgoKW1twYWNrYWdlXV0KbmFtZSA9ICJ3aW5kb3dzX2FhcmNoNjRfbXN2YyIKdmVyc2lvbiA9ICIwLjUyLjYiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiMDllYzJhN2JiMTUyZTIyNTJiNTNmYTc4MDMxNTAwMDc4Nzk1NDhiYzcwOWMwMzlkZjc2MjdjYWJiZDA1ZDQ2OSIKCltbcGFja2FnZV1dCm5hbWUgPSAid2luZG93c19pNjg2X2dudSIKdmVyc2lvbiA9ICIwLjUyLjYiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiOGU5YjVhZDVhYjgwMmU5N2ViOGUyOTVhYzY3MjBlNTA5ZWU0YzI0M2Y2OWQ3ODEzOTQwMTRlYmZlOGJiZmEwYiIKCltbcGFja2FnZV1dCm5hbWUgPSAid2luZG93c19pNjg2X2dudWxsdm0iCnZlcnNpb24gPSAiMC41Mi42Igpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjBlZWU1MmQzOGMwOTBiM2NhYTc2YzU2M2I4NmMzYTRiZDcxZWYxYTgxOTI4N2MxOWQ1ODZkNzMzNGFlOGVkNjYiCgpbW3BhY2thZ2VdXQpuYW1lID0gIndpbmRvd3NfaTY4Nl9tc3ZjIgp2ZXJzaW9uID0gIjAuNTIuNiIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICIyNDA5NDhiYzA1YzVlN2M2ZGFiYmEyOGJmODlkODlmZmNlM2UzMDMwMjI4MDllNzNkZWFlZmU0ZjZlYzU2YzY2IgoKW1twYWNrYWdlXV0KbmFtZSA9ICJ3aW5kb3dzX3g4Nl82NF9nbnUiCnZlcnNpb24gPSAiMC41Mi42Igpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjE0N2E1YzgwYWFiZmJmMGM3ZDkwMWNiNTg5NWQxZGUzMGVmMjkwN2ViMjFmYmJhYjI5Y2E5NGM1YjA4YjFhNzgiCgpbW3BhY2thZ2VdXQpuYW1lID0gIndpbmRvd3NfeDg2XzY0X2dudWxsdm0iCnZlcnNpb24gPSAiMC41Mi42Igpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjI0ZDViMjNkYzQxNzQxMjY3OTY4MTM5NmYyYjQ5ZjNkZThjMTQ3M2RlYjUxNmJkMzQ0MTA4NzJlZmY1MWVkMGQiCgpbW3BhY2thZ2VdXQpuYW1lID0gIndpbmRvd3NfeDg2XzY0X21zdmMiCnZlcnNpb24gPSAiMC41Mi42Igpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjU4OWY2ZGE4NGM2NDYyMDQ3NDdkMTI3MGEyYTU2NjFlYTY2ZWQxY2NlZDI2MzFkNTQ2ZmRmYjE1NTk1OWY5ZWMiCgpbW3BhY2thZ2VdXQpuYW1lID0gIndpbm5vdyIKdmVyc2lvbiA9ICIwLjcuMTQiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiNWE1MzY0ZTlkNzdmY2RlZWFhNjA2MmNlZDkyNmVlMzM4MWZhYTJlZTAyZDNlYjgzYTVjMjdhODgyNTU0MDgyOSIKZGVwZW5kZW5jaWVzID0gWwogIm1lbWNociIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAiemVyb2NvcHkiCnZlcnNpb24gPSAiMC44LjI3Igpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjA4OTQ4NzhhNWZhM2VkZmQ2ZGEzZjg4YzQ4MDVmNGM4NTU4ZTJiOTk2MjI3YTNkODY0ZjQ3ZmUxMWUzODI4MmMiCmRlcGVuZGVuY2llcyA9IFsKICJ6ZXJvY29weS1kZXJpdmUiLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gInplcm9jb3B5LWRlcml2ZSIKdmVyc2lvbiA9ICIwLjguMjciCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiODhkMmI4ZDljNjhhZDJiOWU0MzQwZDc4MzI3MTZhNGQyMWEyMmExMTU0Nzc3YWQ1NmVhNTVjNTFhOWNmMzgzMSIKZGVwZW5kZW5jaWVzID0gWwogInByb2MtbWFjcm8yIiwKICJxdW90ZSIsCiAic3luIiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJ6ZXJvaXplIgp2ZXJzaW9uID0gIjEuOC4yIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gImI5NzE1NGU2N2UzMmM4NTQ2NTgyNmU4YmNjMWM1OTQyOWFhYWYxMDdjMWU0YTllNTNjOGQ4Y2NkNWVmZjg4ZDAiCgpbW3BhY2thZ2VdXQpuYW1lID0gInptaWoiCnZlcnNpb24gPSAiMS4wLjE0Igpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gImJkOGYzZjUwYjg0OGRmMjhmODg3YWNiNjhlNDEyMDFiNWFlYTZiYzhhOGRhY2MwMGZiNDA2MzVmZjlhNzJmZWEiCg==",
- "module": ".",
- "dependencyDepth": 0,
- "isTestFile": false
- },
- {
- "path": "Cargo.toml",
- "content": "W3BhY2thZ2VdCm5hbWUgPSAicmVxdWVzdHMiCnZlcnNpb24gPSAiMC4wLjAiCmF1dGhvcnMgPSBbIkFuZHJlaSBNYXJpbmljYSA8YW5kcmVpLm1hcmluaWNhQG11bHRpdmVyc3guY29tPiJdCmVkaXRpb24gPSAiMjAyMSIKcHVibGlzaCA9IGZhbHNlCgpbbGliXQpwYXRoID0gInNyYy9saWIucnMiCgpbZGVwZW5kZW5jaWVzLm11bHRpdmVyc3gtc2NdCnZlcnNpb24gPSAiMC41Ny4xIgoKW2Rldi1kZXBlbmRlbmNpZXMubXVsdGl2ZXJzeC1zYy1zY2VuYXJpb10KdmVyc2lvbiA9ICIwLjU3LjEiCg==",
- "module": ".",
- "dependencyDepth": 0,
- "isTestFile": false
- },
- {
- "path": "meta/Cargo.lock",
- "content": "IyBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBAZ2VuZXJhdGVkIGJ5IENhcmdvLgojIEl0IGlzIG5vdCBpbnRlbmRlZCBmb3IgbWFudWFsIGVkaXRpbmcuCnZlcnNpb24gPSA0CgpbW3BhY2thZ2VdXQpuYW1lID0gImFuc3RyZWFtIgp2ZXJzaW9uID0gIjAuNi4yMSIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICI0M2Q1YjI4MWU3Mzc1NDQzODRlOTY5YTVjY2FkM2YxY2RkMjRiNDgwODZhMGZjMWIyYTUyNjJhMjZiOGY0ZjRhIgpkZXBlbmRlbmNpZXMgPSBbCiAiYW5zdHlsZSIsCiAiYW5zdHlsZS1wYXJzZSIsCiAiYW5zdHlsZS1xdWVyeSIsCiAiYW5zdHlsZS13aW5jb24iLAogImNvbG9yY2hvaWNlIiwKICJpc190ZXJtaW5hbF9wb2x5ZmlsbCIsCiAidXRmOHBhcnNlIiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJhbnN0eWxlIgp2ZXJzaW9uID0gIjEuMC4xMyIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICI1MTkyY2NhODAwNmYxZmQ0ZjcyMzc1MTZmNDBmYTE4M2JiMDdmOGZiZGZlZGFhMDAzNmRlNWVhOWIwYjQ1ZTc4IgoKW1twYWNrYWdlXV0KbmFtZSA9ICJhbnN0eWxlLXBhcnNlIgp2ZXJzaW9uID0gIjAuMi43Igpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjRlNzY0NDgyNGYwYWEyYzdiOTM4NDU3OTIzNGVmMTBlYjdlZmI2YTBkZWI4M2Y5NjMwYTQ5NTk0ZGQ5YzE1YzIiCmRlcGVuZGVuY2llcyA9IFsKICJ1dGY4cGFyc2UiLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gImFuc3R5bGUtcXVlcnkiCnZlcnNpb24gPSAiMS4xLjUiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiNDBjNDhmNzJmZDUzY2QyODkxMDRmYzY0MDk5YWJjYTczZGI0MTY2YWQ4NmVhMGI0MzQxYWJlNjVhZjgzZGFkYyIKZGVwZW5kZW5jaWVzID0gWwogIndpbmRvd3Mtc3lzIDAuNjEuMiIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAiYW5zdHlsZS13aW5jb24iCnZlcnNpb24gPSAiMy4wLjExIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjI5MWU2YTI1MGZmODZjZDRhODIwMTEyZmI4ODk4ODA4YTM2NmQ4ZjlmNThjZTE2ZDFmNTM4MzUzYWQ1NTc0N2QiCmRlcGVuZGVuY2llcyA9IFsKICJhbnN0eWxlIiwKICJvbmNlX2NlbGxfcG9seWZpbGwiLAogIndpbmRvd3Mtc3lzIDAuNjEuMiIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAiYW55aG93Igp2ZXJzaW9uID0gIjEuMC4xMDAiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiYTIzZWI2YjE2MTQzMThhODA3MWM5YjI1MjFmMzZiNDI0YjJjODNkYjVlYjNhMGZlYWQ0YTZjMDgwOWFmNmU2MSIKCltbcGFja2FnZV1dCm5hbWUgPSAiYXJyYXl2ZWMiCnZlcnNpb24gPSAiMC43LjYiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiN2MwMmQxMjNkZjAxN2VmY2RmYmQ3MzllZjgxNzM1YjM2YzViYTgzZWMzYzU5YzgwYTlkN2VjYzcxOGY5MmU1MCIKCltbcGFja2FnZV1dCm5hbWUgPSAiYXV0b2NmZyIKdmVyc2lvbiA9ICIxLjUuMCIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICJjMDg2MDZmOGMzY2JmNGNlNmVjOGUyOGZiMDAxNGEyYzA4NjcwOGZlOTU0ZWFhODg1Mzg0YTYxNjUxNzJlN2U4IgoKW1twYWNrYWdlXV0KbmFtZSA9ICJiaXRmbGFncyIKdmVyc2lvbiA9ICIyLjkuMCIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICI1YzgyMTQxMTViN2JmODQwOTlmMTMwOTMyNGU2MzE0MWQ0YzVkN2NjMjY4NjJmOTdhMGE4NTdkYmVmZTE2NWJkIgoKW1twYWNrYWdlXV0KbmFtZSA9ICJidW1wYWxvIgp2ZXJzaW9uID0gIjMuMTkuMSIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICI1ZGQ5ZGM3MzhiN2E4MzExYzdhZGUxNTI0MjQ5NzRkODExNWYyY2RhZDYxZThkYWI4ZGFjOWYyMzYyMjk4NTEwIgoKW1twYWNrYWdlXV0KbmFtZSA9ICJjbGFwIgp2ZXJzaW9uID0gIjQuNS41NCIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICJjNmU2ZmY5ZGNkNzljZmY1Y2Q5NjlhMTdhNTQ1ZDc5ZTg0YWIwODZlNDQ0MTAyYTU5MWUyODhhOGFhM2NlMzk0IgpkZXBlbmRlbmNpZXMgPSBbCiAiY2xhcF9idWlsZGVyIiwKICJjbGFwX2Rlcml2ZSIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAiY2xhcF9idWlsZGVyIgp2ZXJzaW9uID0gIjQuNS41NCIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICJmYTQyY2Y0ZDJiN2E0MWJjOGY2NjNhN2NhYjQwMzFlYmFmYTFiZjM4NzU3MDViZmFmODQ2NmRjNjBhYjUyYzAwIgpkZXBlbmRlbmNpZXMgPSBbCiAiYW5zdHJlYW0iLAogImFuc3R5bGUiLAogImNsYXBfbGV4IiwKICJzdHJzaW0iLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gImNsYXBfZGVyaXZlIgp2ZXJzaW9uID0gIjQuNS40OSIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICIyYTBiNTQ4N2FmZWFiMmRlYjJmZjRlMDNhODA3YWQxYTAzYWM1MzJmZjVhMmNlZTVkODY4ODQ0NDBjN2Y3NjcxIgpkZXBlbmRlbmNpZXMgPSBbCiAiaGVjayIsCiAicHJvYy1tYWNybzIiLAogInF1b3RlIiwKICJzeW4iLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gImNsYXBfbGV4Igp2ZXJzaW9uID0gIjAuNy43Igpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gImMzZTY0YjBjYzA0MzliMTJkZjJmYTY3OGVhZTg5YTFjNTZhNTI5ZmQwNjdhOTExNWY3ODI3ZjFmZmZkMjJiMzIiCgpbW3BhY2thZ2VdXQpuYW1lID0gImNvbG9yY2hvaWNlIgp2ZXJzaW9uID0gIjEuMC40Igpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gImIwNWI2MWRjNTExMmNiYjE3ZTRiNmNkNjE3OTBkOTg0NWQxMzg4ODM1NjM5MTYyNGNiZTdlNDFlZmVhYzFlNzUiCgpbW3BhY2thZ2VdXQpuYW1lID0gImNvbG9yZWQiCnZlcnNpb24gPSAiMy4wLjAiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiZmRlMGUwZWM5MGM5ZGZiM2I0YjFhMDg5MWE3ZGNkMGUyYmZmZGUyZjdlZmVkNWZlN2M5YmIwMGU1YmZiOTE1ZSIKZGVwZW5kZW5jaWVzID0gWwogIndpbmRvd3Mtc3lzIDAuNTkuMCIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAiY29udmVydF9jYXNlIgp2ZXJzaW9uID0gIjAuOC4wIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gImJhYWFhMGVjY2E1YjUxOTg3Yjk0MjNjY2RjOTcxNTE0ZGQ4YjBiYjdiNDA2MGI5ODNkMzY2NGRhZDNmMWY4OWYiCmRlcGVuZGVuY2llcyA9IFsKICJ1bmljb2RlLXNlZ21lbnRhdGlvbiIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAiZW5kaWFuLXR5cGUiCnZlcnNpb24gPSAiMC4xLjIiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiYzM0ZjA0NjY2ZDgzNWZmNWQ2MmUwNThjMzk5NTE0N2MwNmY0MmZlODZmZjA1MzMzNzYzMmJjYTgzZTQyNzAyZCIKCltbcGFja2FnZV1dCm5hbWUgPSAiZXF1aXZhbGVudCIKdmVyc2lvbiA9ICIxLjAuMiIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICI4NzdhNGFjZTg3MTNiMGJjZjJhNGU3ZWVjODI1MjljMDI5ZjFkMDYxOTg4NmQxODE0NWZlYTk2YzNmZmU1YzBmIgoKW1twYWNrYWdlXV0KbmFtZSA9ICJmb2xkaGFzaCIKdmVyc2lvbiA9ICIwLjEuNSIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICJkOWM0ZjVkYWM1ZTE1YzI0ZWI5OTljMjYxODFhNmNhNDBiMzlmZTk0NmNiZTRjMjYzYzcyMDk0NjdiYzgzYWYyIgoKW1twYWNrYWdlXV0KbmFtZSA9ICJnZW5lcmljLWFycmF5Igp2ZXJzaW9uID0gIjEuMy41Igpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gImVhZjU3YzQ5YTk1ZmQxZmUyNGI5MGIzMDMzYmVlNmRjN2U4ZjEyODhkNTE0OTRjYjQ0ZTYyN2MyOTVlMzg1NDIiCmRlcGVuZGVuY2llcyA9IFsKICJydXN0dmVyc2lvbiIsCiAidHlwZW51bSIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAiaGFzaGJyb3duIgp2ZXJzaW9uID0gIjAuMTUuNSIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICI5MjI5Y2ZlNTNkZmQ2OWYwNjA5YTQ5ZjY1NDYxYmQ5MzAwMWVhMWVmODg5Y2Q1NTI5ZGQxNzY1OTNmNTMzOGExIgpkZXBlbmRlbmNpZXMgPSBbCiAiZm9sZGhhc2giLAogInNlcmRlIiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJoYXNoYnJvd24iCnZlcnNpb24gPSAiMC4xNi4xIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjg0MWQxY2M5YmVkN2Y5MjM2ZjMyMWRmOTc3MDMwMzczZjRhNDE2M2FlMWE3ZGJmZTFhNTFhMmMxYTUxZDkxMDAiCgpbW3BhY2thZ2VdXQpuYW1lID0gImhlY2siCnZlcnNpb24gPSAiMC41LjAiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiMjMwNGUwMDk4M2Y4N2ZmYjM4YjU1YjQ0NGI1ZTNiNjBhODg0YjVkMzBjMGZjYTdkODJmZTMzNDQ5YmJlNTVlYSIKCltbcGFja2FnZV1dCm5hbWUgPSAiaGV4Igp2ZXJzaW9uID0gIjAuNC4zIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjdmMjQyNTRhYTlhNTRiNWM4NThlYWVlMmY1YmNjZGI0NmFhZjBlNDg2YTU5NWVkNWZkOGY4NmJhNTUyMzJhNzAiCgpbW3BhY2thZ2VdXQpuYW1lID0gImhleC1saXRlcmFsIgp2ZXJzaW9uID0gIjAuNC4xIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjZmZTIyNjdkNGVkNDliYzA3YjYzODAxNTU5YmUyOGM3MThlYTA2YzQ3MzhiN2EwM2M5NGRmNzM4NmQyY2RlNDYiCgpbW3BhY2thZ2VdXQpuYW1lID0gImluZGV4bWFwIgp2ZXJzaW9uID0gIjIuMTMuMCIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICI3NzE0ZTcwNDM3YTdkYzNhYzhlYjdlNmY4ZGY3NWZkOGViNDIyNjc1ZmM3Njc4YWZmNzM2NDMwMTA5MmIxMDE3IgpkZXBlbmRlbmNpZXMgPSBbCiAiZXF1aXZhbGVudCIsCiAiaGFzaGJyb3duIDAuMTYuMSIsCiAic2VyZGUiLAogInNlcmRlX2NvcmUiLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gImlzX3Rlcm1pbmFsX3BvbHlmaWxsIgp2ZXJzaW9uID0gIjEuNzAuMiIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICJhNmNiMTM4YmI3OWExNDZjMWJkNDYwMDA1NjIzZTE0MmVmMDE4MWUzZDAyMTljYjQ5M2UwMmY3ZDA4YTM1Njk1IgoKW1twYWNrYWdlXV0KbmFtZSA9ICJpdG9hIgp2ZXJzaW9uID0gIjEuMC4xNyIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICI5MmVjYzY2MTgxODFkZWYwNDU3MzkyY2NkMGVlNTExOThlMDY1ZTAxNmQxZDUyN2E3YWMxYjZkYzdjMWYwOWQyIgoKW1twYWNrYWdlXV0KbmFtZSA9ICJsYXp5X3N0YXRpYyIKdmVyc2lvbiA9ICIxLjUuMCIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICJiYmQyYmNiNGM5NjNmMmRkYWUwNmEyZWZjN2U5ZjM1OTEzMTI0NzNjNTBjNjY4NWUxZjI5ODA2ODMxNmU2NmZlIgoKW1twYWNrYWdlXV0KbmFtZSA9ICJsZWIxMjhmbXQiCnZlcnNpb24gPSAiMC4xLjAiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiMDllZGQ5ZThiNTRlNDllNTg3ZTRmNjI5NWE3ZDI5YzNlYTk0ZDQ2OWNiNDBhYjhjYTcwYjI4ODI0OGE4MWRiMiIKCltbcGFja2FnZV1dCm5hbWUgPSAibWVtY2hyIgp2ZXJzaW9uID0gIjIuNy42Igpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gImY1MmIwMGQzOTk2MWZjNWIyNzM2ZWE4NTNjOWNjODYyMzhlMTY1MDE3YTQ5M2QxZDVjOGVhYzZiZGM0Y2MyNzMiCgpbW3BhY2thZ2VdXQpuYW1lID0gIm11bHRpdmVyc3gtY2hhaW4tY29yZSIKdmVyc2lvbiA9ICIwLjE0LjAiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiNzNmMWYwNTI2Y2EwOTQxODU4NDc3NzZjMmMwM2RlOTdlYTA4Mjc0M2VlNGU2Zjc5OTg2MGFkNjdlN2Q3ODI1MCIKZGVwZW5kZW5jaWVzID0gWwogImJpdGZsYWdzIiwKICJtdWx0aXZlcnN4LXNjLWNvZGVjIiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJtdWx0aXZlcnN4LXNjIgp2ZXJzaW9uID0gIjAuNTcuMSIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICIyMDYwMmQ0ZmMzMzYwOTJmYWFkYzAzYjZiNDQ1YzRiYjVlNGRiYzRjODZmYjUzNzI2ZTQ2ZWNhNjcwNzA4MTNhIgpkZXBlbmRlbmNpZXMgPSBbCiAiYml0ZmxhZ3MiLAogImdlbmVyaWMtYXJyYXkiLAogImhleC1saXRlcmFsIiwKICJtdWx0aXZlcnN4LWNoYWluLWNvcmUiLAogIm11bHRpdmVyc3gtc2MtY29kZWMiLAogIm11bHRpdmVyc3gtc2MtZGVyaXZlIiwKICJudW0tdHJhaXRzIiwKICJ1bndyYXAtaW5mYWxsaWJsZSIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAibXVsdGl2ZXJzeC1zYy1jb2RlYyIKdmVyc2lvbiA9ICIwLjIyLjAiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiNDNlMGYyNGEwMjBhZGYzMmZhZmZhZTFjNTc0NzVjNmI3Mjg1YTMyMTZkMWEzNmU0YTczNjE3NjM5NzIxYzJlMCIKZGVwZW5kZW5jaWVzID0gWwogImFycmF5dmVjIiwKICJiaXRmbGFncyIsCiAibXVsdGl2ZXJzeC1zYy1jb2RlYy1kZXJpdmUiLAogIm51bS1iaWdpbnQiLAogInVud3JhcC1pbmZhbGxpYmxlIiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJtdWx0aXZlcnN4LXNjLWNvZGVjLWRlcml2ZSIKdmVyc2lvbiA9ICIwLjIyLjAiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiN2M1ZjE3ZDVlZTIzNjU3ZDVjZGRjN2Y0NDcxOTI1YjVhNDlmN2UyNTMwNmY4YmJhNjU2ZWE2OTE3YWNjNjI5ZCIKZGVwZW5kZW5jaWVzID0gWwogImhleCIsCiAicHJvYy1tYWNybzIiLAogInF1b3RlIiwKICJzeW4iLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gIm11bHRpdmVyc3gtc2MtZGVyaXZlIgp2ZXJzaW9uID0gIjAuNTcuMSIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICIwZDQ0ZDA4ZDMzNzZjMTk5ZThjMzkxY2MwNzc1MmQyODIyY2QyODk2OTNkYTUzMTlkNzkwNTU5OTUwMWU1NTdmIgpkZXBlbmRlbmNpZXMgPSBbCiAiaGV4IiwKICJwcm9jLW1hY3JvMiIsCiAicXVvdGUiLAogInJhZGl4X3RyaWUiLAogInN5biIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAibXVsdGl2ZXJzeC1zYy1tZXRhLWxpYiIKdmVyc2lvbiA9ICIwLjU3LjEiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiNDM4MTQ5ZjQ1NTM4MmU2NGQxZDM4M2IyY2I1YmVlMTQ0YzIxNWQyOTQzZDZhMGFlMDZhNTBkMzIyNTY4MGZiYiIKZGVwZW5kZW5jaWVzID0gWwogImNsYXAiLAogImNvbG9yZWQiLAogImNvbnZlcnRfY2FzZSIsCiAiaGV4IiwKICJsYXp5X3N0YXRpYyIsCiAibXVsdGl2ZXJzeC1zYyIsCiAicnVzdGNfdmVyc2lvbiIsCiAic2VtdmVyIiwKICJzZXJkZSIsCiAic2VyZGVfanNvbiIsCiAidG9tbCIsCiAid2FzbXBhcnNlciAwLjIyNy4xIiwKICJ3YXNtcHJpbnRlciIsCiAid2F0IiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJuaWJibGVfdmVjIgp2ZXJzaW9uID0gIjAuMS4wIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjc3YTVkODNkZjlmMzZmZTIzZjBjMzY0OGM2YmJiOGIwMjk4YmI1ZjE5MzljOGYyNzA0NDMxMzcxZjRiODRkNDMiCmRlcGVuZGVuY2llcyA9IFsKICJzbWFsbHZlYyIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAibnVtLWJpZ2ludCIKdmVyc2lvbiA9ICIwLjQuNiIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICJhNWU0NGY3MjNmMTEzM2M5ZGVhYzY0Njc2MzU3OWZkYjNhYzc0NWU0MThmMmE3YWY5Y2QwYzQzMWRhMWYyMGI5IgpkZXBlbmRlbmNpZXMgPSBbCiAibnVtLWludGVnZXIiLAogIm51bS10cmFpdHMiLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gIm51bS1pbnRlZ2VyIgp2ZXJzaW9uID0gIjAuMS40NiIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICI3OTY5NjYxZmQyOTU4YTVjYjA5NmU1NmM4ZTFhZDA0NDRhYzJiYmNkMDA2MWJkMjg2NjA0ODVhNDQ4Nzk4NThmIgpkZXBlbmRlbmNpZXMgPSBbCiAibnVtLXRyYWl0cyIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAibnVtLXRyYWl0cyIKdmVyc2lvbiA9ICIwLjIuMTkiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiMDcxZGZjMDYyNjkwZTkwYjczNGMwYjIyNzNjZTcyYWQwZmZhOTVmMGM3NDU5NmJjMjUwZGNmZDk2MDI2Mjg0MSIKZGVwZW5kZW5jaWVzID0gWwogImF1dG9jZmciLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gIm9uY2VfY2VsbF9wb2x5ZmlsbCIKdmVyc2lvbiA9ICIxLjcwLjIiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiMzg0YjhhYjZkMzcyMTVmM2M1MzAxYTk1YTRhY2NiNWQ2NGFhNjA3ZjFmY2IyNmExMWI1MzAzODc4NDUxYjRmZSIKCltbcGFja2FnZV1dCm5hbWUgPSAicHJvYy1tYWNybzIiCnZlcnNpb24gPSAiMS4wLjk0Igpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gImEzMTk3MTc1MmU3MGI4YjI2ODZkN2U0NmVjMTdmYjM4ZGFkNDA1MWQ5NDAyNGM4OGRmNDliNjY3Y2FlYTljODQiCmRlcGVuZGVuY2llcyA9IFsKICJ1bmljb2RlLWlkZW50IiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJxdW90ZSIKdmVyc2lvbiA9ICIxLjAuMzkiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiYzFmMTkxNGNlOTA5ZTE2NThkOTkwNzkxM2I0YjkxOTQ3NDMwYzdkOWJlNTk4YjE1YTE5MTI5MzViOGMwNDgwMSIKZGVwZW5kZW5jaWVzID0gWwogInByb2MtbWFjcm8yIiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJyYWRpeF90cmllIgp2ZXJzaW9uID0gIjAuMi4xIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gImMwNjljMTc5ZmNkYzZhMmZlMjRkOGQxODMwNWNmMDg1ZmRiZDRmOTIyYzA0MTk0M2UyMDM2ODVkNmExYzU4ZmQiCmRlcGVuZGVuY2llcyA9IFsKICJlbmRpYW4tdHlwZSIsCiAibmliYmxlX3ZlYyIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAicmVxdWVzdHMiCnZlcnNpb24gPSAiMC4wLjAiCmRlcGVuZGVuY2llcyA9IFsKICJtdWx0aXZlcnN4LXNjIiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJyZXF1ZXN0cy1tZXRhIgp2ZXJzaW9uID0gIjAuMC4wIgpkZXBlbmRlbmNpZXMgPSBbCiAibXVsdGl2ZXJzeC1zYy1tZXRhLWxpYiIsCiAicmVxdWVzdHMiLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gInJ1c3RjX3ZlcnNpb24iCnZlcnNpb24gPSAiMC40LjEiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiY2ZjYjNhMjJlZjQ2ZTg1YjQ1ZGU2ZWU3ZTc5ZDA2MzMxOWViYjY1OTRmYWFmY2YxYzIyNWVhOTJhYjZlOWI5MiIKZGVwZW5kZW5jaWVzID0gWwogInNlbXZlciIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAicnVzdHZlcnNpb24iCnZlcnNpb24gPSAiMS4wLjIyIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gImIzOWNkZWYwZmE4MDBmYzQ0NTI1Yzg0Y2NiNTRhMDI5OTYxYTgyMTVmOTYxOTc1MzYzNWE5YzBkMjUzOGQ0NmQiCgpbW3BhY2thZ2VdXQpuYW1lID0gInNlbXZlciIKdmVyc2lvbiA9ICIxLjAuMjciCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiZDc2N2ViMGFhYmM4ODBiMjk5NTZjMzU3MzQxNzBmMjZlZDU1MWE4NTlkYmQzNjFkMTQwY2RiZWNhNjFhYjFlMiIKCltbcGFja2FnZV1dCm5hbWUgPSAic2VyZGUiCnZlcnNpb24gPSAiMS4wLjIyOCIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICI5YThlOTRlYTdmMzc4YmQzMmNiYmQzNzE5OGE0YTkxNDM2MTgwYzViYjQ3MjQxMWU0OGI1ZWMyZTIxMjRhZTllIgpkZXBlbmRlbmNpZXMgPSBbCiAic2VyZGVfY29yZSIsCiAic2VyZGVfZGVyaXZlIiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJzZXJkZV9jb3JlIgp2ZXJzaW9uID0gIjEuMC4yMjgiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiNDFkMzg1YzdkNGNhNThlNTlmYzczMmFmMjVjMzk4M2I2N2FjODUyYzFhMjUwMDBhZmUxMTc1ZGU0NThiNjdhZCIKZGVwZW5kZW5jaWVzID0gWwogInNlcmRlX2Rlcml2ZSIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAic2VyZGVfZGVyaXZlIgp2ZXJzaW9uID0gIjEuMC4yMjgiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiZDU0MGYyMjBkMzE4NzE3M2RhMjIwZjg4NWFiNjY2MDgzNjdiNjU3NGU5MjUwMTFhOTM1M2U0YmFkZGE5MWQ3OSIKZGVwZW5kZW5jaWVzID0gWwogInByb2MtbWFjcm8yIiwKICJxdW90ZSIsCiAic3luIiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJzZXJkZV9qc29uIgp2ZXJzaW9uID0gIjEuMC4xNDkiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiODNmYzAzOTQ3M2M1NTk1YWNlODYwZDhjNGZhZmEyMjBmZjQ3NGIzZmM2YmZkYjQyOTMzMjdmMWEzN2U5NGQ4NiIKZGVwZW5kZW5jaWVzID0gWwogIml0b2EiLAogIm1lbWNociIsCiAic2VyZGUiLAogInNlcmRlX2NvcmUiLAogInptaWoiLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gInNlcmRlX3NwYW5uZWQiCnZlcnNpb24gPSAiMC42LjkiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiYmY0MWUwY2ZhZjcyMjZkY2ExNWU4MTk3MTcyYzI5NWE3ODI4NTdmY2I5N2ZhZDE4MDhhMTY2ODcwZGVlNzVhMyIKZGVwZW5kZW5jaWVzID0gWwogInNlcmRlIiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJzbWFsbHZlYyIKdmVyc2lvbiA9ICIxLjE1LjEiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiNjdiMWI3YTNiNWZlNGYxMzc2ODg3MTg0MDQ1ZmNmNDVjNjllOTJhZjczNGI3YWFkZGMwNWZiNzc3YjZmYmQwMyIKCltbcGFja2FnZV1dCm5hbWUgPSAic3Ryc2ltIgp2ZXJzaW9uID0gIjAuMTEuMSIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICI3ZGE4YjU3MzY4NDVkOWYyZmNiODM3ZWE1ZDllMjYyODU2NGIzYjA0M2E3MDk0OGEzZjBiNzc4ODM4YzVmYjRmIgoKW1twYWNrYWdlXV0KbmFtZSA9ICJzeW4iCnZlcnNpb24gPSAiMi4wLjEwMCIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICJiMDlhNDRhY2NhZDgxZTFiYTFjZDc0YTMyNDYxYmE4OWRlZTg5MDk1YmExN2IzMmY1ZDAzNjgzYjFiMWZjMmEwIgpkZXBlbmRlbmNpZXMgPSBbCiAicHJvYy1tYWNybzIiLAogInF1b3RlIiwKICJ1bmljb2RlLWlkZW50IiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJ0ZXJtY29sb3IiCnZlcnNpb24gPSAiMS40LjEiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiMDY3OTRmOGY2YzVjODk4YjMyNzVhZWJlZmE2YjhhMWNiMjRjZDJjNmM3OTM5N2FiMTU3NzQ4MzdhMGJjNTc1NSIKZGVwZW5kZW5jaWVzID0gWwogIndpbmFwaS11dGlsIiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJ0b21sIgp2ZXJzaW9uID0gIjAuOC4yMyIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICJkYzFiZWI5OTZiOWQ4MzUyOWE5ZTc1YzE3YTE2ODY3NjdkMTQ4ZDcwNjYzMTQzYzc4NTRkOGI0YTA5Y2VkMzYyIgpkZXBlbmRlbmNpZXMgPSBbCiAiaW5kZXhtYXAiLAogInNlcmRlIiwKICJzZXJkZV9zcGFubmVkIiwKICJ0b21sX2RhdGV0aW1lIiwKICJ0b21sX2VkaXQiLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gInRvbWxfZGF0ZXRpbWUiCnZlcnNpb24gPSAiMC42LjExIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjIyY2RkYWY4OGY0ZmJjMTNjNTFhZWJiZjVmOGVjZWI1YzdjNWE5ZGEyYWM0MGExMzUxOWViNWIwYTBlOGYxMWMiCmRlcGVuZGVuY2llcyA9IFsKICJzZXJkZSIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAidG9tbF9lZGl0Igp2ZXJzaW9uID0gIjAuMjIuMjciCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiNDFmZThjNjYwYWU0MjU3ODg3Y2Y2NjM5NDg2MmQyMWRiY2E0YTZkZGQyNmYwNGEzNTYwNDEwNDA2YTJmODE5YSIKZGVwZW5kZW5jaWVzID0gWwogImluZGV4bWFwIiwKICJzZXJkZSIsCiAic2VyZGVfc3Bhbm5lZCIsCiAidG9tbF9kYXRldGltZSIsCiAidG9tbF93cml0ZSIsCiAid2lubm93IiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJ0b21sX3dyaXRlIgp2ZXJzaW9uID0gIjAuMS4yIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjVkOTlmOGM5YTc3Mjc4ODRhZmU1MjJlOWJkNWVkYmZjOTFhMzMxMmIzNmE3N2I1ZmI4OTI2ZTRjMzFhNDE4MDEiCgpbW3BhY2thZ2VdXQpuYW1lID0gInR5cGVudW0iCnZlcnNpb24gPSAiMS4xOS4wIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjU2MmQ0ODEwNjZiZGUwNjU4Mjc2YTM1NDY3YzRhZjAwYmRjNmVlNzI2MzA1Njk4YTU1Yjg2ZTYxZDdhZDgyYmIiCgpbW3BhY2thZ2VdXQpuYW1lID0gInVuaWNvZGUtaWRlbnQiCnZlcnNpb24gPSAiMS4wLjIyIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjkzMTJmN2M0ZjZmZjkwNjliMTY1NDk4MjM0Y2U4YmU2NTgwNTljNjcyODYzMzY2N2M1MjZlMjdkYzJjZjFkZjUiCgpbW3BhY2thZ2VdXQpuYW1lID0gInVuaWNvZGUtc2VnbWVudGF0aW9uIgp2ZXJzaW9uID0gIjEuMTIuMCIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICJmNmNjZjI1MTIxMjExNGI1NDQzM2VjOTQ5ZmQ2YTc4NDEyNzVmOWFkYTIwZGRkZDJmMjllOWNlZWE0NTAxNDkzIgoKW1twYWNrYWdlXV0KbmFtZSA9ICJ1bmljb2RlLXdpZHRoIgp2ZXJzaW9uID0gIjAuMi4yIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gImI0YWMwNDhkNzFlZGU3ZWU3NmQ1ODU1MTdhZGQ0NWRhNTMwNjYwZWY0MzkwZTQ5YjA5ODczM2M2ZTg5N2YyNTQiCgpbW3BhY2thZ2VdXQpuYW1lID0gInVud3JhcC1pbmZhbGxpYmxlIgp2ZXJzaW9uID0gIjAuMS41Igpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjE1MWFjMDk5NzhkM2MyODYyYzRlMzliNTU3ZjRlY2VlZTJjYzcyMTUwYmM0Y2I0ZjE2YWJmMDYxYjZlMzgxZmIiCgpbW3BhY2thZ2VdXQpuYW1lID0gInV0ZjhwYXJzZSIKdmVyc2lvbiA9ICIwLjIuMiIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICIwNmFiZGUzNjExNjU3YWRmNjZkMzgzZjAwYjA5M2Q3ZmFlY2M3ZmE1NzA3MWNjZTI1Nzg2NjBjOWYxMDEwODIxIgoKW1twYWNrYWdlXV0KbmFtZSA9ICJ3YXNtLWVuY29kZXIiCnZlcnNpb24gPSAiMC4yNDQuMCIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICI5OTAwNjVmMmZlNjMwMDNmZTMzN2I5MzJjZmI1ZTNiODBlMGI0ZDBmNWZmNjUwZTY5ODViMTA0OGY2MmM4MzE5IgpkZXBlbmRlbmNpZXMgPSBbCiAibGViMTI4Zm10IiwKICJ3YXNtcGFyc2VyIDAuMjQ0LjAiLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gIndhc21wYXJzZXIiCnZlcnNpb24gPSAiMC4yMjcuMSIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICIwZjUxY2FkNzc0ZmIzYzk0NjFhYjliY2NjOWM2MmRmYjczODgzOTdiNWRlZGEzMWJmNDBlODEwOGNjZDY3OGIyIgpkZXBlbmRlbmNpZXMgPSBbCiAiYml0ZmxhZ3MiLAogImhhc2hicm93biAwLjE1LjUiLAogImluZGV4bWFwIiwKICJzZW12ZXIiLAogInNlcmRlIiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJ3YXNtcGFyc2VyIgp2ZXJzaW9uID0gIjAuMjQ0LjAiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiNDdiODA3YzcyZTFiYWM2OTM4MmIzYTZmYjNkYmU4ZWE0YzBlZDg3ZmY1NjI5Yjg2ODVhZTZiOWE2MTEwMjhmZSIKZGVwZW5kZW5jaWVzID0gWwogImJpdGZsYWdzIiwKICJpbmRleG1hcCIsCiAic2VtdmVyIiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJ3YXNtcHJpbnRlciIKdmVyc2lvbiA9ICIwLjIyNy4xIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjMyNDc1YTA0NTlkYjU2MzllOTg5MjA2ZGQ4ODMzZmIwNzExMGVjMDkyYTdjYjM0NjhjODIzNDE5ODljYWM0ZDMiCmRlcGVuZGVuY2llcyA9IFsKICJhbnlob3ciLAogInRlcm1jb2xvciIsCiAid2FzbXBhcnNlciAwLjIyNy4xIiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJ3YXN0Igp2ZXJzaW9uID0gIjI0NC4wLjAiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiYjJlN2I5ZjllMjMzMTEyNzU5MjBlM2Q2YjU2ZDY0MTM3YzE2MGNmOGFmNGY4NGE3MjgzYjM2Y2ZlY2JmNGFjYiIKZGVwZW5kZW5jaWVzID0gWwogImJ1bXBhbG8iLAogImxlYjEyOGZtdCIsCiAibWVtY2hyIiwKICJ1bmljb2RlLXdpZHRoIiwKICJ3YXNtLWVuY29kZXIiLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gIndhdCIKdmVyc2lvbiA9ICIxLjI0NC4wIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gImJiZjM1Yjg3ZWQzNTJmOWFiNmNkMDczMmFiZGU1YTY3ZGQ2MTUzZGZkMDJjNDkzZTYxNDU5MjE4YjE5NDU2ZmEiCmRlcGVuZGVuY2llcyA9IFsKICJ3YXN0IiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJ3aW5hcGktdXRpbCIKdmVyc2lvbiA9ICIwLjEuMTEiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiYzJhN2IxYzAzYzg3NjEyMmFhNDNmMzAyMGU2YzNjM2VlNWMwNTA4MWM5YTAwNzM5ZmFmNzUwM2FlYmExMGQyMiIKZGVwZW5kZW5jaWVzID0gWwogIndpbmRvd3Mtc3lzIDAuNjEuMiIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAid2luZG93cy1saW5rIgp2ZXJzaW9uID0gIjAuMi4xIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gImYwODA1MjIyZTU3Zjc1MjFkNmE2MmUzNmZhOTE2M2JjODkxYWNkNDIyZjk3MWRlZmU5N2Q2NGU3MGQwYTRmZTUiCgpbW3BhY2thZ2VdXQpuYW1lID0gIndpbmRvd3Mtc3lzIgp2ZXJzaW9uID0gIjAuNTkuMCIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICIxZTM4YmM0ZDc5ZWQ2N2ZkMDc1YmNjMjUxYTFjMzliMzJhMTc3NmJiZTkyZTViZWYxZjBiZjFmOGM1MzE4NTNiIgpkZXBlbmRlbmNpZXMgPSBbCiAid2luZG93cy10YXJnZXRzIiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJ3aW5kb3dzLXN5cyIKdmVyc2lvbiA9ICIwLjYxLjIiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiYWUxMzcyMjliY2JkNmNkZjBmN2I4MGEzMWRmNjE3NjYxNDUwNzdkZGY0OTQxNmE3MjhiMDJjYjM5MjFmZjNmYyIKZGVwZW5kZW5jaWVzID0gWwogIndpbmRvd3MtbGluayIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAid2luZG93cy10YXJnZXRzIgp2ZXJzaW9uID0gIjAuNTIuNiIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICI5YjcyNGY3Mjc5NmUwMzZhYjkwYzEwMjFkNDc4MGQ0ZDNkNjQ4YWNhNTllNDkxZTZiOThlNzI1Yjg0ZTk5OTczIgpkZXBlbmRlbmNpZXMgPSBbCiAid2luZG93c19hYXJjaDY0X2dudWxsdm0iLAogIndpbmRvd3NfYWFyY2g2NF9tc3ZjIiwKICJ3aW5kb3dzX2k2ODZfZ251IiwKICJ3aW5kb3dzX2k2ODZfZ251bGx2bSIsCiAid2luZG93c19pNjg2X21zdmMiLAogIndpbmRvd3NfeDg2XzY0X2dudSIsCiAid2luZG93c194ODZfNjRfZ251bGx2bSIsCiAid2luZG93c194ODZfNjRfbXN2YyIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAid2luZG93c19hYXJjaDY0X2dudWxsdm0iCnZlcnNpb24gPSAiMC41Mi42Igpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjMyYTQ2MjIxODBlN2EwZWMwNDRiYjU1NTQwNGM4MDBiYzlmZDllYzI2MmVjMTQ3ZWRkNTk4OWNjZDBjMDJjZDMiCgpbW3BhY2thZ2VdXQpuYW1lID0gIndpbmRvd3NfYWFyY2g2NF9tc3ZjIgp2ZXJzaW9uID0gIjAuNTIuNiIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICIwOWVjMmE3YmIxNTJlMjI1MmI1M2ZhNzgwMzE1MDAwNzg3OTU0OGJjNzA5YzAzOWRmNzYyN2NhYmJkMDVkNDY5IgoKW1twYWNrYWdlXV0KbmFtZSA9ICJ3aW5kb3dzX2k2ODZfZ251Igp2ZXJzaW9uID0gIjAuNTIuNiIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICI4ZTliNWFkNWFiODAyZTk3ZWI4ZTI5NWFjNjcyMGU1MDllZTRjMjQzZjY5ZDc4MTM5NDAxNGViZmU4YmJmYTBiIgoKW1twYWNrYWdlXV0KbmFtZSA9ICJ3aW5kb3dzX2k2ODZfZ251bGx2bSIKdmVyc2lvbiA9ICIwLjUyLjYiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiMGVlZTUyZDM4YzA5MGIzY2FhNzZjNTYzYjg2YzNhNGJkNzFlZjFhODE5Mjg3YzE5ZDU4NmQ3MzM0YWU4ZWQ2NiIKCltbcGFja2FnZV1dCm5hbWUgPSAid2luZG93c19pNjg2X21zdmMiCnZlcnNpb24gPSAiMC41Mi42Igpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjI0MDk0OGJjMDVjNWU3YzZkYWJiYTI4YmY4OWQ4OWZmY2UzZTMwMzAyMjgwOWU3M2RlYWVmZTRmNmVjNTZjNjYiCgpbW3BhY2thZ2VdXQpuYW1lID0gIndpbmRvd3NfeDg2XzY0X2dudSIKdmVyc2lvbiA9ICIwLjUyLjYiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiMTQ3YTVjODBhYWJmYmYwYzdkOTAxY2I1ODk1ZDFkZTMwZWYyOTA3ZWIyMWZiYmFiMjljYTk0YzViMDhiMWE3OCIKCltbcGFja2FnZV1dCm5hbWUgPSAid2luZG93c194ODZfNjRfZ251bGx2bSIKdmVyc2lvbiA9ICIwLjUyLjYiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiMjRkNWIyM2RjNDE3NDEyNjc5NjgxMzk2ZjJiNDlmM2RlOGMxNDczZGViNTE2YmQzNDQxMDg3MmVmZjUxZWQwZCIKCltbcGFja2FnZV1dCm5hbWUgPSAid2luZG93c194ODZfNjRfbXN2YyIKdmVyc2lvbiA9ICIwLjUyLjYiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiNTg5ZjZkYTg0YzY0NjIwNDc0N2QxMjcwYTJhNTY2MWVhNjZlZDFjY2VkMjYzMWQ1NDZmZGZiMTU1OTU5ZjllYyIKCltbcGFja2FnZV1dCm5hbWUgPSAid2lubm93Igp2ZXJzaW9uID0gIjAuNy4xNCIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICI1YTUzNjRlOWQ3N2ZjZGVlYWE2MDYyY2VkOTI2ZWUzMzgxZmFhMmVlMDJkM2ViODNhNWMyN2E4ODI1NTQwODI5IgpkZXBlbmRlbmNpZXMgPSBbCiAibWVtY2hyIiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJ6bWlqIgp2ZXJzaW9uID0gIjEuMC4xNCIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICJiZDhmM2Y1MGI4NDhkZjI4Zjg4N2FjYjY4ZTQxMjAxYjVhZWE2YmM4YThkYWNjMDBmYjQwNjM1ZmY5YTcyZmVhIgo=",
- "module": ".",
- "dependencyDepth": 0,
- "isTestFile": false
- },
- {
- "path": "meta/Cargo.toml",
- "content": "W3BhY2thZ2VdCm5hbWUgPSAicmVxdWVzdHMtbWV0YSIKdmVyc2lvbiA9ICIwLjAuMCIKZWRpdGlvbiA9ICIyMDIxIgpwdWJsaXNoID0gZmFsc2UKCltkZXBlbmRlbmNpZXMucmVxdWVzdHNdCnBhdGggPSAiLi4iCgpbZGVwZW5kZW5jaWVzLm11bHRpdmVyc3gtc2MtbWV0YS1saWJdCnZlcnNpb24gPSAiMC41Ny4xIgpkZWZhdWx0LWZlYXR1cmVzID0gZmFsc2UK",
- "module": ".",
- "dependencyDepth": 0,
- "isTestFile": false
- },
- {
- "path": "meta/src/main.rs",
- "content": "Zm4gbWFpbigpIHsKICAgIG11bHRpdmVyc3hfc2NfbWV0YV9saWI6OmNsaV9tYWluOjo8cmVxdWVzdHM6OkFiaVByb3ZpZGVyPigpOwp9Cg==",
- "module": ".",
- "dependencyDepth": 0,
- "isTestFile": false
- },
- {
- "path": "multiversx.json",
- "content": "ewogICAgImxhbmd1YWdlIjogInJ1c3QiCn0=",
- "module": ".",
- "dependencyDepth": 0,
- "isTestFile": false
- },
- {
- "path": "sc-config.toml",
- "content": "W3NldHRpbmdzXQoKW1twcm94eV1dCnBhdGggPSAic3JjL3JlcXVlc3RzX3Byb3h5LnJzIgo=",
- "module": ".",
- "dependencyDepth": 0,
- "isTestFile": false
- },
- {
- "path": "src/lib.rs",
- "content": "IyFbbm9fc3RkXQoKdXNlIG11bHRpdmVyc3hfc2M6OmltcG9ydHM6Oio7CgojW211bHRpdmVyc3hfc2M6OmNvbnRyYWN0XQpwdWIgdHJhaXQgUmVxdWVzdHNDb250cmFjdCB7CiAgICAvLy8gQ29uc3RydWN0b3IgLSBpbml0aWFsaXplcyB0aGUgY29udHJhY3Qgd2l0aCB0aGUgbnVtYmVyIG9mIHJlcXVlc3RzIHBlciBFR0xECiAgICAjW2luaXRdCiAgICBmbiBpbml0KCZzZWxmLCBudW1fcmVxdWVzdHNfcGVyX2VnbGQ6IEJpZ1VpbnQpIHsKICAgICAgICByZXF1aXJlIShudW1fcmVxdWVzdHNfcGVyX2VnbGQgPiAwLCAiTnVtYmVyIG9mIHJlcXVlc3RzIHBlciBFR0xEIG11c3QgYmUgbm9uLXplcm8iKTsKICAgICAgICBzZWxmLm51bV9yZXF1ZXN0c19wZXJfZWdsZCgpLnNldChudW1fcmVxdWVzdHNfcGVyX2VnbGQpOwogICAgICAgIHNlbGYuaXNfcGF1c2VkKCkuc2V0KGZhbHNlKTsKICAgIH0KCiAgICAvLy8gVXBncmFkZSBmdW5jdGlvbiAtIGNhbGxlZCB3aGVuIGNvbnRyYWN0IGlzIHVwZ3JhZGVkCiAgICAjW3VwZ3JhZGVdCiAgICBmbiB1cGdyYWRlKCZzZWxmLCBudW1fcmVxdWVzdHNfcGVyX2VnbGQ6IEJpZ1VpbnQpIHsKICAgICAgICByZXF1aXJlIShudW1fcmVxdWVzdHNfcGVyX2VnbGQgPiAwLCAiTnVtYmVyIG9mIHJlcXVlc3RzIHBlciBFR0xEIG11c3QgYmUgbm9uLXplcm8iKTsKICAgICAgICBzZWxmLm51bV9yZXF1ZXN0c19wZXJfZWdsZCgpLnNldChudW1fcmVxdWVzdHNfcGVyX2VnbGQpOwogICAgICAgIGlmICFzZWxmLmlzX3BhdXNlZCgpLmlzX2VtcHR5KCkgewogICAgICAgICAgICAvLyBpc19wYXVzZWQgYWxyZWFkeSBleGlzdHMsIGtlZXAgY3VycmVudCB2YWx1ZQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIEZpcnN0IHVwZ3JhZGUsIGluaXRpYWxpemUgcGF1c2Ugc3RhdGUKICAgICAgICAgICAgc2VsZi5pc19wYXVzZWQoKS5zZXQoZmFsc2UpOwogICAgICAgIH0KICAgIH0KCiAgICAvLy8gQWRkIGFjcXVpcmVkIHJlcXVlc3RzIGZvciBhIGdpdmVuIElEIC0gcGF5YWJsZSBvbmx5IGluIEVHTEQKICAgIC8vLyBUaGUgbnVtYmVyIG9mIGFjcXVpcmVkIHJlcXVlc3RzIGFkZGVkID0gKEVHTEQgYW1vdW50IHRyYW5zZmVycmVkIGluIHJlZ3VsYXIgdW5pdHMpICogbnVtX3JlcXVlc3RzX3Blcl9lZ2xkCiAgICAvLy8gRXhhbXBsZTogMi41IEVHTEQgKiAxMDAgcmF0ZSA9IDI1MCBhY3F1aXJlZCByZXF1ZXN0cwogICAgI1twYXlhYmxlKCJFR0xEIildCiAgICAjW2VuZHBvaW50KGFkZFJlcXVlc3RzKV0KICAgIGZuIGFkZF9yZXF1ZXN0cygmc2VsZiwgaWQ6IHU2NCkgewogICAgICAgIHJlcXVpcmUhKCFzZWxmLmlzX3BhdXNlZCgpLmdldCgpLCAiQ29udHJhY3QgaXMgcGF1c2VkIik7CgogICAgICAgIGxldCBwYXltZW50ID0gc2VsZi5jYWxsX3ZhbHVlKCkuZWdsZCgpOwogICAgICAgIGxldCBhbW91bnRfd2VpID0gcGF5bWVudC5jbG9uZV92YWx1ZSgpOwoKICAgICAgICByZXF1aXJlIShhbW91bnRfd2VpID4gMCwgIlBheW1lbnQgYW1vdW50IG11c3QgYmUgZ3JlYXRlciB0aGFuIDAiKTsKCiAgICAgICAgLy8gQ29udmVydCBmcm9tIHdlaSB0byBFR0xEICgxIEVHTEQgPSAxMF4xOCB3ZWkpCiAgICAgICAgbGV0IG9uZV9lZ2xkID0gQmlnVWludDo6ZnJvbSgxXzAwMF8wMDBfMDAwXzAwMF8wMDBfMDAwdTY0KTsKCiAgICAgICAgbGV0IG51bV9yZXF1ZXN0c19wZXJfZWdsZCA9IHNlbGYubnVtX3JlcXVlc3RzX3Blcl9lZ2xkKCkuZ2V0KCk7CiAgICAgICAgbGV0IHJlcXVlc3RzX3RvX2FkZCA9IChhbW91bnRfd2VpLmNsb25lKCkgKiAmbnVtX3JlcXVlc3RzX3Blcl9lZ2xkKSAvIG9uZV9lZ2xkOwoKICAgICAgICBzZWxmLmFjcXVpcmVkX3JlcXVlc3RzKCZpZCkudXBkYXRlKHxyZXF1ZXN0c3wgKnJlcXVlc3RzICs9IHJlcXVlc3RzX3RvX2FkZC5jbG9uZSgpKTsKCiAgICAgICAgc2VsZi5hZGRfcmVxdWVzdHNfZXZlbnQoJmlkLCAmYW1vdW50X3dlaSwgJnJlcXVlc3RzX3RvX2FkZCk7CiAgICB9CgoKICAgIC8vLyBHZXQgdGhlIG51bWJlciBvZiBhY3F1aXJlZCByZXF1ZXN0cyBmb3IgYSBnaXZlbiBJRAogICAgLy8vIFJldHVybnMgMCBpZiB0aGUgSUQgd2FzIG5vdCBjcmVkaXRlZAogICAgI1t2aWV3KGdldFJlcXVlc3RzKV0KICAgIGZuIGdldF9yZXF1ZXN0cygmc2VsZiwgaWQ6IHU2NCkgLT4gQmlnVWludCB7CiAgICAgICAgc2VsZi5hY3F1aXJlZF9yZXF1ZXN0cygmaWQpLmdldCgpCiAgICB9CgogICAgLy8vIENoZWNrIGlmIHRoZSBjb250cmFjdCBpcyBwYXVzZWQKICAgICNbdmlldyhpc1BhdXNlZCldCiAgICBmbiBnZXRfaXNfcGF1c2VkKCZzZWxmKSAtPiBib29sIHsKICAgICAgICBzZWxmLmlzX3BhdXNlZCgpLmdldCgpCiAgICB9CgogICAgLy8vIEdldCB0aGUgbnVtYmVyIG9mIHJlcXVlc3RzIHBlciBFR0xECiAgICAjW3ZpZXcoZ2V0UmVxdWVzdHNQZXJFZ2xkKV0KICAgIGZuIGdldF9yZXF1ZXN0c19wZXJfZWdsZCgmc2VsZikgLT4gQmlnVWludCB7CiAgICAgICAgc2VsZi5udW1fcmVxdWVzdHNfcGVyX2VnbGQoKS5nZXQoKQogICAgfQoKCiAgICAvLy8gQ2hhbmdlIHRoZSBudW1iZXIgb2YgcmVxdWVzdHMgcGVyIEVHTEQKICAgIC8vLyBDYW4gb25seSBiZSBjYWxsZWQgYnkgdGhlIG93bmVyCiAgICAjW2VuZHBvaW50KGNoYW5nZU51bVJlcXVlc3RzUGVyRUdMRCldCiAgICBmbiBjaGFuZ2VfbnVtX3JlcXVlc3RzX3Blcl9lZ2xkKCZzZWxmLCBuZXdfbnVtX3JlcXVlc3RzX3Blcl9lZ2xkOiBCaWdVaW50KSB7CiAgICAgICAgbGV0IGNhbGxlciA9IHNlbGYuYmxvY2tjaGFpbigpLmdldF9jYWxsZXIoKTsKICAgICAgICBsZXQgb3duZXIgPSBzZWxmLmJsb2NrY2hhaW4oKS5nZXRfb3duZXJfYWRkcmVzcygpOwoKICAgICAgICByZXF1aXJlIShjYWxsZXIgPT0gb3duZXIsICJPbmx5IHRoZSBvd25lciBjYW4gY2hhbmdlIHRoZSBleGNoYW5nZSByYXRlIik7CiAgICAgICAgcmVxdWlyZSEobmV3X251bV9yZXF1ZXN0c19wZXJfZWdsZCA+IDAsICJOdW1iZXIgb2YgcmVxdWVzdHMgcGVyIEVHTEQgbXVzdCBiZSBub24temVybyIpOwoKICAgICAgICBsZXQgb2xkX3ZhbHVlID0gc2VsZi5udW1fcmVxdWVzdHNfcGVyX2VnbGQoKS5nZXQoKTsKICAgICAgICBzZWxmLm51bV9yZXF1ZXN0c19wZXJfZWdsZCgpLnNldChuZXdfbnVtX3JlcXVlc3RzX3Blcl9lZ2xkLmNsb25lKCkpOwoKICAgICAgICBzZWxmLmNoYW5nZV9udW1fcmVxdWVzdHNfcGVyX2VnbGRfZXZlbnQoJm9sZF92YWx1ZSwgJm5ld19udW1fcmVxdWVzdHNfcGVyX2VnbGQpOwogICAgfQoKICAgIC8vLyBQYXVzZSB0aGUgY29udHJhY3QgLSBwcmV2ZW50cyBuZXcgcmVxdWVzdHMgZnJvbSBiZWluZyBhZGRlZAogICAgLy8vIENhbiBvbmx5IGJlIGNhbGxlZCBieSB0aGUgb3duZXIKICAgICNbZW5kcG9pbnQocGF1c2UpXQogICAgZm4gcGF1c2UoJnNlbGYpIHsKICAgICAgICBsZXQgY2FsbGVyID0gc2VsZi5ibG9ja2NoYWluKCkuZ2V0X2NhbGxlcigpOwogICAgICAgIGxldCBvd25lciA9IHNlbGYuYmxvY2tjaGFpbigpLmdldF9vd25lcl9hZGRyZXNzKCk7CgogICAgICAgIHJlcXVpcmUhKGNhbGxlciA9PSBvd25lciwgIk9ubHkgdGhlIG93bmVyIGNhbiBwYXVzZSB0aGUgY29udHJhY3QiKTsKICAgICAgICByZXF1aXJlISghc2VsZi5pc19wYXVzZWQoKS5nZXQoKSwgIkNvbnRyYWN0IGlzIGFscmVhZHkgcGF1c2VkIik7CgogICAgICAgIHNlbGYuaXNfcGF1c2VkKCkuc2V0KHRydWUpOwogICAgICAgIHNlbGYucGF1c2VfZXZlbnQoKTsKICAgIH0KCiAgICAvLy8gVW5wYXVzZSB0aGUgY29udHJhY3QgLSBhbGxvd3MgbmV3IHJlcXVlc3RzIHRvIGJlIGFkZGVkIGFnYWluCiAgICAvLy8gQ2FuIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBvd25lcgogICAgI1tlbmRwb2ludCh1bnBhdXNlKV0KICAgIGZuIHVucGF1c2UoJnNlbGYpIHsKICAgICAgICBsZXQgY2FsbGVyID0gc2VsZi5ibG9ja2NoYWluKCkuZ2V0X2NhbGxlcigpOwogICAgICAgIGxldCBvd25lciA9IHNlbGYuYmxvY2tjaGFpbigpLmdldF9vd25lcl9hZGRyZXNzKCk7CgogICAgICAgIHJlcXVpcmUhKGNhbGxlciA9PSBvd25lciwgIk9ubHkgdGhlIG93bmVyIGNhbiB1bnBhdXNlIHRoZSBjb250cmFjdCIpOwogICAgICAgIHJlcXVpcmUhKHNlbGYuaXNfcGF1c2VkKCkuZ2V0KCksICJDb250cmFjdCBpcyBub3QgcGF1c2VkIik7CgogICAgICAgIHNlbGYuaXNfcGF1c2VkKCkuc2V0KGZhbHNlKTsKICAgICAgICBzZWxmLnVucGF1c2VfZXZlbnQoKTsKICAgIH0KCiAgICAvLy8gV2l0aGRyYXcgYWxsIGF2YWlsYWJsZSBFR0xEIGluIHRoZSBjb250cmFjdCB0byB0aGUgb3duZXIncyBhZGRyZXNzCiAgICAvLy8gQ2FuIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBvd25lcgogICAgI1tlbmRwb2ludCh3aXRoZHJhd0FsbCldCiAgICBmbiB3aXRoZHJhd19hbGwoJnNlbGYpIHsKICAgICAgICBsZXQgY2FsbGVyID0gc2VsZi5ibG9ja2NoYWluKCkuZ2V0X2NhbGxlcigpOwogICAgICAgIGxldCBvd25lciA9IHNlbGYuYmxvY2tjaGFpbigpLmdldF9vd25lcl9hZGRyZXNzKCk7CgogICAgICAgIHJlcXVpcmUhKGNhbGxlciA9PSBvd25lciwgIk9ubHkgdGhlIG93bmVyIGNhbiB3aXRoZHJhdyIpOwoKICAgICAgICBsZXQgY29udHJhY3RfYmFsYW5jZSA9IHNlbGYuYmxvY2tjaGFpbigpLmdldF9zY19iYWxhbmNlKCZFZ2xkT3JFc2R0VG9rZW5JZGVudGlmaWVyOjplZ2xkKCksIDApOwogICAgICAgIHJlcXVpcmUhKGNvbnRyYWN0X2JhbGFuY2UgPiAwLCAiTm8gRUdMRCB0byB3aXRoZHJhdyIpOwoKICAgICAgICBzZWxmLnR4KCkKICAgICAgICAgICAgLnRvKCZvd25lcikKICAgICAgICAgICAgLmVnbGQoJmNvbnRyYWN0X2JhbGFuY2UpCiAgICAgICAgICAgIC50cmFuc2ZlcigpOwoKICAgICAgICBzZWxmLndpdGhkcmF3X2V2ZW50KCZvd25lciwgJmNvbnRyYWN0X2JhbGFuY2UpOwogICAgfQoKICAgIC8vLyBFdmVudCBlbWl0dGVkIHdoZW4gcmVxdWVzdHMgYXJlIGFkZGVkCiAgICAjW2V2ZW50KCJhZGRSZXF1ZXN0cyIpXQogICAgZm4gYWRkX3JlcXVlc3RzX2V2ZW50KAogICAgICAgICZzZWxmLAogICAgICAgICNbaW5kZXhlZF0gaWQ6ICZ1NjQsCiAgICAgICAgI1tpbmRleGVkXSBlZ2xkX2Ftb3VudDogJkJpZ1VpbnQsCiAgICAgICAgcmVxdWVzdHNfYWRkZWQ6ICZCaWdVaW50LAogICAgKTsKCiAgICAvLy8gRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBleGNoYW5nZSByYXRlIGlzIGNoYW5nZWQKICAgICNbZXZlbnQoImNoYW5nZU51bVJlcXVlc3RzUGVyRUdMRCIpXQogICAgZm4gY2hhbmdlX251bV9yZXF1ZXN0c19wZXJfZWdsZF9ldmVudCgKICAgICAgICAmc2VsZiwKICAgICAgICAjW2luZGV4ZWRdIG9sZF92YWx1ZTogJkJpZ1VpbnQsCiAgICAgICAgbmV3X3ZhbHVlOiAmQmlnVWludCwKICAgICk7CgogICAgLy8vIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgY29udHJhY3QgaXMgcGF1c2VkCiAgICAjW2V2ZW50KCJwYXVzZSIpXQogICAgZm4gcGF1c2VfZXZlbnQoJnNlbGYpOwoKICAgIC8vLyBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGNvbnRyYWN0IGlzIHVucGF1c2VkCiAgICAjW2V2ZW50KCJ1bnBhdXNlIildCiAgICBmbiB1bnBhdXNlX2V2ZW50KCZzZWxmKTsKCiAgICAvLy8gRXZlbnQgZW1pdHRlZCB3aGVuIEVHTEQgaXMgd2l0aGRyYXduCiAgICAjW2V2ZW50KCJ3aXRoZHJhdyIpXQogICAgZm4gd2l0aGRyYXdfZXZlbnQoCiAgICAgICAgJnNlbGYsCiAgICAgICAgI1tpbmRleGVkXSByZWNpcGllbnQ6ICZNYW5hZ2VkQWRkcmVzcywKICAgICAgICBhbW91bnQ6ICZCaWdVaW50LAogICAgKTsKCiAgICAvLy8gU3RvcmFnZSBtYXBwZXIgZm9yIHRoZSBudW1iZXIgb2YgcmVxdWVzdHMgcGVyIEVHTEQKICAgICNbc3RvcmFnZV9tYXBwZXIoIm51bVJlcXVlc3RzUGVyRWdsZCIpXQogICAgZm4gbnVtX3JlcXVlc3RzX3Blcl9lZ2xkKCZzZWxmKSAtPiBTaW5nbGVWYWx1ZU1hcHBlcjxCaWdVaW50PjsKCiAgICAvLy8gU3RvcmFnZSBtYXBwZXIgZm9yIGFjcXVpcmVkIHJlcXVlc3RzIGNvdW50IHBlciBJRAogICAgI1tzdG9yYWdlX21hcHBlcigiYWNxdWlyZWRSZXF1ZXN0cyIpXQogICAgZm4gYWNxdWlyZWRfcmVxdWVzdHMoJnNlbGYsIGlkOiAmdTY0KSAtPiBTaW5nbGVWYWx1ZU1hcHBlcjxCaWdVaW50PjsKCiAgICAvLy8gU3RvcmFnZSBtYXBwZXIgZm9yIHBhdXNlIHN0YXRlCiAgICAjW3N0b3JhZ2VfbWFwcGVyKCJpc1BhdXNlZCIpXQogICAgZm4gaXNfcGF1c2VkKCZzZWxmKSAtPiBTaW5nbGVWYWx1ZU1hcHBlcjxib29sPjsKfQo=",
- "module": ".",
- "dependencyDepth": 0,
- "isTestFile": false
- },
- {
- "path": "tests/scenarios_rs_test.rs",
- "content": "dXNlIG11bHRpdmVyc3hfc2Nfc2NlbmFyaW86Oio7CgpmbiB3b3JsZCgpIC0+IFNjZW5hcmlvV29ybGQgewogICAgbGV0IG11dCBibG9ja2NoYWluID0gU2NlbmFyaW9Xb3JsZDo6bmV3KCk7CgogICAgYmxvY2tjaGFpbi5zZXRfY3VycmVudF9kaXJfZnJvbV93b3Jrc3BhY2UoIiIpOwogICAgYmxvY2tjaGFpbi5yZWdpc3Rlcl9jb250cmFjdCgibXhzYzpvdXRwdXQvcmVxdWVzdHMubXhzYy5qc29uIiwgcmVxdWVzdHM6OkNvbnRyYWN0QnVpbGRlcik7CiAgICBibG9ja2NoYWluCn0KCiNbdGVzdF0KZm4gYWRkX3JlcXVlc3RzX2FjY3VtdWxhdGlvbl9ycygpIHsKICAgIHdvcmxkKCkucnVuKCJzY2VuYXJpb3MvYWRkX3JlcXVlc3RzX2FjY3VtdWxhdGlvbi5zY2VuLmpzb24iKTsKfQoKI1t0ZXN0XQpmbiBhZGRfcmVxdWVzdHNfbXVsdGlwbGVfcnMoKSB7CiAgICB3b3JsZCgpLnJ1bigic2NlbmFyaW9zL2FkZF9yZXF1ZXN0c19tdWx0aXBsZS5zY2VuLmpzb24iKTsKfQoKI1t0ZXN0XQpmbiBhZGRfcmVxdWVzdHNfc2luZ2xlX3JzKCkgewogICAgd29ybGQoKS5ydW4oInNjZW5hcmlvcy9hZGRfcmVxdWVzdHNfc2luZ2xlLnNjZW4uanNvbiIpOwp9CgojW3Rlc3RdCmZuIGFkZF9yZXF1ZXN0c193aGVuX3BhdXNlZF9ycygpIHsKICAgIHdvcmxkKCkucnVuKCJzY2VuYXJpb3MvYWRkX3JlcXVlc3RzX3doZW5fcGF1c2VkLnNjZW4uanNvbiIpOwp9CgojW3Rlc3RdCmZuIGNoYW5nZV9yYXRlX25vbl9vd25lcl9ycygpIHsKICAgIHdvcmxkKCkucnVuKCJzY2VuYXJpb3MvY2hhbmdlX3JhdGVfbm9uX293bmVyLnNjZW4uanNvbiIpOwp9CgojW3Rlc3RdCmZuIGNoYW5nZV9yYXRlX3ZhbGlkX3JzKCkgewogICAgd29ybGQoKS5ydW4oInNjZW5hcmlvcy9jaGFuZ2VfcmF0ZV92YWxpZC5zY2VuLmpzb24iKTsKfQoKI1t0ZXN0XQpmbiBjaGFuZ2VfcmF0ZV96ZXJvX3JzKCkgewogICAgd29ybGQoKS5ydW4oInNjZW5hcmlvcy9jaGFuZ2VfcmF0ZV96ZXJvLnNjZW4uanNvbiIpOwp9CgojW3Rlc3RdCmZuIGZ1bGxfd29ya2Zsb3dfcnMoKSB7CiAgICB3b3JsZCgpLnJ1bigic2NlbmFyaW9zL2Z1bGxfd29ya2Zsb3cuc2Nlbi5qc29uIik7Cn0KCiNbdGVzdF0KZm4gZ2V0X3JlcXVlc3RzX2V4aXN0aW5nX3JzKCkgewogICAgd29ybGQoKS5ydW4oInNjZW5hcmlvcy9nZXRfcmVxdWVzdHNfZXhpc3Rpbmcuc2Nlbi5qc29uIik7Cn0KCiNbdGVzdF0KZm4gZ2V0X3JlcXVlc3RzX25vbmV4aXN0ZW50X3JzKCkgewogICAgd29ybGQoKS5ydW4oInNjZW5hcmlvcy9nZXRfcmVxdWVzdHNfbm9uZXhpc3RlbnQuc2Nlbi5qc29uIik7Cn0KCiNbdGVzdF0KZm4gaW5pdF92YWxpZF9ycygpIHsKICAgIHdvcmxkKCkucnVuKCJzY2VuYXJpb3MvaW5pdF92YWxpZC5zY2VuLmpzb24iKTsKfQoKI1t0ZXN0XQpmbiBpbml0X3plcm9fcnMoKSB7CiAgICB3b3JsZCgpLnJ1bigic2NlbmFyaW9zL2luaXRfemVyby5zY2VuLmpzb24iKTsKfQoKI1t0ZXN0XQpmbiBwYXVzZV9hbHJlYWR5X3BhdXNlZF9ycygpIHsKICAgIHdvcmxkKCkucnVuKCJzY2VuYXJpb3MvcGF1c2VfYWxyZWFkeV9wYXVzZWQuc2Nlbi5qc29uIik7Cn0KCiNbdGVzdF0KZm4gcGF1c2Vfbm9uX293bmVyX3JzKCkgewogICAgd29ybGQoKS5ydW4oInNjZW5hcmlvcy9wYXVzZV9ub25fb3duZXIuc2Nlbi5qc29uIik7Cn0KCiNbdGVzdF0KZm4gcGF1c2Vfc3VjY2Vzc19ycygpIHsKICAgIHdvcmxkKCkucnVuKCJzY2VuYXJpb3MvcGF1c2Vfc3VjY2Vzcy5zY2VuLmpzb24iKTsKfQoKI1t0ZXN0XQpmbiBwYXVzZV91bnBhdXNlX3dvcmtmbG93X3JzKCkgewogICAgd29ybGQoKS5ydW4oInNjZW5hcmlvcy9wYXVzZV91bnBhdXNlX3dvcmtmbG93LnNjZW4uanNvbiIpOwp9CgojW3Rlc3RdCmZuIHJhdGVfY2hhbmdlX2FmZmVjdHNfZnV0dXJlX3JzKCkgewogICAgd29ybGQoKS5ydW4oInNjZW5hcmlvcy9yYXRlX2NoYW5nZV9hZmZlY3RzX2Z1dHVyZS5zY2VuLmpzb24iKTsKfQoKI1t0ZXN0XQpmbiB1bnBhdXNlX25vbl9vd25lcl9ycygpIHsKICAgIHdvcmxkKCkucnVuKCJzY2VuYXJpb3MvdW5wYXVzZV9ub25fb3duZXIuc2Nlbi5qc29uIik7Cn0KCiNbdGVzdF0KZm4gdW5wYXVzZV9ub3RfcGF1c2VkX3JzKCkgewogICAgd29ybGQoKS5ydW4oInNjZW5hcmlvcy91bnBhdXNlX25vdF9wYXVzZWQuc2Nlbi5qc29uIik7Cn0KCiNbdGVzdF0KZm4gdW5wYXVzZV9zdWNjZXNzX3JzKCkgewogICAgd29ybGQoKS5ydW4oInNjZW5hcmlvcy91bnBhdXNlX3N1Y2Nlc3Muc2Nlbi5qc29uIik7Cn0KCiNbdGVzdF0KZm4gd2l0aGRyYXdfZW1wdHlfcnMoKSB7CiAgICB3b3JsZCgpLnJ1bigic2NlbmFyaW9zL3dpdGhkcmF3X2VtcHR5LnNjZW4uanNvbiIpOwp9CgojW3Rlc3RdCmZuIHdpdGhkcmF3X25vbl9vd25lcl9ycygpIHsKICAgIHdvcmxkKCkucnVuKCJzY2VuYXJpb3Mvd2l0aGRyYXdfbm9uX293bmVyLnNjZW4uanNvbiIpOwp9CgojW3Rlc3RdCmZuIHdpdGhkcmF3X3N1Y2Nlc3NfcnMoKSB7CiAgICB3b3JsZCgpLnJ1bigic2NlbmFyaW9zL3dpdGhkcmF3X3N1Y2Nlc3Muc2Nlbi5qc29uIik7Cn0K",
- "module": ".",
- "dependencyDepth": 0,
- "isTestFile": true
- },
- {
- "path": "wasm/Cargo.lock",
- "content": "IyBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBAZ2VuZXJhdGVkIGJ5IENhcmdvLgojIEl0IGlzIG5vdCBpbnRlbmRlZCBmb3IgbWFudWFsIGVkaXRpbmcuCnZlcnNpb24gPSA0CgpbW3BhY2thZ2VdXQpuYW1lID0gImFycmF5dmVjIgp2ZXJzaW9uID0gIjAuNy42Igpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjdjMDJkMTIzZGYwMTdlZmNkZmJkNzM5ZWY4MTczNWIzNmM1YmE4M2VjM2M1OWM4MGE5ZDdlY2M3MThmOTJlNTAiCgpbW3BhY2thZ2VdXQpuYW1lID0gImF1dG9jZmciCnZlcnNpb24gPSAiMS41LjAiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiYzA4NjA2ZjhjM2NiZjRjZTZlYzhlMjhmYjAwMTRhMmMwODY3MDhmZTk1NGVhYTg4NTM4NGE2MTY1MTcyZTdlOCIKCltbcGFja2FnZV1dCm5hbWUgPSAiYml0ZmxhZ3MiCnZlcnNpb24gPSAiMi45LjAiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiNWM4MjE0MTE1YjdiZjg0MDk5ZjEzMDkzMjRlNjMxNDFkNGM1ZDdjYzI2ODYyZjk3YTBhODU3ZGJlZmUxNjViZCIKCltbcGFja2FnZV1dCm5hbWUgPSAiZW5kaWFuLXR5cGUiCnZlcnNpb24gPSAiMC4xLjIiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiYzM0ZjA0NjY2ZDgzNWZmNWQ2MmUwNThjMzk5NTE0N2MwNmY0MmZlODZmZjA1MzMzNzYzMmJjYTgzZTQyNzAyZCIKCltbcGFja2FnZV1dCm5hbWUgPSAiZ2VuZXJpYy1hcnJheSIKdmVyc2lvbiA9ICIxLjMuNSIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICJlYWY1N2M0OWE5NWZkMWZlMjRiOTBiMzAzM2JlZTZkYzdlOGYxMjg4ZDUxNDk0Y2I0NGU2MjdjMjk1ZTM4NTQyIgpkZXBlbmRlbmNpZXMgPSBbCiAicnVzdHZlcnNpb24iLAogInR5cGVudW0iLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gImhleCIKdmVyc2lvbiA9ICIwLjQuMyIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICI3ZjI0MjU0YWE5YTU0YjVjODU4ZWFlZTJmNWJjY2RiNDZhYWYwZTQ4NmE1OTVlZDVmZDhmODZiYTU1MjMyYTcwIgoKW1twYWNrYWdlXV0KbmFtZSA9ICJoZXgtbGl0ZXJhbCIKdmVyc2lvbiA9ICIwLjQuMSIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICI2ZmUyMjY3ZDRlZDQ5YmMwN2I2MzgwMTU1OWJlMjhjNzE4ZWEwNmM0NzM4YjdhMDNjOTRkZjczODZkMmNkZTQ2IgoKW1twYWNrYWdlXV0KbmFtZSA9ICJtdWx0aXZlcnN4LWNoYWluLWNvcmUiCnZlcnNpb24gPSAiMC4xNC4wIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjczZjFmMDUyNmNhMDk0MTg1ODQ3Nzc2YzJjMDNkZTk3ZWEwODI3NDNlZTRlNmY3OTk4NjBhZDY3ZTdkNzgyNTAiCmRlcGVuZGVuY2llcyA9IFsKICJiaXRmbGFncyIsCiAibXVsdGl2ZXJzeC1zYy1jb2RlYyIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAibXVsdGl2ZXJzeC1zYyIKdmVyc2lvbiA9ICIwLjU3LjEiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiMjA2MDJkNGZjMzM2MDkyZmFhZGMwM2I2YjQ0NWM0YmI1ZTRkYmM0Yzg2ZmI1MzcyNmU0NmVjYTY3MDcwODEzYSIKZGVwZW5kZW5jaWVzID0gWwogImJpdGZsYWdzIiwKICJnZW5lcmljLWFycmF5IiwKICJoZXgtbGl0ZXJhbCIsCiAibXVsdGl2ZXJzeC1jaGFpbi1jb3JlIiwKICJtdWx0aXZlcnN4LXNjLWNvZGVjIiwKICJtdWx0aXZlcnN4LXNjLWRlcml2ZSIsCiAibnVtLXRyYWl0cyIsCiAidW53cmFwLWluZmFsbGlibGUiLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gIm11bHRpdmVyc3gtc2MtY29kZWMiCnZlcnNpb24gPSAiMC4yMi4wIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjQzZTBmMjRhMDIwYWRmMzJmYWZmYWUxYzU3NDc1YzZiNzI4NWEzMjE2ZDFhMzZlNGE3MzYxNzYzOTcyMWMyZTAiCmRlcGVuZGVuY2llcyA9IFsKICJhcnJheXZlYyIsCiAiYml0ZmxhZ3MiLAogIm11bHRpdmVyc3gtc2MtY29kZWMtZGVyaXZlIiwKICJ1bndyYXAtaW5mYWxsaWJsZSIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAibXVsdGl2ZXJzeC1zYy1jb2RlYy1kZXJpdmUiCnZlcnNpb24gPSAiMC4yMi4wIgpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjdjNWYxN2Q1ZWUyMzY1N2Q1Y2RkYzdmNDQ3MTkyNWI1YTQ5ZjdlMjUzMDZmOGJiYTY1NmVhNjkxN2FjYzYyOWQiCmRlcGVuZGVuY2llcyA9IFsKICJoZXgiLAogInByb2MtbWFjcm8yIiwKICJxdW90ZSIsCiAic3luIiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJtdWx0aXZlcnN4LXNjLWRlcml2ZSIKdmVyc2lvbiA9ICIwLjU3LjEiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiMGQ0NGQwOGQzMzc2YzE5OWU4YzM5MWNjMDc3NTJkMjgyMmNkMjg5NjkzZGE1MzE5ZDc5MDU1OTk1MDFlNTU3ZiIKZGVwZW5kZW5jaWVzID0gWwogImhleCIsCiAicHJvYy1tYWNybzIiLAogInF1b3RlIiwKICJyYWRpeF90cmllIiwKICJzeW4iLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gIm11bHRpdmVyc3gtc2Mtd2FzbS1hZGFwdGVyIgp2ZXJzaW9uID0gIjAuNTcuMSIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICJlZTgyNTNiODQ2MDA1NTRmYmUxNmVhMGEyMzRiMDA5ODU0MzQ4ZGM5NWNlMTc0YmE2ZWJhMDQ2ZGM1OTE4ZjhmIgpkZXBlbmRlbmNpZXMgPSBbCiAibXVsdGl2ZXJzeC1zYyIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAibmliYmxlX3ZlYyIKdmVyc2lvbiA9ICIwLjEuMCIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICI3N2E1ZDgzZGY5ZjM2ZmUyM2YwYzM2NDhjNmJiYjhiMDI5OGJiNWYxOTM5YzhmMjcwNDQzMTM3MWY0Yjg0ZDQzIgpkZXBlbmRlbmNpZXMgPSBbCiAic21hbGx2ZWMiLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gIm51bS10cmFpdHMiCnZlcnNpb24gPSAiMC4yLjE5Igpzb3VyY2UgPSAicmVnaXN0cnkraHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9jcmF0ZXMuaW8taW5kZXgiCmNoZWNrc3VtID0gIjA3MWRmYzA2MjY5MGU5MGI3MzRjMGIyMjczY2U3MmFkMGZmYTk1ZjBjNzQ1OTZiYzI1MGRjZmQ5NjAyNjI4NDEiCmRlcGVuZGVuY2llcyA9IFsKICJhdXRvY2ZnIiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJwcm9jLW1hY3JvMiIKdmVyc2lvbiA9ICIxLjAuOTQiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiYTMxOTcxNzUyZTcwYjhiMjY4NmQ3ZTQ2ZWMxN2ZiMzhkYWQ0MDUxZDk0MDI0Yzg4ZGY0OWI2NjdjYWVhOWM4NCIKZGVwZW5kZW5jaWVzID0gWwogInVuaWNvZGUtaWRlbnQiLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gInF1b3RlIgp2ZXJzaW9uID0gIjEuMC4zOSIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICJjMWYxOTE0Y2U5MDllMTY1OGQ5OTA3OTEzYjRiOTE5NDc0MzBjN2Q5YmU1OThiMTVhMTkxMjkzNWI4YzA0ODAxIgpkZXBlbmRlbmNpZXMgPSBbCiAicHJvYy1tYWNybzIiLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gInJhZGl4X3RyaWUiCnZlcnNpb24gPSAiMC4yLjEiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiYzA2OWMxNzlmY2RjNmEyZmUyNGQ4ZDE4MzA1Y2YwODVmZGJkNGY5MjJjMDQxOTQzZTIwMzY4NWQ2YTFjNThmZCIKZGVwZW5kZW5jaWVzID0gWwogImVuZGlhbi10eXBlIiwKICJuaWJibGVfdmVjIiwKXQoKW1twYWNrYWdlXV0KbmFtZSA9ICJyZXF1ZXN0cyIKdmVyc2lvbiA9ICIwLjAuMCIKZGVwZW5kZW5jaWVzID0gWwogIm11bHRpdmVyc3gtc2MiLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gInJlcXVlc3RzLXdhc20iCnZlcnNpb24gPSAiMC4wLjAiCmRlcGVuZGVuY2llcyA9IFsKICJtdWx0aXZlcnN4LXNjLXdhc20tYWRhcHRlciIsCiAicmVxdWVzdHMiLApdCgpbW3BhY2thZ2VdXQpuYW1lID0gInJ1c3R2ZXJzaW9uIgp2ZXJzaW9uID0gIjEuMC4yMiIKc291cmNlID0gInJlZ2lzdHJ5K2h0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvY3JhdGVzLmlvLWluZGV4IgpjaGVja3N1bSA9ICJiMzljZGVmMGZhODAwZmM0NDUyNWM4NGNjYjU0YTAyOTk2MWE4MjE1Zjk2MTk3NTM2MzVhOWMwZDI1MzhkNDZkIgoKW1twYWNrYWdlXV0KbmFtZSA9ICJzbWFsbHZlYyIKdmVyc2lvbiA9ICIxLjE1LjEiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiNjdiMWI3YTNiNWZlNGYxMzc2ODg3MTg0MDQ1ZmNmNDVjNjllOTJhZjczNGI3YWFkZGMwNWZiNzc3YjZmYmQwMyIKCltbcGFja2FnZV1dCm5hbWUgPSAic3luIgp2ZXJzaW9uID0gIjIuMC4xMDAiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiYjA5YTQ0YWNjYWQ4MWUxYmExY2Q3NGEzMjQ2MWJhODlkZWU4OTA5NWJhMTdiMzJmNWQwMzY4M2IxYjFmYzJhMCIKZGVwZW5kZW5jaWVzID0gWwogInByb2MtbWFjcm8yIiwKICJxdW90ZSIsCiAidW5pY29kZS1pZGVudCIsCl0KCltbcGFja2FnZV1dCm5hbWUgPSAidHlwZW51bSIKdmVyc2lvbiA9ICIxLjE5LjAiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiNTYyZDQ4MTA2NmJkZTA2NTgyNzZhMzU0NjdjNGFmMDBiZGM2ZWU3MjYzMDU2OThhNTViODZlNjFkN2FkODJiYiIKCltbcGFja2FnZV1dCm5hbWUgPSAidW5pY29kZS1pZGVudCIKdmVyc2lvbiA9ICIxLjAuMjIiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiOTMxMmY3YzRmNmZmOTA2OWIxNjU0OTgyMzRjZThiZTY1ODA1OWM2NzI4NjMzNjY3YzUyNmUyN2RjMmNmMWRmNSIKCltbcGFja2FnZV1dCm5hbWUgPSAidW53cmFwLWluZmFsbGlibGUiCnZlcnNpb24gPSAiMC4xLjUiCnNvdXJjZSA9ICJyZWdpc3RyeStodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL2NyYXRlcy5pby1pbmRleCIKY2hlY2tzdW0gPSAiMTUxYWMwOTk3OGQzYzI4NjJjNGUzOWI1NTdmNGVjZWVlMmNjNzIxNTBiYzRjYjRmMTZhYmYwNjFiNmUzODFmYiIK",
- "module": ".",
- "dependencyDepth": 0,
- "isTestFile": false
- },
- {
- "path": "wasm/Cargo.toml",
- "content": "IyBDb2RlIGdlbmVyYXRlZCBieSB0aGUgbXVsdGl2ZXJzeC1zYyBidWlsZCBzeXN0ZW0uIERPIE5PVCBFRElULgoKIyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyAjIyMjIyMjIyMjIyMjIyBBVVRPLUdFTkVSQVRFRCAjIyMjIyMjIyMjIyMjCiMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpbcGFja2FnZV0KbmFtZSA9ICJyZXF1ZXN0cy13YXNtIgp2ZXJzaW9uID0gIjAuMC4wIgplZGl0aW9uID0gIjIwMjEiCnB1Ymxpc2ggPSBmYWxzZQoKW2xpYl0KY3JhdGUtdHlwZSA9IFsiY2R5bGliIl0KCltwcm9maWxlLnJlbGVhc2VdCmNvZGVnZW4tdW5pdHMgPSAxCm9wdC1sZXZlbCA9ICJ6IgpsdG8gPSB0cnVlCmRlYnVnID0gZmFsc2UKcGFuaWMgPSAiYWJvcnQiCm92ZXJmbG93LWNoZWNrcyA9IGZhbHNlCgpbcHJvZmlsZS5kZXZdCnBhbmljID0gImFib3J0IgoKW2RlcGVuZGVuY2llcy5yZXF1ZXN0c10KcGF0aCA9ICIuLiIKCltkZXBlbmRlbmNpZXMubXVsdGl2ZXJzeC1zYy13YXNtLWFkYXB0ZXJdCnZlcnNpb24gPSAiMC41Ny4xIgoKW3dvcmtzcGFjZV0KbWVtYmVycyA9IFsiLiJdCg==",
- "module": ".",
- "dependencyDepth": 0,
- "isTestFile": false
- },
- {
- "path": "wasm/src/lib.rs",
- "content": "Ly8gQ29kZSBnZW5lcmF0ZWQgYnkgdGhlIG11bHRpdmVyc3gtc2MgYnVpbGQgc3lzdGVtLiBETyBOT1QgRURJVC4KCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLy8vLy8vLy8vLy8vLy8vLy8vIEFVVE8tR0VORVJBVEVEIC8vLy8vLy8vLy8vLy8vLy8vLwovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgovLyBJbml0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLy8gVXBncmFkZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi8vIEVuZHBvaW50czogICAgICAgICAgICAgICAgICAgICAgICAgICAgOAovLyBBc3luYyBDYWxsYmFjayAoZW1wdHkpOiAgICAgICAgICAgICAgIDEKLy8gVG90YWwgbnVtYmVyIG9mIGV4cG9ydGVkIGZ1bmN0aW9uczogIDExCgojIVtub19zdGRdCgptdWx0aXZlcnN4X3NjX3dhc21fYWRhcHRlcjo6YWxsb2NhdG9yISgpOwptdWx0aXZlcnN4X3NjX3dhc21fYWRhcHRlcjo6cGFuaWNfaGFuZGxlciEoKTsKCm11bHRpdmVyc3hfc2Nfd2FzbV9hZGFwdGVyOjplbmRwb2ludHMhIHsKICAgIHJlcXVlc3RzCiAgICAoCiAgICAgICAgaW5pdCA9PiBpbml0CiAgICAgICAgdXBncmFkZSA9PiB1cGdyYWRlCiAgICAgICAgYWRkUmVxdWVzdHMgPT4gYWRkX3JlcXVlc3RzCiAgICAgICAgZ2V0UmVxdWVzdHMgPT4gZ2V0X3JlcXVlc3RzCiAgICAgICAgaXNQYXVzZWQgPT4gZ2V0X2lzX3BhdXNlZAogICAgICAgIGdldFJlcXVlc3RzUGVyRWdsZCA9PiBnZXRfcmVxdWVzdHNfcGVyX2VnbGQKICAgICAgICBjaGFuZ2VOdW1SZXF1ZXN0c1BlckVHTEQgPT4gY2hhbmdlX251bV9yZXF1ZXN0c19wZXJfZWdsZAogICAgICAgIHBhdXNlID0+IHBhdXNlCiAgICAgICAgdW5wYXVzZSA9PiB1bnBhdXNlCiAgICAgICAgd2l0aGRyYXdBbGwgPT4gd2l0aGRyYXdfYWxsCiAgICApCn0KCm11bHRpdmVyc3hfc2Nfd2FzbV9hZGFwdGVyOjphc3luY19jYWxsYmFja19lbXB0eSEge30K",
- "module": ".",
- "dependencyDepth": 0,
- "isTestFile": false
- }
- ]
-}
\ No newline at end of file
diff --git a/requests-contract/output/requests/requests.abi.json b/requests-contract/output/requests/requests.abi.json
deleted file mode 100644
index 2944ba8..0000000
--- a/requests-contract/output/requests/requests.abi.json
+++ /dev/null
@@ -1,230 +0,0 @@
-{
- "buildInfo": {
- "rustc": {
- "version": "1.86.0",
- "commitHash": "05f9846f893b09a1be1fc8560e33fc3c815cfecb",
- "commitDate": "2025-03-31",
- "channel": "Stable",
- "short": "rustc 1.86.0 (05f9846f8 2025-03-31)"
- },
- "contractCrate": {
- "name": "requests",
- "version": "0.0.0"
- },
- "framework": {
- "name": "multiversx-sc",
- "version": "0.57.1"
- }
- },
- "name": "RequestsContract",
- "constructor": {
- "docs": [
- "Constructor - initializes the contract with the number of requests per EGLD"
- ],
- "inputs": [
- {
- "name": "num_requests_per_egld",
- "type": "BigUint"
- }
- ],
- "outputs": []
- },
- "upgradeConstructor": {
- "docs": [
- "Upgrade function - called when contract is upgraded"
- ],
- "inputs": [
- {
- "name": "num_requests_per_egld",
- "type": "BigUint"
- }
- ],
- "outputs": []
- },
- "endpoints": [
- {
- "docs": [
- "Add acquired requests for a given ID - payable only in EGLD",
- "The number of acquired requests added = (EGLD amount transferred in regular units) * num_requests_per_egld",
- "Example: 2.5 EGLD * 100 rate = 250 acquired requests"
- ],
- "name": "addRequests",
- "mutability": "mutable",
- "payableInTokens": [
- "EGLD"
- ],
- "inputs": [
- {
- "name": "id",
- "type": "u64"
- }
- ],
- "outputs": []
- },
- {
- "docs": [
- "Get the number of acquired requests for a given ID",
- "Returns 0 if the ID was not credited"
- ],
- "name": "getRequests",
- "mutability": "readonly",
- "inputs": [
- {
- "name": "id",
- "type": "u64"
- }
- ],
- "outputs": [
- {
- "type": "BigUint"
- }
- ]
- },
- {
- "docs": [
- "Check if the contract is paused"
- ],
- "name": "isPaused",
- "mutability": "readonly",
- "inputs": [],
- "outputs": [
- {
- "type": "bool"
- }
- ]
- },
- {
- "docs": [
- "Get the number of requests per EGLD"
- ],
- "name": "getRequestsPerEgld",
- "mutability": "readonly",
- "inputs": [],
- "outputs": [
- {
- "type": "BigUint"
- }
- ]
- },
- {
- "docs": [
- "Change the number of requests per EGLD",
- "Can only be called by the owner"
- ],
- "name": "changeNumRequestsPerEGLD",
- "mutability": "mutable",
- "inputs": [
- {
- "name": "new_num_requests_per_egld",
- "type": "BigUint"
- }
- ],
- "outputs": []
- },
- {
- "docs": [
- "Pause the contract - prevents new requests from being added",
- "Can only be called by the owner"
- ],
- "name": "pause",
- "mutability": "mutable",
- "inputs": [],
- "outputs": []
- },
- {
- "docs": [
- "Unpause the contract - allows new requests to be added again",
- "Can only be called by the owner"
- ],
- "name": "unpause",
- "mutability": "mutable",
- "inputs": [],
- "outputs": []
- },
- {
- "docs": [
- "Withdraw all available EGLD in the contract to the owner's address",
- "Can only be called by the owner"
- ],
- "name": "withdrawAll",
- "mutability": "mutable",
- "inputs": [],
- "outputs": []
- }
- ],
- "events": [
- {
- "docs": [
- "Event emitted when requests are added"
- ],
- "identifier": "addRequests",
- "inputs": [
- {
- "name": "id",
- "type": "u64",
- "indexed": true
- },
- {
- "name": "egld_amount",
- "type": "BigUint",
- "indexed": true
- },
- {
- "name": "requests_added",
- "type": "BigUint"
- }
- ]
- },
- {
- "docs": [
- "Event emitted when the exchange rate is changed"
- ],
- "identifier": "changeNumRequestsPerEGLD",
- "inputs": [
- {
- "name": "old_value",
- "type": "BigUint",
- "indexed": true
- },
- {
- "name": "new_value",
- "type": "BigUint"
- }
- ]
- },
- {
- "docs": [
- "Event emitted when the contract is paused"
- ],
- "identifier": "pause",
- "inputs": []
- },
- {
- "docs": [
- "Event emitted when the contract is unpaused"
- ],
- "identifier": "unpause",
- "inputs": []
- },
- {
- "docs": [
- "Event emitted when EGLD is withdrawn"
- ],
- "identifier": "withdraw",
- "inputs": [
- {
- "name": "recipient",
- "type": "Address",
- "indexed": true
- },
- {
- "name": "amount",
- "type": "BigUint"
- }
- ]
- }
- ],
- "esdtAttributes": [],
- "hasCallback": false,
- "types": {}
-}
diff --git a/requests-contract/output/requests/requests.codehash.txt b/requests-contract/output/requests/requests.codehash.txt
deleted file mode 100644
index 8a5cfdb..0000000
--- a/requests-contract/output/requests/requests.codehash.txt
+++ /dev/null
@@ -1 +0,0 @@
-1e8c9ef47f3f3f00b58b48075411edab699126c8ee9ff69f53827dfcf2eecf0a
\ No newline at end of file
diff --git a/requests-contract/output/requests/requests.imports.json b/requests-contract/output/requests/requests.imports.json
deleted file mode 100644
index 3bee223..0000000
--- a/requests-contract/output/requests/requests.imports.json
+++ /dev/null
@@ -1,36 +0,0 @@
-[
- "bigIntAdd",
- "bigIntFinishUnsigned",
- "bigIntGetCallValue",
- "bigIntGetESDTExternalBalance",
- "bigIntGetExternalBalance",
- "bigIntGetUnsignedArgument",
- "bigIntMul",
- "bigIntSetInt64",
- "bigIntSign",
- "bigIntTDiv",
- "checkNoPayment",
- "getNumArguments",
- "mBufferAppend",
- "mBufferAppendBytes",
- "mBufferEq",
- "mBufferFromBigIntUnsigned",
- "mBufferGetByteSlice",
- "mBufferGetBytes",
- "mBufferGetLength",
- "mBufferNew",
- "mBufferSetBytes",
- "mBufferStorageLoad",
- "mBufferStorageStore",
- "mBufferToBigIntUnsigned",
- "managedCaller",
- "managedGetMultiESDTCallValue",
- "managedOwnerAddress",
- "managedSCAddress",
- "managedSignalError",
- "managedTransferValueExecute",
- "managedWriteLog",
- "signalError",
- "smallIntFinishSigned",
- "smallIntGetUnsignedArgument"
-]
\ No newline at end of file
diff --git a/requests-contract/output/requests/requests.mxsc.json b/requests-contract/output/requests/requests.mxsc.json
deleted file mode 100644
index 77a95f9..0000000
--- a/requests-contract/output/requests/requests.mxsc.json
+++ /dev/null
@@ -1,282 +0,0 @@
-{
- "buildInfo": {
- "rustc": {
- "version": "1.86.0",
- "commitHash": "05f9846f893b09a1be1fc8560e33fc3c815cfecb",
- "commitDate": "2025-03-31",
- "channel": "Stable",
- "short": "rustc 1.86.0 (05f9846f8 2025-03-31)"
- },
- "contractCrate": {
- "name": "requests",
- "version": "0.0.0"
- },
- "framework": {
- "name": "multiversx-sc",
- "version": "0.57.1"
- }
- },
- "abi": {
- "name": "RequestsContract",
- "constructor": {
- "docs": [
- "Constructor - initializes the contract with the number of requests per EGLD"
- ],
- "inputs": [
- {
- "name": "num_requests_per_egld",
- "type": "BigUint"
- }
- ],
- "outputs": []
- },
- "upgradeConstructor": {
- "docs": [
- "Upgrade function - called when contract is upgraded"
- ],
- "inputs": [
- {
- "name": "num_requests_per_egld",
- "type": "BigUint"
- }
- ],
- "outputs": []
- },
- "endpoints": [
- {
- "docs": [
- "Add acquired requests for a given ID - payable only in EGLD",
- "The number of acquired requests added = (EGLD amount transferred in regular units) * num_requests_per_egld",
- "Example: 2.5 EGLD * 100 rate = 250 acquired requests"
- ],
- "name": "addRequests",
- "mutability": "mutable",
- "payableInTokens": [
- "EGLD"
- ],
- "inputs": [
- {
- "name": "id",
- "type": "u64"
- }
- ],
- "outputs": []
- },
- {
- "docs": [
- "Get the number of acquired requests for a given ID",
- "Returns 0 if the ID was not credited"
- ],
- "name": "getRequests",
- "mutability": "readonly",
- "inputs": [
- {
- "name": "id",
- "type": "u64"
- }
- ],
- "outputs": [
- {
- "type": "BigUint"
- }
- ]
- },
- {
- "docs": [
- "Check if the contract is paused"
- ],
- "name": "isPaused",
- "mutability": "readonly",
- "inputs": [],
- "outputs": [
- {
- "type": "bool"
- }
- ]
- },
- {
- "docs": [
- "Get the number of requests per EGLD"
- ],
- "name": "getRequestsPerEgld",
- "mutability": "readonly",
- "inputs": [],
- "outputs": [
- {
- "type": "BigUint"
- }
- ]
- },
- {
- "docs": [
- "Change the number of requests per EGLD",
- "Can only be called by the owner"
- ],
- "name": "changeNumRequestsPerEGLD",
- "mutability": "mutable",
- "inputs": [
- {
- "name": "new_num_requests_per_egld",
- "type": "BigUint"
- }
- ],
- "outputs": []
- },
- {
- "docs": [
- "Pause the contract - prevents new requests from being added",
- "Can only be called by the owner"
- ],
- "name": "pause",
- "mutability": "mutable",
- "inputs": [],
- "outputs": []
- },
- {
- "docs": [
- "Unpause the contract - allows new requests to be added again",
- "Can only be called by the owner"
- ],
- "name": "unpause",
- "mutability": "mutable",
- "inputs": [],
- "outputs": []
- },
- {
- "docs": [
- "Withdraw all available EGLD in the contract to the owner's address",
- "Can only be called by the owner"
- ],
- "name": "withdrawAll",
- "mutability": "mutable",
- "inputs": [],
- "outputs": []
- }
- ],
- "events": [
- {
- "docs": [
- "Event emitted when requests are added"
- ],
- "identifier": "addRequests",
- "inputs": [
- {
- "name": "id",
- "type": "u64",
- "indexed": true
- },
- {
- "name": "egld_amount",
- "type": "BigUint",
- "indexed": true
- },
- {
- "name": "requests_added",
- "type": "BigUint"
- }
- ]
- },
- {
- "docs": [
- "Event emitted when the exchange rate is changed"
- ],
- "identifier": "changeNumRequestsPerEGLD",
- "inputs": [
- {
- "name": "old_value",
- "type": "BigUint",
- "indexed": true
- },
- {
- "name": "new_value",
- "type": "BigUint"
- }
- ]
- },
- {
- "docs": [
- "Event emitted when the contract is paused"
- ],
- "identifier": "pause",
- "inputs": []
- },
- {
- "docs": [
- "Event emitted when the contract is unpaused"
- ],
- "identifier": "unpause",
- "inputs": []
- },
- {
- "docs": [
- "Event emitted when EGLD is withdrawn"
- ],
- "identifier": "withdraw",
- "inputs": [
- {
- "name": "recipient",
- "type": "Address",
- "indexed": true
- },
- {
- "name": "amount",
- "type": "BigUint"
- }
- ]
- }
- ],
- "esdtAttributes": [],
- "hasCallback": false,
- "types": {}
- },
- "code": "0061736d01000000015c1060000060017f017f6000017f60027f7f017f60027f7f0060017f0060037f7f7f0060037f7f7f017f60027f7e0060017f017e60047f7f7f7f017f60017e0060057f7f7f7e7f0060057f7f7e7f7f017f60047f7e7f7f0060017e017f02bd062203656e760e626967496e74536574496e743634000803656e7609626967496e74416464000603656e760b7369676e616c4572726f72000403656e760d6d616e6167656443616c6c6572000503656e76106d616e61676564534341646472657373000503656e76136d616e616765644f776e657241646472657373000503656e761c6d616e616765644765744d756c74694553445443616c6c56616c7565000503656e76106d4275666665724765744c656e677468000103656e7612626967496e7447657443616c6c56616c7565000503656e761b736d616c6c496e74476574556e7369676e6564417267756d656e74000903656e7619626967496e74476574556e7369676e6564417267756d656e74000403656e760f6765744e756d417267756d656e7473000203656e76136d42756666657247657442797465536c696365000a03656e760f6d4275666665725365744279746573000703656e76126d427566666572417070656e644279746573000703656e76196d42756666657246726f6d426967496e74556e7369676e6564000303656e76126d42756666657253746f726167654c6f6164000303656e76136d42756666657253746f7261676553746f7265000303656e76176d427566666572546f426967496e74556e7369676e6564000303656e760d6d427566666572417070656e64000303656e76126d616e616765645369676e616c4572726f72000503656e760a626967496e745369676e000103656e760e636865636b4e6f5061796d656e74000003656e7609626967496e744d756c000603656e760a626967496e7454446976000603656e760f6d616e6167656457726974654c6f67000403656e7614626967496e7446696e697368556e7369676e6564000503656e7614736d616c6c496e7446696e6973685369676e6564000b03656e760f6d4275666665724765744279746573000303656e761c626967496e744765744553445445787465726e616c42616c616e6365000c03656e7618626967496e7447657445787465726e616c42616c616e6365000403656e761b6d616e616765645472616e7366657256616c756545786563757465000d03656e760a6d4275666665724e6577000203656e76096d42756666657245710003032b2a0102040202020107010205030204030101040e040106010104030f02020100000000000000000000050005030100030616037f01418080080b7f0041a185080b7f0041b085080b07b8010e066d656d6f7279020004696e69740040077570677261646500410b616464526571756573747300420b67657452657175657374730043086973506175736564004412676574526571756573747350657245676c640045186368616e67654e756d526571756573747350657245474c440046057061757365004707756e706175736500480b7769746864726177416c6c00490863616c6c4261636b004b0a5f5f646174615f656e6403010b5f5f686561705f6261736503020a8a112a1601017f1023220142001000200120012000100120010b1901017f41dc840841dc840828020041016b220036020020000b0900200020011002000b0c01017f10232200100320000b0c01017f10232200100520000bd90101037f230041106b2200240041021028450440415a10060b02400240027f024002400240415a10074104760e020102000b41a58008411d1002000b415d410110280d011a415d1008415d0c010b200041086a420037030020004200370300415a2000411010290d01200028020c21012000280200220241187420024180fe03714108747220024108764180fe037120024118767272102a450d02200141187420014180fe03714108747220014108764180fe0371200141187672720b200041106a24000f0b41ec8008411d1002000b4180800841251002000b2b01027f200041e084082d0000220171200041ff017146220245044041e0840820002001723a00000b20020b0f002000410020022001100c4100470b1300415841898108410b100d1a4158200010300b0e01017f410010232200100a20000b1400100b20004604400f0b41c5800841191002000b1101017f1023220220002001100d1a20020b080041014100102d0b4601017f230041106b220224002002200141187420014180fe03714108747220014108764180fe03712001411876727236020c20002002410c6a4104100e1a200241106a24000b0b0020002001102141004a0b0f01017f102322012000100f1a20010b0d0020001023220010101a20000b3a01017f230041106b220224002002420037030820022001ad4101200241086a1034200020022802002002280204102d10111a200241106a24000baa0202047f027e2003200142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc07838420014238882208200142288822094280fe0383848484370000200041084100200142005322072002716b41ff017122042008a746220520042001423088a741ff01714671220620056a2006410020042009a741ff0171461b22056a2005410020042001422088a741ff0171461b22056a2005410020042001a72205411876461b22066a200641002004200541107641ff0171461b22066a200641002004200541087641ff0171461b22046a200441002001501b6a22042007200320044107716a2c0000410048732004410047712002716b22026b3602042000200220036a3602000b0b0020002001103110111a0bc80102017e037f230041106b22022400200242003703082000103222041007220341094904402004200220036b41106a200310291a027f02402002290308220142388620014280fe0383422886842001428080fc0783421886200142808080f80f834208868484200142088842808080f80f832001421888428080fc07838420014228884280fe038320014238888484220184420158044041002001a741016b0d021a0c010b200041af810841121037000b41010b200241106a24000f0b200041de8008410e1037000b2c01017f41948108411b102d2203200010131a200341c280084103100e1a200320012002100e1a20031014000b0f00200010321023220010121a20000b0900102e1a200010310b0d00102e1a200020011031102f0b1201017f102e220220002001102d102f20020b840101027f230041106b2201240041d581084110102d21022001200042388620004280fe0383422886842000428080fc0783421886200042808080f80f834208868484200042088842808080f80f832000421888428080fc07838420004228884280fe038320004238888484843703082002200141086a4108100e1a200141106a240020020b0a0041f081084112102d0b0a00419a82084108102d0b09002000101541004a0b2901017f10164101102c102b2200103f45044041b28308412c1024000b103d20001035103e410010330b3801017f10164101102c102b2200103f0440103d20001035103e416710101a41671007450440103e410010330b0f0b41b28308412c1024000bd30102057f017e230041106b2201240010271a4101102c4100100921050240103e1036450440102710222204103f450d011023220042808090bbbad6adf00d1000103d1038210220041022220320032002101720032003200010182005103c220210382200200020031022100120022000103541e58108410b103b2100102e210220014200370308200120054100200141086a1034200220012802002001280204100d1a20002002102f20002004103a2000200310391019200141106a24000f0b41c7820841121024000b41a2820841251024000b120010164101102c41001009103c1038101a0b0f0010164100102c103e1036ad101b0b0e0010164100102c103d1038101a0b5801037f10164101102c102b2100024010251026103004402000103f450d01103d10382101103d200010221035418282084118103b22022001103a20022000103910190f0b41878308412b1024000b41b28308412c1024000b3f0010164100102c02401025102610300440103e10360d01103e4101103341c181084105103b102e10190f0b41de830841251024000b41838408411a1024000b400010164100102c02401025102610300440103e1036450d01103e4100103341c681084107103b102e10190f0b419d840841271024000b41c4840841161024000bb90101057f10164100102c02401025102622041030044041898108410b102d2201102a21031023220010042000210210232100024020034504402001100721032002104a200141818508101c1a41e1840841818508200342002000101d0c010b2002104a41e184082000101e0b2000103f450d01200420004200102e102e101f1a41cd81084108103b2101102e1a10202202200410131a20012002102f20012000103910190f0b41d98208411b1024000b41f4820841131024000b0b00200041e18408101c1a0b02000b0bee040200418080080bda0466756e6374696f6e20646f6573206e6f74206163636570742045534454207061796d656e74696e636f7272656374206e756d626572206f66207472616e7366657273293a2077726f6e67206e756d626572206f6620617267756d656e7473696e70757420746f6f206c6f6e674d616e6167656456656320696e646578206f7574206f662072616e676545474c442d30303030303073746f72616765206465636f6465206572726f7220286b65793a20696e707574206f7574206f662072616e67657061757365756e706175736577697468647261776163717569726564526571756573747361646452657175657374736e756d526571756573747350657245676c646368616e67654e756d526571756573747350657245474c4469735061757365645061796d656e7420616d6f756e74206d7573742062652067726561746572207468616e2030436f6e7472616374206973207061757365644f6e6c7920746865206f776e65722063616e2077697468647261774e6f2045474c4420746f2077697468647261774f6e6c7920746865206f776e65722063616e206368616e6765207468652065786368616e676520726174654e756d626572206f66207265717565737473207065722045474c44206d757374206265206e6f6e2d7a65726f4f6e6c7920746865206f776e65722063616e2070617573652074686520636f6e7472616374436f6e747261637420697320616c7265616479207061757365644f6e6c7920746865206f776e65722063616e20756e70617573652074686520636f6e7472616374436f6e7472616374206973206e6f74207061757365640041dc84080b0438ffffff",
- "report": {
- "imports": [
- "bigIntAdd",
- "bigIntFinishUnsigned",
- "bigIntGetCallValue",
- "bigIntGetESDTExternalBalance",
- "bigIntGetExternalBalance",
- "bigIntGetUnsignedArgument",
- "bigIntMul",
- "bigIntSetInt64",
- "bigIntSign",
- "bigIntTDiv",
- "checkNoPayment",
- "getNumArguments",
- "mBufferAppend",
- "mBufferAppendBytes",
- "mBufferEq",
- "mBufferFromBigIntUnsigned",
- "mBufferGetByteSlice",
- "mBufferGetBytes",
- "mBufferGetLength",
- "mBufferNew",
- "mBufferSetBytes",
- "mBufferStorageLoad",
- "mBufferStorageStore",
- "mBufferToBigIntUnsigned",
- "managedCaller",
- "managedGetMultiESDTCallValue",
- "managedOwnerAddress",
- "managedSCAddress",
- "managedSignalError",
- "managedTransferValueExecute",
- "managedWriteLog",
- "signalError",
- "smallIntFinishSigned",
- "smallIntGetUnsignedArgument"
- ],
- "isMemGrow": false,
- "eiCheck": {
- "eiVersion": "1.3",
- "ok": true
- },
- "codeReport": {
- "path": "../output/requests.wasm",
- "size": 4009,
- "hasAllocator": false,
- "hasPanic": "None"
- }
- }
-}
diff --git a/requests-contract/output/requests/requests.wasm b/requests-contract/output/requests/requests.wasm
deleted file mode 100755
index 54ad16c..0000000
Binary files a/requests-contract/output/requests/requests.wasm and /dev/null differ
diff --git a/requests-contract/sc-config.toml b/requests-contract/sc-config.toml
deleted file mode 100644
index e412a78..0000000
--- a/requests-contract/sc-config.toml
+++ /dev/null
@@ -1,4 +0,0 @@
-[settings]
-
-[[proxy]]
-path = "src/requests_proxy.rs"
diff --git a/requests-contract/scenarios/add_requests_accumulation.scen.json b/requests-contract/scenarios/add_requests_accumulation.scen.json
deleted file mode 100644
index ee12b4b..0000000
--- a/requests-contract/scenarios/add_requests_accumulation.scen.json
+++ /dev/null
@@ -1,107 +0,0 @@
-{
- "name": "Add requests accumulation for same user",
- "comment": "Same user adds requests multiple times, balance should accumulate",
- "steps": [
- {
- "step": "setState",
- "accounts": {
- "address:owner": {
- "nonce": "0",
- "balance": "1000000000000000000"
- },
- "address:user": {
- "nonce": "0",
- "balance": "5000000000000000000"
- }
- },
- "newAddresses": [
- {
- "creatorAddress": "address:owner",
- "creatorNonce": "0",
- "newAddress": "sc:requests"
- }
- ]
- },
- {
- "step": "scDeploy",
- "txId": "deploy",
- "tx": {
- "from": "address:owner",
- "contractCode": "mxsc:../output/requests.mxsc.json",
- "arguments": [
- "100"
- ],
- "gasLimit": "60000000",
- "gasPrice": "1000000000"
- }
- },
- {
- "step": "scCall",
- "txId": "add_first",
- "tx": {
- "from": "address:user",
- "to": "sc:requests",
- "function": "addRequests",
- "arguments": [
- "42"
- ],
- "value": "1000000000000000000",
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "status": "0"
- }
- },
- {
- "step": "scQuery",
- "txId": "query_first",
- "tx": {
- "to": "sc:requests",
- "function": "getRequests",
- "arguments": [
- "42"
- ]
- },
- "expect": {
- "out": [
- "100"
- ]
- }
- },
- {
- "step": "scCall",
- "txId": "add_second",
- "tx": {
- "from": "address:user",
- "to": "sc:requests",
- "function": "addRequests",
- "arguments": [
- "42"
- ],
- "value": "500000000000000000",
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "status": "0"
- }
- },
- {
- "step": "scQuery",
- "txId": "query_second",
- "tx": {
- "to": "sc:requests",
- "function": "getRequests",
- "arguments": [
- "42"
- ]
- },
- "expect": {
- "out": [
- "150"
- ]
- }
- }
- ]
-}
\ No newline at end of file
diff --git a/requests-contract/scenarios/add_requests_multiple.scen.json b/requests-contract/scenarios/add_requests_multiple.scen.json
deleted file mode 100644
index 83daa8e..0000000
--- a/requests-contract/scenarios/add_requests_multiple.scen.json
+++ /dev/null
@@ -1,111 +0,0 @@
-{
- "name": "Add requests for multiple users",
- "comment": "Different users add requests, each should have independent balances",
- "steps": [
- {
- "step": "setState",
- "accounts": {
- "address:owner": {
- "nonce": "0",
- "balance": "1000000000000000000"
- },
- "address:user1": {
- "nonce": "0",
- "balance": "2000000000000000000"
- },
- "address:user2": {
- "nonce": "0",
- "balance": "3000000000000000000"
- }
- },
- "newAddresses": [
- {
- "creatorAddress": "address:owner",
- "creatorNonce": "0",
- "newAddress": "sc:requests"
- }
- ]
- },
- {
- "step": "scDeploy",
- "txId": "deploy",
- "tx": {
- "from": "address:owner",
- "contractCode": "mxsc:../output/requests.mxsc.json",
- "arguments": [
- "100"
- ],
- "gasLimit": "60000000",
- "gasPrice": "1000000000"
- }
- },
- {
- "step": "scCall",
- "txId": "user1_add",
- "tx": {
- "from": "address:user1",
- "to": "sc:requests",
- "function": "addRequests",
- "arguments": [
- "1"
- ],
- "value": "1000000000000000000",
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "status": "0"
- }
- },
- {
- "step": "scCall",
- "txId": "user2_add",
- "tx": {
- "from": "address:user2",
- "to": "sc:requests",
- "function": "addRequests",
- "arguments": [
- "2"
- ],
- "value": "2000000000000000000",
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "status": "0"
- }
- },
- {
- "step": "scQuery",
- "txId": "query_user1",
- "tx": {
- "to": "sc:requests",
- "function": "getRequests",
- "arguments": [
- "1"
- ]
- },
- "expect": {
- "out": [
- "100"
- ]
- }
- },
- {
- "step": "scQuery",
- "txId": "query_user2",
- "tx": {
- "to": "sc:requests",
- "function": "getRequests",
- "arguments": [
- "2"
- ]
- },
- "expect": {
- "out": [
- "200"
- ]
- }
- }
- ]
-}
\ No newline at end of file
diff --git a/requests-contract/scenarios/add_requests_single.scen.json b/requests-contract/scenarios/add_requests_single.scen.json
deleted file mode 100644
index 95d7a55..0000000
--- a/requests-contract/scenarios/add_requests_single.scen.json
+++ /dev/null
@@ -1,86 +0,0 @@
-{
- "name": "Add requests for a single user",
- "comment": "User sends 1 EGLD, should receive 100 requests (100 * 1 EGLD)",
- "steps": [
- {
- "step": "setState",
- "accounts": {
- "address:owner": {
- "nonce": "0",
- "balance": "1000000000000000000"
- },
- "address:user": {
- "nonce": "0",
- "balance": "2000000000000000000"
- }
- },
- "newAddresses": [
- {
- "creatorAddress": "address:owner",
- "creatorNonce": "0",
- "newAddress": "sc:requests"
- }
- ]
- },
- {
- "step": "scDeploy",
- "txId": "deploy",
- "tx": {
- "from": "address:owner",
- "contractCode": "mxsc:../output/requests.mxsc.json",
- "arguments": [
- "100"
- ],
- "gasLimit": "60000000",
- "gasPrice": "1000000000"
- }
- },
- {
- "step": "scCall",
- "txId": "add_requests",
- "tx": {
- "from": "address:user",
- "to": "sc:requests",
- "function": "addRequests",
- "arguments": [
- "42"
- ],
- "value": "1000000000000000000",
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "out": [],
- "status": "0",
- "logs": [
- {
- "address": "sc:requests",
- "endpoint": "str:addRequests",
- "topics": [
- "str:addRequests",
- "42",
- "1000000000000000000"
- ],
- "data": "*"
- }
- ]
- }
- },
- {
- "step": "scQuery",
- "txId": "query_requests",
- "tx": {
- "to": "sc:requests",
- "function": "getRequests",
- "arguments": [
- "42"
- ]
- },
- "expect": {
- "out": [
- "100"
- ]
- }
- }
- ]
-}
\ No newline at end of file
diff --git a/requests-contract/scenarios/add_requests_when_paused.scen.json b/requests-contract/scenarios/add_requests_when_paused.scen.json
deleted file mode 100644
index 1714f68..0000000
--- a/requests-contract/scenarios/add_requests_when_paused.scen.json
+++ /dev/null
@@ -1,73 +0,0 @@
-{
- "name": "Add requests when contract is paused",
- "comment": "User tries to add requests when contract is paused, should fail",
- "steps": [
- {
- "step": "setState",
- "accounts": {
- "address:owner": {
- "nonce": "0",
- "balance": "1000000000000000000"
- },
- "address:user": {
- "nonce": "0",
- "balance": "2000000000000000000"
- }
- },
- "newAddresses": [
- {
- "creatorAddress": "address:owner",
- "creatorNonce": "0",
- "newAddress": "sc:requests"
- }
- ]
- },
- {
- "step": "scDeploy",
- "txId": "deploy",
- "tx": {
- "from": "address:owner",
- "contractCode": "mxsc:../output/requests.mxsc.json",
- "arguments": [
- "100"
- ],
- "gasLimit": "60000000",
- "gasPrice": "1000000000"
- }
- },
- {
- "step": "scCall",
- "txId": "pause",
- "tx": {
- "from": "address:owner",
- "to": "sc:requests",
- "function": "pause",
- "arguments": [],
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "status": "0"
- }
- },
- {
- "step": "scCall",
- "txId": "add_requests",
- "tx": {
- "from": "address:user",
- "to": "sc:requests",
- "function": "addRequests",
- "arguments": [
- "42"
- ],
- "value": "1000000000000000000",
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "status": "4",
- "message": "str:Contract is paused"
- }
- }
- ]
-}
\ No newline at end of file
diff --git a/requests-contract/scenarios/change_rate_non_owner.scen.json b/requests-contract/scenarios/change_rate_non_owner.scen.json
deleted file mode 100644
index 5e7a6df..0000000
--- a/requests-contract/scenarios/change_rate_non_owner.scen.json
+++ /dev/null
@@ -1,57 +0,0 @@
-{
- "name": "Change exchange rate as non-owner",
- "comment": "Non-owner tries to change exchange rate, should fail",
- "steps": [
- {
- "step": "setState",
- "accounts": {
- "address:owner": {
- "nonce": "0",
- "balance": "1000000000000000000"
- },
- "address:attacker": {
- "nonce": "0",
- "balance": "1000000000000000000"
- }
- },
- "newAddresses": [
- {
- "creatorAddress": "address:owner",
- "creatorNonce": "0",
- "newAddress": "sc:requests"
- }
- ]
- },
- {
- "step": "scDeploy",
- "txId": "deploy",
- "tx": {
- "from": "address:owner",
- "contractCode": "mxsc:../output/requests.mxsc.json",
- "arguments": [
- "100"
- ],
- "gasLimit": "60000000",
- "gasPrice": "1000000000"
- }
- },
- {
- "step": "scCall",
- "txId": "change_rate",
- "tx": {
- "from": "address:attacker",
- "to": "sc:requests",
- "function": "changeNumRequestsPerEGLD",
- "arguments": [
- "200"
- ],
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "status": "4",
- "message": "str:Only the owner can change the exchange rate"
- }
- }
- ]
-}
\ No newline at end of file
diff --git a/requests-contract/scenarios/change_rate_valid.scen.json b/requests-contract/scenarios/change_rate_valid.scen.json
deleted file mode 100644
index cc372a5..0000000
--- a/requests-contract/scenarios/change_rate_valid.scen.json
+++ /dev/null
@@ -1,94 +0,0 @@
-{
- "name": "Change exchange rate with valid value",
- "comment": "Owner changes exchange rate from 100 to 200",
- "steps": [
- {
- "step": "setState",
- "accounts": {
- "address:owner": {
- "nonce": "0",
- "balance": "1000000000000000000"
- }
- },
- "newAddresses": [
- {
- "creatorAddress": "address:owner",
- "creatorNonce": "0",
- "newAddress": "sc:requests"
- }
- ]
- },
- {
- "step": "scDeploy",
- "txId": "deploy",
- "tx": {
- "from": "address:owner",
- "contractCode": "mxsc:../output/requests.mxsc.json",
- "arguments": [
- "100"
- ],
- "gasLimit": "60000000",
- "gasPrice": "1000000000"
- }
- },
- {
- "step": "scQuery",
- "txId": "check_initial_rate",
- "tx": {
- "to": "sc:requests",
- "function": "getRequestsPerEgld",
- "arguments": []
- },
- "expect": {
- "out": [
- "100"
- ],
- "status": "0"
- }
- },
- {
- "step": "scCall",
- "txId": "change_rate",
- "tx": {
- "from": "address:owner",
- "to": "sc:requests",
- "function": "changeNumRequestsPerEGLD",
- "arguments": [
- "200"
- ],
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "out": [],
- "status": "0",
- "logs": [
- {
- "address": "sc:requests",
- "endpoint": "str:changeNumRequestsPerEGLD",
- "topics": [
- "str:changeNumRequestsPerEGLD",
- "100"
- ],
- "data": "*"
- }
- ]
- }
- },
- {
- "step": "scQuery",
- "txId": "check_updated_rate",
- "tx": {
- "to": "sc:requests",
- "function": "getRequestsPerEgld",
- "arguments": []
- },
- "expect": {
- "out": [
- "200"
- ],
- "status": "0"
- }
- }
- ]
-}
\ No newline at end of file
diff --git a/requests-contract/scenarios/change_rate_zero.scen.json b/requests-contract/scenarios/change_rate_zero.scen.json
deleted file mode 100644
index e8c2905..0000000
--- a/requests-contract/scenarios/change_rate_zero.scen.json
+++ /dev/null
@@ -1,53 +0,0 @@
-{
- "name": "Change exchange rate to zero",
- "comment": "Owner tries to change exchange rate to 0, should fail",
- "steps": [
- {
- "step": "setState",
- "accounts": {
- "address:owner": {
- "nonce": "0",
- "balance": "1000000000000000000"
- }
- },
- "newAddresses": [
- {
- "creatorAddress": "address:owner",
- "creatorNonce": "0",
- "newAddress": "sc:requests"
- }
- ]
- },
- {
- "step": "scDeploy",
- "txId": "deploy",
- "tx": {
- "from": "address:owner",
- "contractCode": "mxsc:../output/requests.mxsc.json",
- "arguments": [
- "100"
- ],
- "gasLimit": "60000000",
- "gasPrice": "1000000000"
- }
- },
- {
- "step": "scCall",
- "txId": "change_rate",
- "tx": {
- "from": "address:owner",
- "to": "sc:requests",
- "function": "changeNumRequestsPerEGLD",
- "arguments": [
- "0"
- ],
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "status": "4",
- "message": "str:Number of requests per EGLD must be non-zero"
- }
- }
- ]
-}
\ No newline at end of file
diff --git a/requests-contract/scenarios/full_workflow.scen.json b/requests-contract/scenarios/full_workflow.scen.json
deleted file mode 100644
index 7477a9b..0000000
--- a/requests-contract/scenarios/full_workflow.scen.json
+++ /dev/null
@@ -1,177 +0,0 @@
-{
- "name": "Full workflow test",
- "comment": "Complete workflow: deploy, add requests, query, change rate, withdraw",
- "steps": [
- {
- "step": "setState",
- "accounts": {
- "address:owner": {
- "nonce": "0",
- "balance": "1000000000000000000"
- },
- "address:user1": {
- "nonce": "0",
- "balance": "5000000000000000000"
- },
- "address:user2": {
- "nonce": "0",
- "balance": "3000000000000000000"
- }
- },
- "newAddresses": [
- {
- "creatorAddress": "address:owner",
- "creatorNonce": "0",
- "newAddress": "sc:requests"
- }
- ]
- },
- {
- "step": "scDeploy",
- "txId": "deploy",
- "tx": {
- "from": "address:owner",
- "contractCode": "mxsc:../output/requests.mxsc.json",
- "arguments": [
- "100"
- ],
- "gasLimit": "60000000",
- "gasPrice": "1000000000"
- }
- },
- {
- "step": "scCall",
- "txId": "user1_add_1",
- "tx": {
- "from": "address:user1",
- "to": "sc:requests",
- "function": "addRequests",
- "arguments": [
- "1"
- ],
- "value": "1000000000000000000",
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "status": "0"
- }
- },
- {
- "step": "scCall",
- "txId": "user2_add",
- "tx": {
- "from": "address:user2",
- "to": "sc:requests",
- "function": "addRequests",
- "arguments": [
- "2"
- ],
- "value": "2000000000000000000",
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "status": "0"
- }
- },
- {
- "step": "scQuery",
- "txId": "query_user1",
- "tx": {
- "to": "sc:requests",
- "function": "getRequests",
- "arguments": [
- "1"
- ]
- },
- "expect": {
- "out": [
- "100"
- ]
- }
- },
- {
- "step": "scQuery",
- "txId": "query_user2",
- "tx": {
- "to": "sc:requests",
- "function": "getRequests",
- "arguments": [
- "2"
- ]
- },
- "expect": {
- "out": [
- "200"
- ]
- }
- },
- {
- "step": "scCall",
- "txId": "change_rate",
- "tx": {
- "from": "address:owner",
- "to": "sc:requests",
- "function": "changeNumRequestsPerEGLD",
- "arguments": [
- "150"
- ],
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "status": "0"
- }
- },
- {
- "step": "scCall",
- "txId": "user1_add_2",
- "tx": {
- "from": "address:user1",
- "to": "sc:requests",
- "function": "addRequests",
- "arguments": [
- "1"
- ],
- "value": "1000000000000000000",
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "status": "0"
- }
- },
- {
- "step": "scQuery",
- "txId": "query_user1_after_rate_change",
- "tx": {
- "to": "sc:requests",
- "function": "getRequests",
- "arguments": [
- "1"
- ]
- },
- "expect": {
- "out": [
- "250"
- ]
- }
- },
- {
- "step": "scCall",
- "txId": "withdraw",
- "tx": {
- "from": "address:owner",
- "to": "sc:requests",
- "function": "withdrawAll",
- "arguments": [],
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "status": "0"
- }
- }
- ]
-}
\ No newline at end of file
diff --git a/requests-contract/scenarios/get_requests_existing.scen.json b/requests-contract/scenarios/get_requests_existing.scen.json
deleted file mode 100644
index 90fec7f..0000000
--- a/requests-contract/scenarios/get_requests_existing.scen.json
+++ /dev/null
@@ -1,73 +0,0 @@
-{
- "name": "Get requests for existing user",
- "comment": "Query requests for a user that has been credited",
- "steps": [
- {
- "step": "setState",
- "accounts": {
- "address:owner": {
- "nonce": "0",
- "balance": "1000000000000000000"
- },
- "address:user": {
- "nonce": "0",
- "balance": "2100000000000000000"
- }
- },
- "newAddresses": [
- {
- "creatorAddress": "address:owner",
- "creatorNonce": "0",
- "newAddress": "sc:requests"
- }
- ]
- },
- {
- "step": "scDeploy",
- "txId": "deploy",
- "tx": {
- "from": "address:owner",
- "contractCode": "mxsc:../output/requests.mxsc.json",
- "arguments": [
- "100"
- ],
- "gasLimit": "60000000",
- "gasPrice": "1000000000"
- }
- },
- {
- "step": "scCall",
- "txId": "add_requests",
- "tx": {
- "from": "address:user",
- "to": "sc:requests",
- "function": "addRequests",
- "arguments": [
- "99"
- ],
- "value": "2000000000000000000",
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "status": "0"
- }
- },
- {
- "step": "scQuery",
- "txId": "query",
- "tx": {
- "to": "sc:requests",
- "function": "getRequests",
- "arguments": [
- "99"
- ]
- },
- "expect": {
- "out": [
- "200"
- ]
- }
- }
- ]
-}
\ No newline at end of file
diff --git a/requests-contract/scenarios/get_requests_nonexistent.scen.json b/requests-contract/scenarios/get_requests_nonexistent.scen.json
deleted file mode 100644
index 7af2b9d..0000000
--- a/requests-contract/scenarios/get_requests_nonexistent.scen.json
+++ /dev/null
@@ -1,51 +0,0 @@
-{
- "name": "Get requests for nonexistent user",
- "comment": "Query requests for a user that was never credited, should return 0",
- "steps": [
- {
- "step": "setState",
- "accounts": {
- "address:owner": {
- "nonce": "0",
- "balance": "1000000000000000000"
- }
- },
- "newAddresses": [
- {
- "creatorAddress": "address:owner",
- "creatorNonce": "0",
- "newAddress": "sc:requests"
- }
- ]
- },
- {
- "step": "scDeploy",
- "txId": "deploy",
- "tx": {
- "from": "address:owner",
- "contractCode": "mxsc:../output/requests.mxsc.json",
- "arguments": [
- "100"
- ],
- "gasLimit": "60000000",
- "gasPrice": "1000000000"
- }
- },
- {
- "step": "scQuery",
- "txId": "query",
- "tx": {
- "to": "sc:requests",
- "function": "getRequests",
- "arguments": [
- "999"
- ]
- },
- "expect": {
- "out": [
- "0"
- ]
- }
- }
- ]
-}
\ No newline at end of file
diff --git a/requests-contract/scenarios/init_valid.scen.json b/requests-contract/scenarios/init_valid.scen.json
deleted file mode 100644
index 10c75d4..0000000
--- a/requests-contract/scenarios/init_valid.scen.json
+++ /dev/null
@@ -1,42 +0,0 @@
-{
- "name": "Initialize contract with valid exchange rate",
- "comment": "Deploy the contract with numRequestsPerEgld = 100",
- "steps": [
- {
- "step": "setState",
- "accounts": {
- "address:owner": {
- "nonce": "0",
- "balance": "1000000000000000000"
- }
- },
- "newAddresses": [
- {
- "creatorAddress": "address:owner",
- "creatorNonce": "0",
- "newAddress": "sc:requests"
- }
- ]
- },
- {
- "step": "scDeploy",
- "txId": "deploy",
- "tx": {
- "from": "address:owner",
- "contractCode": "mxsc:../output/requests.mxsc.json",
- "arguments": [
- "100"
- ],
- "gasLimit": "60000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "out": [],
- "status": "0",
- "logs": [],
- "gas": "*",
- "refund": "*"
- }
- }
- ]
-}
\ No newline at end of file
diff --git a/requests-contract/scenarios/init_zero.scen.json b/requests-contract/scenarios/init_zero.scen.json
deleted file mode 100644
index 2d0b2b4..0000000
--- a/requests-contract/scenarios/init_zero.scen.json
+++ /dev/null
@@ -1,40 +0,0 @@
-{
- "name": "Initialize contract with zero exchange rate",
- "comment": "Deploy should fail when numRequestsPerEgld = 0",
- "steps": [
- {
- "step": "setState",
- "accounts": {
- "address:owner": {
- "nonce": "0",
- "balance": "1000000000000000000"
- }
- },
- "newAddresses": [
- {
- "creatorAddress": "address:owner",
- "creatorNonce": "0",
- "newAddress": "sc:requests"
- }
- ]
- },
- {
- "step": "scDeploy",
- "txId": "deploy",
- "tx": {
- "from": "address:owner",
- "contractCode": "mxsc:../output/requests.mxsc.json",
- "arguments": [
- "0"
- ],
- "gasLimit": "60000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "out": [],
- "status": "4",
- "message": "str:Number of requests per EGLD must be non-zero"
- }
- }
- ]
-}
\ No newline at end of file
diff --git a/requests-contract/scenarios/pause_already_paused.scen.json b/requests-contract/scenarios/pause_already_paused.scen.json
deleted file mode 100644
index 97423b2..0000000
--- a/requests-contract/scenarios/pause_already_paused.scen.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
- "name": "Pause contract when already paused",
- "comment": "Owner tries to pause already paused contract, should fail",
- "steps": [
- {
- "step": "setState",
- "accounts": {
- "address:owner": {
- "nonce": "0",
- "balance": "1000000000000000000"
- }
- },
- "newAddresses": [
- {
- "creatorAddress": "address:owner",
- "creatorNonce": "0",
- "newAddress": "sc:requests"
- }
- ]
- },
- {
- "step": "scDeploy",
- "txId": "deploy",
- "tx": {
- "from": "address:owner",
- "contractCode": "mxsc:../output/requests.mxsc.json",
- "arguments": [
- "100"
- ],
- "gasLimit": "60000000",
- "gasPrice": "1000000000"
- }
- },
- {
- "step": "scCall",
- "txId": "pause_1",
- "tx": {
- "from": "address:owner",
- "to": "sc:requests",
- "function": "pause",
- "arguments": [],
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "status": "0"
- }
- },
- {
- "step": "scCall",
- "txId": "pause_2",
- "tx": {
- "from": "address:owner",
- "to": "sc:requests",
- "function": "pause",
- "arguments": [],
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "status": "4",
- "message": "str:Contract is already paused"
- }
- }
- ]
-}
\ No newline at end of file
diff --git a/requests-contract/scenarios/pause_non_owner.scen.json b/requests-contract/scenarios/pause_non_owner.scen.json
deleted file mode 100644
index 913e7ec..0000000
--- a/requests-contract/scenarios/pause_non_owner.scen.json
+++ /dev/null
@@ -1,55 +0,0 @@
-{
- "name": "Pause contract as non-owner",
- "comment": "Non-owner tries to pause contract, should fail",
- "steps": [
- {
- "step": "setState",
- "accounts": {
- "address:owner": {
- "nonce": "0",
- "balance": "1000000000000000000"
- },
- "address:attacker": {
- "nonce": "0",
- "balance": "1000000000000000000"
- }
- },
- "newAddresses": [
- {
- "creatorAddress": "address:owner",
- "creatorNonce": "0",
- "newAddress": "sc:requests"
- }
- ]
- },
- {
- "step": "scDeploy",
- "txId": "deploy",
- "tx": {
- "from": "address:owner",
- "contractCode": "mxsc:../output/requests.mxsc.json",
- "arguments": [
- "100"
- ],
- "gasLimit": "60000000",
- "gasPrice": "1000000000"
- }
- },
- {
- "step": "scCall",
- "txId": "pause",
- "tx": {
- "from": "address:attacker",
- "to": "sc:requests",
- "function": "pause",
- "arguments": [],
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "status": "4",
- "message": "str:Only the owner can pause the contract"
- }
- }
- ]
-}
\ No newline at end of file
diff --git a/requests-contract/scenarios/pause_success.scen.json b/requests-contract/scenarios/pause_success.scen.json
deleted file mode 100644
index 39b2a7a..0000000
--- a/requests-contract/scenarios/pause_success.scen.json
+++ /dev/null
@@ -1,61 +0,0 @@
-{
- "name": "Pause contract successfully",
- "comment": "Owner pauses the contract",
- "steps": [
- {
- "step": "setState",
- "accounts": {
- "address:owner": {
- "nonce": "0",
- "balance": "1000000000000000000"
- }
- },
- "newAddresses": [
- {
- "creatorAddress": "address:owner",
- "creatorNonce": "0",
- "newAddress": "sc:requests"
- }
- ]
- },
- {
- "step": "scDeploy",
- "txId": "deploy",
- "tx": {
- "from": "address:owner",
- "contractCode": "mxsc:../output/requests.mxsc.json",
- "arguments": [
- "100"
- ],
- "gasLimit": "60000000",
- "gasPrice": "1000000000"
- }
- },
- {
- "step": "scCall",
- "txId": "pause",
- "tx": {
- "from": "address:owner",
- "to": "sc:requests",
- "function": "pause",
- "arguments": [],
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "out": [],
- "status": "0",
- "logs": [
- {
- "address": "sc:requests",
- "endpoint": "str:pause",
- "topics": [
- "str:pause"
- ],
- "data": "*"
- }
- ]
- }
- }
- ]
-}
\ No newline at end of file
diff --git a/requests-contract/scenarios/pause_unpause_workflow.scen.json b/requests-contract/scenarios/pause_unpause_workflow.scen.json
deleted file mode 100644
index 43bdd8c..0000000
--- a/requests-contract/scenarios/pause_unpause_workflow.scen.json
+++ /dev/null
@@ -1,151 +0,0 @@
-{
- "name": "Pause and Unpause workflow",
- "comment": "Owner checks pause affects adding requests, then unpauses",
- "steps": [
- {
- "step": "setState",
- "accounts": {
- "address:owner": {
- "nonce": "0",
- "balance": "1000000000000000000"
- },
- "address:user": {
- "nonce": "0",
- "balance": "3000000000000000000"
- }
- },
- "newAddresses": [
- {
- "creatorAddress": "address:owner",
- "creatorNonce": "0",
- "newAddress": "sc:requests"
- }
- ]
- },
- {
- "step": "scDeploy",
- "txId": "deploy",
- "tx": {
- "from": "address:owner",
- "contractCode": "mxsc:../output/requests.mxsc.json",
- "arguments": [
- "100"
- ],
- "gasLimit": "60000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "status": "0"
- }
- },
- {
- "step": "scQuery",
- "txId": "check_initially_not_paused",
- "tx": {
- "to": "sc:requests",
- "function": "isPaused",
- "arguments": []
- },
- "expect": {
- "out": [
- ""
- ]
- }
- },
- {
- "step": "scCall",
- "txId": "pause",
- "tx": {
- "from": "address:owner",
- "to": "sc:requests",
- "function": "pause",
- "arguments": [],
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "status": "0"
- }
- },
- {
- "step": "scQuery",
- "txId": "check_paused",
- "tx": {
- "to": "sc:requests",
- "function": "isPaused",
- "arguments": []
- },
- "expect": {
- "out": [
- "1"
- ]
- }
- },
- {
- "step": "scCall",
- "txId": "add_fail",
- "tx": {
- "from": "address:user",
- "to": "sc:requests",
- "function": "addRequests",
- "arguments": [
- "1"
- ],
- "value": "1000000000000000000",
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "status": "4",
- "message": "str:Contract is paused"
- }
- },
- {
- "step": "scCall",
- "txId": "unpause",
- "tx": {
- "from": "address:owner",
- "to": "sc:requests",
- "function": "unpause",
- "arguments": [],
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "status": "0"
- }
- },
- {
- "step": "scQuery",
- "txId": "check_unpaused",
- "tx": {
- "to": "sc:requests",
- "function": "isPaused",
- "arguments": []
- },
- "expect": {
- "out": [
- ""
- ]
- }
- },
- {
- "step": "scCall",
- "txId": "add_success",
- "tx": {
- "from": "address:user",
- "to": "sc:requests",
- "function": "addRequests",
- "arguments": [
- "1"
- ],
- "value": "1000000000000000000",
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "status": "0"
- }
- }
- ]
-}
\ No newline at end of file
diff --git a/requests-contract/scenarios/rate_change_affects_future.scen.json b/requests-contract/scenarios/rate_change_affects_future.scen.json
deleted file mode 100644
index 31f2000..0000000
--- a/requests-contract/scenarios/rate_change_affects_future.scen.json
+++ /dev/null
@@ -1,124 +0,0 @@
-{
- "name": "Change exchange rate affects future requests only",
- "comment": "Changing rate should not affect previously acquired requests",
- "steps": [
- {
- "step": "setState",
- "accounts": {
- "address:owner": {
- "nonce": "0",
- "balance": "1000000000000000000"
- },
- "address:user": {
- "nonce": "0",
- "balance": "3000000000000000000"
- }
- },
- "newAddresses": [
- {
- "creatorAddress": "address:owner",
- "creatorNonce": "0",
- "newAddress": "sc:requests"
- }
- ]
- },
- {
- "step": "scDeploy",
- "txId": "deploy",
- "tx": {
- "from": "address:owner",
- "contractCode": "mxsc:../output/requests.mxsc.json",
- "arguments": [
- "100"
- ],
- "gasLimit": "60000000",
- "gasPrice": "1000000000"
- }
- },
- {
- "step": "scCall",
- "txId": "add_requests_1",
- "tx": {
- "from": "address:user",
- "to": "sc:requests",
- "function": "addRequests",
- "arguments": [
- "42"
- ],
- "value": "1000000000000000000",
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "status": "0"
- }
- },
- {
- "step": "scQuery",
- "txId": "query_before",
- "tx": {
- "to": "sc:requests",
- "function": "getRequests",
- "arguments": [
- "42"
- ]
- },
- "expect": {
- "out": [
- "100"
- ]
- }
- },
- {
- "step": "scCall",
- "txId": "change_rate",
- "tx": {
- "from": "address:owner",
- "to": "sc:requests",
- "function": "changeNumRequestsPerEGLD",
- "arguments": [
- "200"
- ],
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "status": "0"
- }
- },
- {
- "step": "scCall",
- "txId": "add_requests_2",
- "tx": {
- "from": "address:user",
- "to": "sc:requests",
- "function": "addRequests",
- "arguments": [
- "42"
- ],
- "value": "1000000000000000000",
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "status": "0"
- }
- },
- {
- "step": "scQuery",
- "txId": "query_after",
- "tx": {
- "to": "sc:requests",
- "function": "getRequests",
- "arguments": [
- "42"
- ]
- },
- "expect": {
- "out": [
- "300"
- ]
- }
- }
- ]
-}
\ No newline at end of file
diff --git a/requests-contract/scenarios/unpause_non_owner.scen.json b/requests-contract/scenarios/unpause_non_owner.scen.json
deleted file mode 100644
index 923d9c8..0000000
--- a/requests-contract/scenarios/unpause_non_owner.scen.json
+++ /dev/null
@@ -1,70 +0,0 @@
-{
- "name": "Unpause contract as non-owner",
- "comment": "Non-owner tries to unpause, should fail",
- "steps": [
- {
- "step": "setState",
- "accounts": {
- "address:owner": {
- "nonce": "0",
- "balance": "1000000000000000000"
- },
- "address:attacker": {
- "nonce": "0",
- "balance": "1000000000000000000"
- }
- },
- "newAddresses": [
- {
- "creatorAddress": "address:owner",
- "creatorNonce": "0",
- "newAddress": "sc:requests"
- }
- ]
- },
- {
- "step": "scDeploy",
- "txId": "deploy",
- "tx": {
- "from": "address:owner",
- "contractCode": "mxsc:../output/requests.mxsc.json",
- "arguments": [
- "100"
- ],
- "gasLimit": "60000000",
- "gasPrice": "1000000000"
- }
- },
- {
- "step": "scCall",
- "txId": "pause",
- "tx": {
- "from": "address:owner",
- "to": "sc:requests",
- "function": "pause",
- "arguments": [],
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "status": "0"
- }
- },
- {
- "step": "scCall",
- "txId": "unpause",
- "tx": {
- "from": "address:attacker",
- "to": "sc:requests",
- "function": "unpause",
- "arguments": [],
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "status": "4",
- "message": "str:Only the owner can unpause the contract"
- }
- }
- ]
-}
\ No newline at end of file
diff --git a/requests-contract/scenarios/unpause_not_paused.scen.json b/requests-contract/scenarios/unpause_not_paused.scen.json
deleted file mode 100644
index afac6b8..0000000
--- a/requests-contract/scenarios/unpause_not_paused.scen.json
+++ /dev/null
@@ -1,51 +0,0 @@
-{
- "name": "Unpause when not paused",
- "comment": "Owner tries to unpause when contract is not paused, should fail",
- "steps": [
- {
- "step": "setState",
- "accounts": {
- "address:owner": {
- "nonce": "0",
- "balance": "1000000000000000000"
- }
- },
- "newAddresses": [
- {
- "creatorAddress": "address:owner",
- "creatorNonce": "0",
- "newAddress": "sc:requests"
- }
- ]
- },
- {
- "step": "scDeploy",
- "txId": "deploy",
- "tx": {
- "from": "address:owner",
- "contractCode": "mxsc:../output/requests.mxsc.json",
- "arguments": [
- "100"
- ],
- "gasLimit": "60000000",
- "gasPrice": "1000000000"
- }
- },
- {
- "step": "scCall",
- "txId": "unpause",
- "tx": {
- "from": "address:owner",
- "to": "sc:requests",
- "function": "unpause",
- "arguments": [],
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "status": "4",
- "message": "str:Contract is not paused"
- }
- }
- ]
-}
\ No newline at end of file
diff --git a/requests-contract/scenarios/unpause_success.scen.json b/requests-contract/scenarios/unpause_success.scen.json
deleted file mode 100644
index 7e6f16b..0000000
--- a/requests-contract/scenarios/unpause_success.scen.json
+++ /dev/null
@@ -1,76 +0,0 @@
-{
- "name": "Unpause contract successfully",
- "comment": "Owner unpauses the contract after pausing",
- "steps": [
- {
- "step": "setState",
- "accounts": {
- "address:owner": {
- "nonce": "0",
- "balance": "1000000000000000000"
- }
- },
- "newAddresses": [
- {
- "creatorAddress": "address:owner",
- "creatorNonce": "0",
- "newAddress": "sc:requests"
- }
- ]
- },
- {
- "step": "scDeploy",
- "txId": "deploy",
- "tx": {
- "from": "address:owner",
- "contractCode": "mxsc:../output/requests.mxsc.json",
- "arguments": [
- "100"
- ],
- "gasLimit": "60000000",
- "gasPrice": "1000000000"
- }
- },
- {
- "step": "scCall",
- "txId": "pause",
- "tx": {
- "from": "address:owner",
- "to": "sc:requests",
- "function": "pause",
- "arguments": [],
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "status": "0"
- }
- },
- {
- "step": "scCall",
- "txId": "unpause",
- "tx": {
- "from": "address:owner",
- "to": "sc:requests",
- "function": "unpause",
- "arguments": [],
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "out": [],
- "status": "0",
- "logs": [
- {
- "address": "sc:requests",
- "endpoint": "str:unpause",
- "topics": [
- "str:unpause"
- ],
- "data": "*"
- }
- ]
- }
- }
- ]
-}
\ No newline at end of file
diff --git a/requests-contract/scenarios/withdraw_empty.scen.json b/requests-contract/scenarios/withdraw_empty.scen.json
deleted file mode 100644
index f03ba60..0000000
--- a/requests-contract/scenarios/withdraw_empty.scen.json
+++ /dev/null
@@ -1,51 +0,0 @@
-{
- "name": "Withdraw from empty contract",
- "comment": "Owner tries to withdraw when contract has no EGLD, should fail",
- "steps": [
- {
- "step": "setState",
- "accounts": {
- "address:owner": {
- "nonce": "0",
- "balance": "1000000000000000000"
- }
- },
- "newAddresses": [
- {
- "creatorAddress": "address:owner",
- "creatorNonce": "0",
- "newAddress": "sc:requests"
- }
- ]
- },
- {
- "step": "scDeploy",
- "txId": "deploy",
- "tx": {
- "from": "address:owner",
- "contractCode": "mxsc:../output/requests.mxsc.json",
- "arguments": [
- "100"
- ],
- "gasLimit": "60000000",
- "gasPrice": "1000000000"
- }
- },
- {
- "step": "scCall",
- "txId": "withdraw",
- "tx": {
- "from": "address:owner",
- "to": "sc:requests",
- "function": "withdrawAll",
- "arguments": [],
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "status": "4",
- "message": "str:No EGLD to withdraw"
- }
- }
- ]
-}
\ No newline at end of file
diff --git a/requests-contract/scenarios/withdraw_non_owner.scen.json b/requests-contract/scenarios/withdraw_non_owner.scen.json
deleted file mode 100644
index 9a93cd3..0000000
--- a/requests-contract/scenarios/withdraw_non_owner.scen.json
+++ /dev/null
@@ -1,77 +0,0 @@
-{
- "name": "Withdraw as non-owner",
- "comment": "Non-owner tries to withdraw, should fail",
- "steps": [
- {
- "step": "setState",
- "accounts": {
- "address:owner": {
- "nonce": "0",
- "balance": "1000000000000000000"
- },
- "address:user": {
- "nonce": "0",
- "balance": "3000000000000000000"
- },
- "address:attacker": {
- "nonce": "0",
- "balance": "1000000000000000000"
- }
- },
- "newAddresses": [
- {
- "creatorAddress": "address:owner",
- "creatorNonce": "0",
- "newAddress": "sc:requests"
- }
- ]
- },
- {
- "step": "scDeploy",
- "txId": "deploy",
- "tx": {
- "from": "address:owner",
- "contractCode": "mxsc:../output/requests.mxsc.json",
- "arguments": [
- "100"
- ],
- "gasLimit": "60000000",
- "gasPrice": "1000000000"
- }
- },
- {
- "step": "scCall",
- "txId": "add_requests",
- "tx": {
- "from": "address:user",
- "to": "sc:requests",
- "function": "addRequests",
- "arguments": [
- "42"
- ],
- "value": "2000000000000000000",
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "status": "0"
- }
- },
- {
- "step": "scCall",
- "txId": "withdraw",
- "tx": {
- "from": "address:attacker",
- "to": "sc:requests",
- "function": "withdrawAll",
- "arguments": [],
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "status": "4",
- "message": "str:Only the owner can withdraw"
- }
- }
- ]
-}
\ No newline at end of file
diff --git a/requests-contract/scenarios/withdraw_success.scen.json b/requests-contract/scenarios/withdraw_success.scen.json
deleted file mode 100644
index 2515663..0000000
--- a/requests-contract/scenarios/withdraw_success.scen.json
+++ /dev/null
@@ -1,72 +0,0 @@
-{
- "name": "Withdraw all EGLD successfully",
- "comment": "Owner withdraws all accumulated EGLD from contract",
- "steps": [
- {
- "step": "setState",
- "accounts": {
- "address:owner": {
- "nonce": "0",
- "balance": "1000000000000000000"
- },
- "address:user": {
- "nonce": "0",
- "balance": "3000000000000000000"
- }
- },
- "newAddresses": [
- {
- "creatorAddress": "address:owner",
- "creatorNonce": "0",
- "newAddress": "sc:requests"
- }
- ]
- },
- {
- "step": "scDeploy",
- "txId": "deploy",
- "tx": {
- "from": "address:owner",
- "contractCode": "mxsc:../output/requests.mxsc.json",
- "arguments": [
- "100"
- ],
- "gasLimit": "60000000",
- "gasPrice": "1000000000"
- }
- },
- {
- "step": "scCall",
- "txId": "add_requests",
- "tx": {
- "from": "address:user",
- "to": "sc:requests",
- "function": "addRequests",
- "arguments": [
- "42"
- ],
- "value": "2000000000000000000",
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "status": "0"
- }
- },
- {
- "step": "scCall",
- "txId": "withdraw",
- "tx": {
- "from": "address:owner",
- "to": "sc:requests",
- "function": "withdrawAll",
- "arguments": [],
- "gasLimit": "5000000",
- "gasPrice": "1000000000"
- },
- "expect": {
- "status": "0"
- }
- }
- ]
-}
\ No newline at end of file
diff --git a/requests-contract/scripts/change-price.sh b/requests-contract/scripts/change-price.sh
deleted file mode 100755
index f0df785..0000000
--- a/requests-contract/scripts/change-price.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/bash
-
-source ./config.cfg
-
-mxpy contract call "${CONTRACT_ADDRESS}" --recall-nonce "${MXPY_SIGN[@]}" \
- --gas-limit=3000000 --function="changeNumRequestsPerEGLD" \
- --arguments "${NUM_REQUESTS_PER_EGLD}" \
- --send --proxy="${PROXY}" --chain="${CHAIN_ID}"
\ No newline at end of file
diff --git a/requests-contract/scripts/config.cfg b/requests-contract/scripts/config.cfg
deleted file mode 100644
index 39b3a0a..0000000
--- a/requests-contract/scripts/config.cfg
+++ /dev/null
@@ -1,15 +0,0 @@
-PROXY=https://devnet-gateway.multiversx.com
-CHAIN_ID=D
-OWNER="./erd1xhcw78m2k5wtc63jk4n03lqmp60y5rnsn3xrs39pzhr0srp5945sjhe4vc.pem"
-OWNER_ADDRESS=erd1xhcw78m2k5wtc63jk4n03lqmp60y5rnsn3xrs39pzhr0srp5945sjhe4vc
-
-MXPY_SIGN=()
-#use this for signing transactions with a pem file
-MXPY_SIGN+=(--pem=${OWNER})
-#use this to sign with ledger
-#MXPY_SIGN+=(--ledger)
-
-CONTRACT_WASM="../output/requests/requests.wasm"
-NUM_REQUESTS_PER_EGLD=100000
-
-CONTRACT_ADDRESS="erd1qqqqqqqqqqqqqpgqf4tjq8wpjm6nh0v8y0cmqp7qwqk9eymf945syjea0j"
\ No newline at end of file
diff --git a/requests-contract/scripts/contract-deploy.sh b/requests-contract/scripts/contract-deploy.sh
deleted file mode 100755
index b72c57d..0000000
--- a/requests-contract/scripts/contract-deploy.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-
-source ./config.cfg
-
-mxpy contract deploy --bytecode="${CONTRACT_WASM}" --metadata-payable --recall-nonce "${MXPY_SIGN[@]}" \
- --gas-limit=20000000 \
- --arguments "${NUM_REQUESTS_PER_EGLD}" \
- --send --proxy="${PROXY}" --chain="${CHAIN_ID}" || return
-
-
diff --git a/requests-contract/scripts/pause-contract.sh b/requests-contract/scripts/pause-contract.sh
deleted file mode 100755
index 3f13f50..0000000
--- a/requests-contract/scripts/pause-contract.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/bash
-
-source ./config.cfg
-
-mxpy contract call "${CONTRACT_ADDRESS}" --recall-nonce "${MXPY_SIGN[@]}" \
- --gas-limit=3000000 --function="pause" \
- --send --proxy="${PROXY}" --chain="${CHAIN_ID}"
\ No newline at end of file
diff --git a/requests-contract/scripts/unpause-contract.sh b/requests-contract/scripts/unpause-contract.sh
deleted file mode 100755
index 860573a..0000000
--- a/requests-contract/scripts/unpause-contract.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/bash
-
-source ./config.cfg
-
-mxpy contract call "${CONTRACT_ADDRESS}" --recall-nonce "${MXPY_SIGN[@]}" \
- --gas-limit=3000000 --function="unpause" \
- --send --proxy="${PROXY}" --chain="${CHAIN_ID}"
\ No newline at end of file
diff --git a/requests-contract/scripts/withdraw-all.sh b/requests-contract/scripts/withdraw-all.sh
deleted file mode 100755
index bd7d53d..0000000
--- a/requests-contract/scripts/withdraw-all.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/bash
-
-source ./config.cfg
-
-mxpy contract call "${CONTRACT_ADDRESS}" --recall-nonce "${MXPY_SIGN[@]}" \
- --gas-limit=3000000 --function="withdrawAll" \
- --send --proxy="${PROXY}" --chain="${CHAIN_ID}"
\ No newline at end of file
diff --git a/requests-contract/src/lib.rs b/requests-contract/src/lib.rs
deleted file mode 100644
index 362e851..0000000
--- a/requests-contract/src/lib.rs
+++ /dev/null
@@ -1,181 +0,0 @@
-#![no_std]
-
-use multiversx_sc::imports::*;
-
-#[multiversx_sc::contract]
-pub trait RequestsContract {
- /// Constructor - initializes the contract with the number of requests per EGLD
- #[init]
- fn init(&self, num_requests_per_egld: BigUint) {
- require!(num_requests_per_egld > 0, "Number of requests per EGLD must be non-zero");
- self.num_requests_per_egld().set(num_requests_per_egld);
- self.is_paused().set(false);
- }
-
- /// Upgrade function - called when contract is upgraded
- #[upgrade]
- fn upgrade(&self, num_requests_per_egld: BigUint) {
- require!(num_requests_per_egld > 0, "Number of requests per EGLD must be non-zero");
- self.num_requests_per_egld().set(num_requests_per_egld);
- if !self.is_paused().is_empty() {
- // is_paused already exists, keep current value
- } else {
- // First upgrade, initialize pause state
- self.is_paused().set(false);
- }
- }
-
- /// Add acquired requests for a given ID - payable only in EGLD
- /// The number of acquired requests added = (EGLD amount transferred in regular units) * num_requests_per_egld
- /// Example: 2.5 EGLD * 100 rate = 250 acquired requests
- #[payable("EGLD")]
- #[endpoint(addRequests)]
- fn add_requests(&self, id: u64) {
- require!(!self.is_paused().get(), "Contract is paused");
-
- let payment = self.call_value().egld();
- let amount_wei = payment.clone_value();
-
- require!(amount_wei > 0, "Payment amount must be greater than 0");
-
- // Convert from wei to EGLD (1 EGLD = 10^18 wei)
- let one_egld = BigUint::from(1_000_000_000_000_000_000u64);
-
- let num_requests_per_egld = self.num_requests_per_egld().get();
- let requests_to_add = (amount_wei.clone() * &num_requests_per_egld) / one_egld;
-
- self.acquired_requests(&id).update(|requests| *requests += requests_to_add.clone());
-
- self.add_requests_event(&id, &amount_wei, &requests_to_add);
- }
-
-
- /// Get the number of acquired requests for a given ID
- /// Returns 0 if the ID was not credited
- #[view(getRequests)]
- fn get_requests(&self, id: u64) -> BigUint {
- self.acquired_requests(&id).get()
- }
-
- /// Check if the contract is paused
- #[view(isPaused)]
- fn get_is_paused(&self) -> bool {
- self.is_paused().get()
- }
-
- /// Get the number of requests per EGLD
- #[view(getRequestsPerEgld)]
- fn get_requests_per_egld(&self) -> BigUint {
- self.num_requests_per_egld().get()
- }
-
-
- /// Change the number of requests per EGLD
- /// Can only be called by the owner
- #[endpoint(changeNumRequestsPerEGLD)]
- fn change_num_requests_per_egld(&self, new_num_requests_per_egld: BigUint) {
- let caller = self.blockchain().get_caller();
- let owner = self.blockchain().get_owner_address();
-
- require!(caller == owner, "Only the owner can change the exchange rate");
- require!(new_num_requests_per_egld > 0, "Number of requests per EGLD must be non-zero");
-
- let old_value = self.num_requests_per_egld().get();
- self.num_requests_per_egld().set(new_num_requests_per_egld.clone());
-
- self.change_num_requests_per_egld_event(&old_value, &new_num_requests_per_egld);
- }
-
- /// Pause the contract - prevents new requests from being added
- /// Can only be called by the owner
- #[endpoint(pause)]
- fn pause(&self) {
- let caller = self.blockchain().get_caller();
- let owner = self.blockchain().get_owner_address();
-
- require!(caller == owner, "Only the owner can pause the contract");
- require!(!self.is_paused().get(), "Contract is already paused");
-
- self.is_paused().set(true);
- self.pause_event();
- }
-
- /// Unpause the contract - allows new requests to be added again
- /// Can only be called by the owner
- #[endpoint(unpause)]
- fn unpause(&self) {
- let caller = self.blockchain().get_caller();
- let owner = self.blockchain().get_owner_address();
-
- require!(caller == owner, "Only the owner can unpause the contract");
- require!(self.is_paused().get(), "Contract is not paused");
-
- self.is_paused().set(false);
- self.unpause_event();
- }
-
- /// Withdraw all available EGLD in the contract to the owner's address
- /// Can only be called by the owner
- #[endpoint(withdrawAll)]
- fn withdraw_all(&self) {
- let caller = self.blockchain().get_caller();
- let owner = self.blockchain().get_owner_address();
-
- require!(caller == owner, "Only the owner can withdraw");
-
- let contract_balance = self.blockchain().get_sc_balance(&EgldOrEsdtTokenIdentifier::egld(), 0);
- require!(contract_balance > 0, "No EGLD to withdraw");
-
- self.tx()
- .to(&owner)
- .egld(&contract_balance)
- .transfer();
-
- self.withdraw_event(&owner, &contract_balance);
- }
-
- /// Event emitted when requests are added
- #[event("addRequests")]
- fn add_requests_event(
- &self,
- #[indexed] id: &u64,
- #[indexed] egld_amount: &BigUint,
- requests_added: &BigUint,
- );
-
- /// Event emitted when the exchange rate is changed
- #[event("changeNumRequestsPerEGLD")]
- fn change_num_requests_per_egld_event(
- &self,
- #[indexed] old_value: &BigUint,
- new_value: &BigUint,
- );
-
- /// Event emitted when the contract is paused
- #[event("pause")]
- fn pause_event(&self);
-
- /// Event emitted when the contract is unpaused
- #[event("unpause")]
- fn unpause_event(&self);
-
- /// Event emitted when EGLD is withdrawn
- #[event("withdraw")]
- fn withdraw_event(
- &self,
- #[indexed] recipient: &ManagedAddress,
- amount: &BigUint,
- );
-
- /// Storage mapper for the number of requests per EGLD
- #[storage_mapper("numRequestsPerEgld")]
- fn num_requests_per_egld(&self) -> SingleValueMapper;
-
- /// Storage mapper for acquired requests count per ID
- #[storage_mapper("acquiredRequests")]
- fn acquired_requests(&self, id: &u64) -> SingleValueMapper;
-
- /// Storage mapper for pause state
- #[storage_mapper("isPaused")]
- fn is_paused(&self) -> SingleValueMapper;
-}
diff --git a/requests-contract/tests/scenarios_rs_test.rs b/requests-contract/tests/scenarios_rs_test.rs
deleted file mode 100644
index 23732be..0000000
--- a/requests-contract/tests/scenarios_rs_test.rs
+++ /dev/null
@@ -1,124 +0,0 @@
-use multiversx_sc_scenario::*;
-
-fn world() -> ScenarioWorld {
- let mut blockchain = ScenarioWorld::new();
-
- blockchain.set_current_dir_from_workspace("");
- blockchain.register_contract("mxsc:output/requests.mxsc.json", requests::ContractBuilder);
- blockchain
-}
-
-#[test]
-fn add_requests_accumulation_rs() {
- world().run("scenarios/add_requests_accumulation.scen.json");
-}
-
-#[test]
-fn add_requests_multiple_rs() {
- world().run("scenarios/add_requests_multiple.scen.json");
-}
-
-#[test]
-fn add_requests_single_rs() {
- world().run("scenarios/add_requests_single.scen.json");
-}
-
-#[test]
-fn add_requests_when_paused_rs() {
- world().run("scenarios/add_requests_when_paused.scen.json");
-}
-
-#[test]
-fn change_rate_non_owner_rs() {
- world().run("scenarios/change_rate_non_owner.scen.json");
-}
-
-#[test]
-fn change_rate_valid_rs() {
- world().run("scenarios/change_rate_valid.scen.json");
-}
-
-#[test]
-fn change_rate_zero_rs() {
- world().run("scenarios/change_rate_zero.scen.json");
-}
-
-#[test]
-fn full_workflow_rs() {
- world().run("scenarios/full_workflow.scen.json");
-}
-
-#[test]
-fn get_requests_existing_rs() {
- world().run("scenarios/get_requests_existing.scen.json");
-}
-
-#[test]
-fn get_requests_nonexistent_rs() {
- world().run("scenarios/get_requests_nonexistent.scen.json");
-}
-
-#[test]
-fn init_valid_rs() {
- world().run("scenarios/init_valid.scen.json");
-}
-
-#[test]
-fn init_zero_rs() {
- world().run("scenarios/init_zero.scen.json");
-}
-
-#[test]
-fn pause_already_paused_rs() {
- world().run("scenarios/pause_already_paused.scen.json");
-}
-
-#[test]
-fn pause_non_owner_rs() {
- world().run("scenarios/pause_non_owner.scen.json");
-}
-
-#[test]
-fn pause_success_rs() {
- world().run("scenarios/pause_success.scen.json");
-}
-
-#[test]
-fn pause_unpause_workflow_rs() {
- world().run("scenarios/pause_unpause_workflow.scen.json");
-}
-
-#[test]
-fn rate_change_affects_future_rs() {
- world().run("scenarios/rate_change_affects_future.scen.json");
-}
-
-#[test]
-fn unpause_non_owner_rs() {
- world().run("scenarios/unpause_non_owner.scen.json");
-}
-
-#[test]
-fn unpause_not_paused_rs() {
- world().run("scenarios/unpause_not_paused.scen.json");
-}
-
-#[test]
-fn unpause_success_rs() {
- world().run("scenarios/unpause_success.scen.json");
-}
-
-#[test]
-fn withdraw_empty_rs() {
- world().run("scenarios/withdraw_empty.scen.json");
-}
-
-#[test]
-fn withdraw_non_owner_rs() {
- world().run("scenarios/withdraw_non_owner.scen.json");
-}
-
-#[test]
-fn withdraw_success_rs() {
- world().run("scenarios/withdraw_success.scen.json");
-}
diff --git a/requests-contract/wasm/Cargo.lock b/requests-contract/wasm/Cargo.lock
deleted file mode 100644
index 3ec1460..0000000
--- a/requests-contract/wasm/Cargo.lock
+++ /dev/null
@@ -1,223 +0,0 @@
-# This file is automatically @generated by Cargo.
-# It is not intended for manual editing.
-version = 4
-
-[[package]]
-name = "arrayvec"
-version = "0.7.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
-
-[[package]]
-name = "autocfg"
-version = "1.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
-
-[[package]]
-name = "bitflags"
-version = "2.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd"
-
-[[package]]
-name = "endian-type"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d"
-
-[[package]]
-name = "generic-array"
-version = "1.3.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eaf57c49a95fd1fe24b90b3033bee6dc7e8f1288d51494cb44e627c295e38542"
-dependencies = [
- "rustversion",
- "typenum",
-]
-
-[[package]]
-name = "hex"
-version = "0.4.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
-
-[[package]]
-name = "hex-literal"
-version = "0.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46"
-
-[[package]]
-name = "multiversx-chain-core"
-version = "0.14.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "73f1f0526ca094185847776c2c03de97ea082743ee4e6f799860ad67e7d78250"
-dependencies = [
- "bitflags",
- "multiversx-sc-codec",
-]
-
-[[package]]
-name = "multiversx-sc"
-version = "0.57.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "20602d4fc336092faadc03b6b445c4bb5e4dbc4c86fb53726e46eca67070813a"
-dependencies = [
- "bitflags",
- "generic-array",
- "hex-literal",
- "multiversx-chain-core",
- "multiversx-sc-codec",
- "multiversx-sc-derive",
- "num-traits",
- "unwrap-infallible",
-]
-
-[[package]]
-name = "multiversx-sc-codec"
-version = "0.22.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "43e0f24a020adf32faffae1c57475c6b7285a3216d1a36e4a73617639721c2e0"
-dependencies = [
- "arrayvec",
- "bitflags",
- "multiversx-sc-codec-derive",
- "unwrap-infallible",
-]
-
-[[package]]
-name = "multiversx-sc-codec-derive"
-version = "0.22.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7c5f17d5ee23657d5cddc7f4471925b5a49f7e25306f8bba656ea6917acc629d"
-dependencies = [
- "hex",
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "multiversx-sc-derive"
-version = "0.57.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0d44d08d3376c199e8c391cc07752d2822cd289693da5319d7905599501e557f"
-dependencies = [
- "hex",
- "proc-macro2",
- "quote",
- "radix_trie",
- "syn",
-]
-
-[[package]]
-name = "multiversx-sc-wasm-adapter"
-version = "0.57.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ee8253b84600554fbe16ea0a234b009854348dc95ce174ba6eba046dc5918f8f"
-dependencies = [
- "multiversx-sc",
-]
-
-[[package]]
-name = "nibble_vec"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43"
-dependencies = [
- "smallvec",
-]
-
-[[package]]
-name = "num-traits"
-version = "0.2.19"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
-dependencies = [
- "autocfg",
-]
-
-[[package]]
-name = "proc-macro2"
-version = "1.0.94"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84"
-dependencies = [
- "unicode-ident",
-]
-
-[[package]]
-name = "quote"
-version = "1.0.39"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c1f1914ce909e1658d9907913b4b91947430c7d9be598b15a1912935b8c04801"
-dependencies = [
- "proc-macro2",
-]
-
-[[package]]
-name = "radix_trie"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd"
-dependencies = [
- "endian-type",
- "nibble_vec",
-]
-
-[[package]]
-name = "requests"
-version = "0.0.0"
-dependencies = [
- "multiversx-sc",
-]
-
-[[package]]
-name = "requests-wasm"
-version = "0.0.0"
-dependencies = [
- "multiversx-sc-wasm-adapter",
- "requests",
-]
-
-[[package]]
-name = "rustversion"
-version = "1.0.22"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
-
-[[package]]
-name = "smallvec"
-version = "1.15.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
-
-[[package]]
-name = "syn"
-version = "2.0.100"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0"
-dependencies = [
- "proc-macro2",
- "quote",
- "unicode-ident",
-]
-
-[[package]]
-name = "typenum"
-version = "1.19.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb"
-
-[[package]]
-name = "unicode-ident"
-version = "1.0.22"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"
-
-[[package]]
-name = "unwrap-infallible"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "151ac09978d3c2862c4e39b557f4eceee2cc72150bc4cb4f16abf061b6e381fb"
diff --git a/requests-contract/wasm/Cargo.toml b/requests-contract/wasm/Cargo.toml
deleted file mode 100644
index a0d90e1..0000000
--- a/requests-contract/wasm/Cargo.toml
+++ /dev/null
@@ -1,34 +0,0 @@
-# Code generated by the multiversx-sc build system. DO NOT EDIT.
-
-# ##########################################
-# ############## AUTO-GENERATED #############
-# ##########################################
-
-[package]
-name = "requests-wasm"
-version = "0.0.0"
-edition = "2021"
-publish = false
-
-[lib]
-crate-type = ["cdylib"]
-
-[profile.release]
-codegen-units = 1
-opt-level = "z"
-lto = true
-debug = false
-panic = "abort"
-overflow-checks = false
-
-[profile.dev]
-panic = "abort"
-
-[dependencies.requests]
-path = ".."
-
-[dependencies.multiversx-sc-wasm-adapter]
-version = "0.57.1"
-
-[workspace]
-members = ["."]
diff --git a/requests-contract/wasm/src/lib.rs b/requests-contract/wasm/src/lib.rs
deleted file mode 100644
index 19ea33c..0000000
--- a/requests-contract/wasm/src/lib.rs
+++ /dev/null
@@ -1,28 +0,0 @@
-// Code generated by the multiversx-sc build system. DO NOT EDIT.
-
-////////////////////////////////////////////////////
-////////////////// AUTO-GENERATED //////////////////
-////////////////////////////////////////////////////
-
-// Init: 1
-// Upgrade: 1
-// Endpoints: 2
-// Async Callback (empty): 1
-// Total number of exported functions: 5
-
-#![no_std]
-
-multiversx_sc_wasm_adapter::allocator!();
-multiversx_sc_wasm_adapter::panic_handler!();
-
-multiversx_sc_wasm_adapter::endpoints! {
- adder
- (
- init => init
- upgrade => upgrade
- getSum => sum
- add => add
- )
-}
-
-multiversx_sc_wasm_adapter::async_callback_empty! {}
diff --git a/services/crypto-payment/api/handler.go b/services/crypto-payment/api/handler.go
index 76841f3..ccbddfd 100644
--- a/services/crypto-payment/api/handler.go
+++ b/services/crypto-payment/api/handler.go
@@ -64,14 +64,14 @@ func (h *Handler) GetAccount(c *gin.Context) {
return
}
- address, requests, err := h.accountHandler.GetAccount(c.Request.Context(), request.ID)
+ address, credits, err := h.accountHandler.GetAccount(c.Request.Context(), request.ID)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, gin.H{
- "address": address,
- "numberOfRequests": requests,
+ "address": address,
+ "credits": credits,
})
}
diff --git a/services/crypto-payment/api/handler_test.go b/services/crypto-payment/api/handler_test.go
index 454f362..6ce98b1 100644
--- a/services/crypto-payment/api/handler_test.go
+++ b/services/crypto-payment/api/handler_test.go
@@ -43,17 +43,17 @@ func (m *mockConfigProvider) IsInterfaceNil() bool {
}
type mockAccountHandler struct {
- getAccountCalled int
- getAccountID uint64
- getAccountAddr string
- getAccountRequests uint64
- getAccountErr error
+ getAccountCalled int
+ getAccountID uint64
+ getAccountAddr string
+ getAccountCredits uint64
+ getAccountErr error
}
func (m *mockAccountHandler) GetAccount(_ context.Context, id uint64) (string, uint64, error) {
m.getAccountCalled++
m.getAccountID = id
- return m.getAccountAddr, m.getAccountRequests, m.getAccountErr
+ return m.getAccountAddr, m.getAccountCredits, m.getAccountErr
}
func (m *mockAccountHandler) IsInterfaceNil() bool {
@@ -168,11 +168,11 @@ func TestHandler_GetAccount(t *testing.T) {
t.Run("success", func(t *testing.T) {
expectedID := uint64(123)
expectedAddr := "erd1test"
- expectedRequests := uint64(10)
+ expectedCredits := uint64(10)
accountHandler := &mockAccountHandler{
- getAccountAddr: expectedAddr,
- getAccountRequests: expectedRequests,
+ getAccountAddr: expectedAddr,
+ getAccountCredits: expectedCredits,
}
h, _ := NewHandler(&mockStorage{}, &mockConfigProvider{}, accountHandler)
@@ -191,7 +191,7 @@ func TestHandler_GetAccount(t *testing.T) {
err := json.Unmarshal(w.Body.Bytes(), &response)
require.NoError(t, err)
require.Equal(t, expectedAddr, response["address"])
- require.Equal(t, float64(expectedRequests), response["numberOfRequests"])
+ require.Equal(t, float64(expectedCredits), response["credits"])
})
t.Run("invalid id", func(t *testing.T) {
diff --git a/services/crypto-payment/process/accountHandler.go b/services/crypto-payment/process/accountHandler.go
index 7bf8894..abd1807 100644
--- a/services/crypto-payment/process/accountHandler.go
+++ b/services/crypto-payment/process/accountHandler.go
@@ -34,12 +34,12 @@ func (ah *accountHandler) GetAccount(ctx context.Context, id uint64) (string, ui
return "", 0, err
}
- requests, err := ah.contractHandler.GetRequests(ctx, id)
+ credits, err := ah.contractHandler.GetCredits(ctx, id)
if err != nil {
return "", 0, err
}
- return entry.Address, requests, nil
+ return entry.Address, credits, nil
}
// IsInterfaceNil returns true if the value under the interface is nil
diff --git a/services/crypto-payment/process/accountHandler_test.go b/services/crypto-payment/process/accountHandler_test.go
index e2b7f10..f2ec797 100644
--- a/services/crypto-payment/process/accountHandler_test.go
+++ b/services/crypto-payment/process/accountHandler_test.go
@@ -44,15 +44,15 @@ func TestAccountHandler_GetAccount(t *testing.T) {
expectedID := uint64(123)
expectedAddress := "erd1test"
- expectedRequests := uint64(50)
+ expectedCredits := uint64(50)
t.Run("success", func(t *testing.T) {
t.Parallel()
contractStub := &testsCommon.ContractHandlerStub{
- GetRequestsHandler: func(ctx context.Context, id uint64) (uint64, error) {
+ GetCreditsHandler: func(ctx context.Context, id uint64) (uint64, error) {
require.Equal(t, expectedID, id)
- return expectedRequests, nil
+ return expectedCredits, nil
},
}
@@ -67,10 +67,10 @@ func TestAccountHandler_GetAccount(t *testing.T) {
}
ah, _ := NewAccountHandler(contractStub, dataStub)
- address, requests, err := ah.GetAccount(context.Background(), expectedID)
+ address, credits, err := ah.GetAccount(context.Background(), expectedID)
require.NoError(t, err)
require.Equal(t, expectedAddress, address)
- require.Equal(t, expectedRequests, requests)
+ require.Equal(t, expectedCredits, credits)
})
t.Run("data provider error", func(t *testing.T) {
@@ -85,10 +85,10 @@ func TestAccountHandler_GetAccount(t *testing.T) {
contractStub := &testsCommon.ContractHandlerStub{}
ah, _ := NewAccountHandler(contractStub, dataStub)
- address, requests, err := ah.GetAccount(context.Background(), expectedID)
+ address, credits, err := ah.GetAccount(context.Background(), expectedID)
require.Equal(t, expectedErr, err)
require.Empty(t, address)
- require.Zero(t, requests)
+ require.Zero(t, credits)
})
t.Run("contract handler error", func(t *testing.T) {
@@ -101,15 +101,15 @@ func TestAccountHandler_GetAccount(t *testing.T) {
},
}
contractStub := &testsCommon.ContractHandlerStub{
- GetRequestsHandler: func(ctx context.Context, id uint64) (uint64, error) {
+ GetCreditsHandler: func(ctx context.Context, id uint64) (uint64, error) {
return 0, expectedErr
},
}
ah, _ := NewAccountHandler(contractStub, dataStub)
- address, requests, err := ah.GetAccount(context.Background(), expectedID)
+ address, credits, err := ah.GetAccount(context.Background(), expectedID)
require.Equal(t, expectedErr, err)
require.Empty(t, address)
- require.Zero(t, requests)
+ require.Zero(t, credits)
})
}
diff --git a/services/crypto-payment/process/configHandler.go b/services/crypto-payment/process/configHandler.go
index 488a9ea..7ec47ba 100644
--- a/services/crypto-payment/process/configHandler.go
+++ b/services/crypto-payment/process/configHandler.go
@@ -40,7 +40,7 @@ func (ch *configHandler) GetConfig(ctx context.Context) (map[string]interface{},
return nil, err
}
- requestsPerEgld, err := ch.contractHandler.GetRequestsPerEGLD(ctx)
+ creditsPerEgld, err := ch.contractHandler.GetCreditsPerEGLD(ctx)
if err != nil {
return nil, err
}
@@ -49,7 +49,7 @@ func (ch *configHandler) GetConfig(ctx context.Context) (map[string]interface{},
"isContractPaused": isPaused,
"walletURL": ch.walletURL,
"explorerURL": ch.explorerURL,
- "requestsPerEGLD": requestsPerEgld,
+ "creditsPerEGLD": creditsPerEgld,
"minimumBalance": ch.minimumBalance,
}, nil
}
diff --git a/services/crypto-payment/process/configHandler_test.go b/services/crypto-payment/process/configHandler_test.go
index 65cdd9c..454155d 100644
--- a/services/crypto-payment/process/configHandler_test.go
+++ b/services/crypto-payment/process/configHandler_test.go
@@ -61,7 +61,7 @@ func TestConfigHandler_GetConfig(t *testing.T) {
IsContractPausedHandler: func(ctx context.Context) (bool, error) {
return false, nil
},
- GetRequestsPerEGLDHandler: func(ctx context.Context) (uint64, error) {
+ GetCreditsPerEGLDHandler: func(ctx context.Context) (uint64, error) {
return 0, expectedErr
},
}
@@ -81,7 +81,7 @@ func TestConfigHandler_GetConfig(t *testing.T) {
IsContractPausedHandler: func(ctx context.Context) (bool, error) {
return true, nil
},
- GetRequestsPerEGLDHandler: func(ctx context.Context) (uint64, error) {
+ GetCreditsPerEGLDHandler: func(ctx context.Context) (uint64, error) {
return expectedRate, nil
},
}
@@ -93,7 +93,7 @@ func TestConfigHandler_GetConfig(t *testing.T) {
require.NotNil(t, config)
assert.True(t, config["isContractPaused"].(bool))
- assert.Equal(t, expectedRate, config["requestsPerEGLD"])
+ assert.Equal(t, expectedRate, config["creditsPerEGLD"])
assert.Equal(t, expectedWallet, config["walletURL"])
assert.Equal(t, expectedExplorer, config["explorerURL"])
assert.Equal(t, expectedMinBalance, config["minimumBalance"])
diff --git a/services/crypto-payment/process/contractQueryHandler.go b/services/crypto-payment/process/contractQueryHandler.go
index 72680c6..e884373 100644
--- a/services/crypto-payment/process/contractQueryHandler.go
+++ b/services/crypto-payment/process/contractQueryHandler.go
@@ -10,11 +10,11 @@ import (
)
const (
- isPausedFunc = "isPaused"
- requestsPerEgldFunc = "getRequestsPerEgld"
+ isPausedFunc = "isPaused"
+ creditsPerEgldFunc = "getCreditsPerEgld"
- keyIsPaused = "isPaused"
- keyRequestsPerEgld = "requestsPerEgld"
+ keyIsPaused = "isPaused"
+ keyCreditsPerEgld = "creditsPerEgld"
contractNotFoundStatus = "contract not found"
)
@@ -82,16 +82,16 @@ func (cqh *contractQueryHandler) IsContractPaused(ctx context.Context) (bool, er
return isPaused, nil
}
-// GetRequestsPerEGLD returns the number of requests per EGLD
-func (cqh *contractQueryHandler) GetRequestsPerEGLD(ctx context.Context) (uint64, error) {
- requestsPerEgldCachedValue, found := cqh.cacher.Get(keyRequestsPerEgld)
+// GetCreditsPerEGLD returns the number of credits per EGLD
+func (cqh *contractQueryHandler) GetCreditsPerEGLD(ctx context.Context) (uint64, error) {
+ creditsPerEgldCachedValue, found := cqh.cacher.Get(keyCreditsPerEgld)
if found {
- return requestsPerEgldCachedValue.(uint64), nil
+ return creditsPerEgldCachedValue.(uint64), nil
}
res, err := cqh.blockchainDataProvider.ExecuteVMQuery(ctx, &data.VmValueRequest{
Address: cqh.contractBech32Address,
- FuncName: requestsPerEgldFunc,
+ FuncName: creditsPerEgldFunc,
CallValue: "0",
CallerAddr: cqh.contractBech32Address,
})
@@ -99,14 +99,14 @@ func (cqh *contractQueryHandler) GetRequestsPerEGLD(ctx context.Context) (uint64
return 0, err
}
- requestsPerEgld, err := vmValueToUint64Decoder(res.Data.ReturnData)
+ creditsPerEgld, err := vmValueToUint64Decoder(res.Data.ReturnData)
if err != nil {
return 0, err
}
- cqh.cacher.Set(keyRequestsPerEgld, requestsPerEgld)
+ cqh.cacher.Set(keyCreditsPerEgld, creditsPerEgld)
- return requestsPerEgld, nil
+ return creditsPerEgld, nil
}
func vmValueToUint64Decoder(buff [][]byte) (uint64, error) {
@@ -123,11 +123,11 @@ func vmValueToUint64Decoder(buff [][]byte) (uint64, error) {
return val.Uint64(), nil
}
-// GetRequests returns the number of requests for a specific ID
-func (cqh *contractQueryHandler) GetRequests(ctx context.Context, id uint64) (uint64, error) {
+// GetCredits returns the number of credits for a specific ID
+func (cqh *contractQueryHandler) GetCredits(ctx context.Context, id uint64) (uint64, error) {
res, err := cqh.blockchainDataProvider.ExecuteVMQuery(ctx, &data.VmValueRequest{
Address: cqh.contractBech32Address,
- FuncName: "getRequests",
+ FuncName: "getCredits",
Args: []string{ensureEvenHex(fmt.Sprintf("%x", id))}, // hex encoded id
CallValue: "0",
CallerAddr: cqh.contractBech32Address,
diff --git a/services/crypto-payment/process/contractQueryHandler_test.go b/services/crypto-payment/process/contractQueryHandler_test.go
index 9ae4293..85e38a5 100644
--- a/services/crypto-payment/process/contractQueryHandler_test.go
+++ b/services/crypto-payment/process/contractQueryHandler_test.go
@@ -208,7 +208,7 @@ func TestContractQueryHandler_IsContractPaused(t *testing.T) {
})
}
-func TestContractQueryHandler_GetRequestsPerEGLD(t *testing.T) {
+func TestContractQueryHandler_GetCreditsPerEGLD(t *testing.T) {
t.Parallel()
t.Run("proxy error", func(t *testing.T) {
@@ -222,7 +222,7 @@ func TestContractQueryHandler_GetRequestsPerEGLD(t *testing.T) {
}
handler, _ := NewContractQueryHandler(proxy, "erd1test", &testsCommon.CacherStub{})
- val, err := handler.GetRequestsPerEGLD(context.Background())
+ val, err := handler.GetCreditsPerEGLD(context.Background())
require.Equal(t, uint64(0), val)
require.Equal(t, expectedErr, err)
})
@@ -239,7 +239,7 @@ func TestContractQueryHandler_GetRequestsPerEGLD(t *testing.T) {
}
handler, _ := NewContractQueryHandler(proxy, "erd1test", &testsCommon.CacherStub{})
- val, err := handler.GetRequestsPerEGLD(context.Background())
+ val, err := handler.GetCreditsPerEGLD(context.Background())
require.NoError(t, err)
require.Equal(t, uint64(0), val)
})
@@ -249,7 +249,7 @@ func TestContractQueryHandler_GetRequestsPerEGLD(t *testing.T) {
proxy := &testsCommon.BlockchainDataProviderStub{
ExecuteVMQueryHandler: func(ctx context.Context, vmRequest *data.VmValueRequest) (*data.VmValuesResponseData, error) {
- assert.Equal(t, "getRequestsPerEgld", vmRequest.FuncName)
+ assert.Equal(t, "getCreditsPerEgld", vmRequest.FuncName)
return &data.VmValuesResponseData{
Data: &vm.VMOutputApi{ReturnData: [][]byte{{10}}},
}, nil
@@ -257,7 +257,7 @@ func TestContractQueryHandler_GetRequestsPerEGLD(t *testing.T) {
}
handler, _ := NewContractQueryHandler(proxy, "erd1test", &testsCommon.CacherStub{})
- val, err := handler.GetRequestsPerEGLD(context.Background())
+ val, err := handler.GetCreditsPerEGLD(context.Background())
require.NoError(t, err)
require.Equal(t, uint64(10), val)
})
@@ -277,14 +277,14 @@ func TestContractQueryHandler_GetRequestsPerEGLD(t *testing.T) {
}
handler, _ := NewContractQueryHandler(proxy, "erd1test", &testsCommon.CacherStub{})
- val, err := handler.GetRequestsPerEGLD(context.Background())
+ val, err := handler.GetCreditsPerEGLD(context.Background())
require.Error(t, err)
require.True(t, strings.Contains(err.Error(), "is not a uint64"))
require.Equal(t, uint64(0), val)
})
}
-func TestContractQueryHandler_GetRequests(t *testing.T) {
+func TestContractQueryHandler_GetCredits(t *testing.T) {
t.Parallel()
t.Run("proxy error", func(t *testing.T) {
@@ -298,7 +298,7 @@ func TestContractQueryHandler_GetRequests(t *testing.T) {
}
handler, _ := NewContractQueryHandler(proxy, "erd1test", &testsCommon.CacherStub{})
- val, err := handler.GetRequests(context.Background(), 1)
+ val, err := handler.GetCredits(context.Background(), 1)
require.Equal(t, uint64(0), val)
require.Equal(t, expectedErr, err)
})
@@ -315,7 +315,7 @@ func TestContractQueryHandler_GetRequests(t *testing.T) {
}
handler, _ := NewContractQueryHandler(proxy, "erd1test", &testsCommon.CacherStub{})
- val, err := handler.GetRequests(context.Background(), 1)
+ val, err := handler.GetCredits(context.Background(), 1)
require.NoError(t, err)
require.Equal(t, uint64(0), val)
})
@@ -326,7 +326,7 @@ func TestContractQueryHandler_GetRequests(t *testing.T) {
id := uint64(123)
proxy := &testsCommon.BlockchainDataProviderStub{
ExecuteVMQueryHandler: func(ctx context.Context, vmRequest *data.VmValueRequest) (*data.VmValuesResponseData, error) {
- assert.Equal(t, "getRequests", vmRequest.FuncName)
+ assert.Equal(t, "getCredits", vmRequest.FuncName)
assert.Equal(t, "7b", vmRequest.Args[0]) // 123 in hex
return &data.VmValuesResponseData{
Data: &vm.VMOutputApi{ReturnData: [][]byte{{10}}},
@@ -335,7 +335,7 @@ func TestContractQueryHandler_GetRequests(t *testing.T) {
}
handler, _ := NewContractQueryHandler(proxy, "erd1test", &testsCommon.CacherStub{})
- val, err := handler.GetRequests(context.Background(), id)
+ val, err := handler.GetCredits(context.Background(), id)
require.NoError(t, err)
require.Equal(t, uint64(10), val)
})
@@ -353,7 +353,7 @@ func TestContractQueryHandler_GetRequests(t *testing.T) {
}
handler, _ := NewContractQueryHandler(proxy, "erd1test", &testsCommon.CacherStub{})
- val, err := handler.GetRequests(context.Background(), 1)
+ val, err := handler.GetCredits(context.Background(), 1)
require.Error(t, err)
require.True(t, strings.Contains(err.Error(), "is not a uint64"))
require.Equal(t, uint64(0), val)
diff --git a/services/crypto-payment/process/interface.go b/services/crypto-payment/process/interface.go
index bcb99c0..52b42d0 100644
--- a/services/crypto-payment/process/interface.go
+++ b/services/crypto-payment/process/interface.go
@@ -58,8 +58,8 @@ type NonceTransactionsHandler interface {
// ContractHandler defines the operations to query the contract state
type ContractHandler interface {
IsContractPaused(ctx context.Context) (bool, error)
- GetRequestsPerEGLD(ctx context.Context) (uint64, error)
- GetRequests(ctx context.Context, id uint64) (uint64, error)
+ GetCreditsPerEGLD(ctx context.Context) (uint64, error)
+ GetCredits(ctx context.Context, id uint64) (uint64, error)
IsInterfaceNil() bool
}
diff --git a/services/crypto-payment/process/relayedTxProcessor.go b/services/crypto-payment/process/relayedTxProcessor.go
index 87b6f63..ecb09ba 100644
--- a/services/crypto-payment/process/relayedTxProcessor.go
+++ b/services/crypto-payment/process/relayedTxProcessor.go
@@ -17,7 +17,7 @@ import (
"github.com/multiversx/mx-sdk-go/interactors/nonceHandlerV2"
)
-const requestsAddEndpoint = "addRequests"
+const creditsAddEndpoint = "addCredits"
const intervalToResendTxs = time.Minute
var hashSigningTxHasher = keccak.NewKeccak()
@@ -127,7 +127,7 @@ func (processor *relayedTxProcessor) Process(ctx context.Context, id uint64, sen
// 1. Prepare the data field
dataFieldBuilder := builders.NewTxDataBuilder()
- dataField, err := dataFieldBuilder.Function(requestsAddEndpoint).ArgInt64(int64(id)).ToDataBytes()
+ dataField, err := dataFieldBuilder.Function(creditsAddEndpoint).ArgInt64(int64(id)).ToDataBytes()
if err != nil {
return fmt.Errorf("failed to build data field: %w", err)
}
diff --git a/services/crypto-payment/process/relayedTxProcessor_test.go b/services/crypto-payment/process/relayedTxProcessor_test.go
index 57c6fd2..d02701c 100644
--- a/services/crypto-payment/process/relayedTxProcessor_test.go
+++ b/services/crypto-payment/process/relayedTxProcessor_test.go
@@ -550,7 +550,7 @@ func TestRelayedTxProcessor_Process(t *testing.T) {
assert.Equal(t, senderBech32, tx.Sender)
assert.Equal(t, uint64(1000000000), tx.GasPrice)
assert.Equal(t, gasLimit, tx.GasLimit)
- assert.Equal(t, []byte("addRequests@05"), tx.Data)
+ assert.Equal(t, []byte("addCredits@05"), tx.Data)
assert.Equal(t, "T", tx.ChainID)
assert.Equal(t, uint32(1), tx.Version)
assert.Equal(t, hex.EncodeToString([]byte("userSig")), tx.Signature)
diff --git a/services/crypto-payment/testsCommon/contractHandlerStub.go b/services/crypto-payment/testsCommon/contractHandlerStub.go
index 1b10bf6..04aab9c 100644
--- a/services/crypto-payment/testsCommon/contractHandlerStub.go
+++ b/services/crypto-payment/testsCommon/contractHandlerStub.go
@@ -4,9 +4,9 @@ import "context"
// ContractHandlerStub -
type ContractHandlerStub struct {
- IsContractPausedHandler func(ctx context.Context) (bool, error)
- GetRequestsPerEGLDHandler func(ctx context.Context) (uint64, error)
- GetRequestsHandler func(ctx context.Context, id uint64) (uint64, error)
+ IsContractPausedHandler func(ctx context.Context) (bool, error)
+ GetCreditsPerEGLDHandler func(ctx context.Context) (uint64, error)
+ GetCreditsHandler func(ctx context.Context, id uint64) (uint64, error)
}
// IsContractPaused -
@@ -17,18 +17,18 @@ func (stub *ContractHandlerStub) IsContractPaused(ctx context.Context) (bool, er
return false, nil
}
-// GetRequestsPerEGLD -
-func (stub *ContractHandlerStub) GetRequestsPerEGLD(ctx context.Context) (uint64, error) {
- if stub.GetRequestsPerEGLDHandler != nil {
- return stub.GetRequestsPerEGLDHandler(ctx)
+// GetCreditsPerEGLD -
+func (stub *ContractHandlerStub) GetCreditsPerEGLD(ctx context.Context) (uint64, error) {
+ if stub.GetCreditsPerEGLDHandler != nil {
+ return stub.GetCreditsPerEGLDHandler(ctx)
}
return 0, nil
}
-// GetRequests -
-func (stub *ContractHandlerStub) GetRequests(ctx context.Context, id uint64) (uint64, error) {
- if stub.GetRequestsHandler != nil {
- return stub.GetRequestsHandler(ctx, id)
+// GetCredits -
+func (stub *ContractHandlerStub) GetCredits(ctx context.Context, id uint64) (uint64, error) {
+ if stub.GetCreditsHandler != nil {
+ return stub.GetCreditsHandler(ctx, id)
}
return 0, nil
}
diff --git a/services/proxy/api/cryptoPaymentHandler.go b/services/proxy/api/cryptoPaymentHandler.go
index df2f57b..b614e7e 100644
--- a/services/proxy/api/cryptoPaymentHandler.go
+++ b/services/proxy/api/cryptoPaymentHandler.go
@@ -106,7 +106,7 @@ func (h *cryptoPaymentHandler) handleConfig(w http.ResponseWriter, r *http.Reque
response := map[string]interface{}{
"isAvailable": true,
"isPaused": cfg.IsContractPaused,
- "requestsPerEGLD": cfg.RequestsPerEGLD,
+ "creditsPerEGLD": cfg.CreditsPerEGLD,
"walletURL": cfg.WalletURL,
"explorerURL": cfg.ExplorerURL,
"contractAddress": cfg.ContractAddress,
@@ -204,9 +204,9 @@ func (h *cryptoPaymentHandler) handleGetAccount(w http.ResponseWriter, r *http.R
w.Header().Set("Content-Type", "application/json")
_ = json.NewEncoder(w).Encode(map[string]interface{}{
- "paymentId": info.PaymentID,
- "address": info.Address,
- "numberOfRequests": info.NumberOfRequests,
+ "paymentId": info.PaymentID,
+ "address": info.Address,
+ "credits": info.Credits,
})
}
@@ -246,10 +246,10 @@ func (h *cryptoPaymentHandler) handleAdmin(w http.ResponseWriter, r *http.Reques
// I'll return a special JSON indicating no payment info.
w.Header().Set("Content-Type", "application/json")
_ = json.NewEncoder(w).Encode(map[string]interface{}{
- "username": user.Username,
- "paymentId": nil,
- "address": nil,
- "numberOfRequests": 0,
+ "username": user.Username,
+ "paymentId": nil,
+ "address": nil,
+ "credits": 0,
})
return
}
@@ -263,9 +263,9 @@ func (h *cryptoPaymentHandler) handleAdmin(w http.ResponseWriter, r *http.Reques
w.Header().Set("Content-Type", "application/json")
_ = json.NewEncoder(w).Encode(map[string]interface{}{
- "username": user.Username,
- "paymentId": info.PaymentID,
- "address": info.Address,
- "numberOfRequests": info.NumberOfRequests,
+ "username": user.Username,
+ "paymentId": info.PaymentID,
+ "address": info.Address,
+ "credits": info.Credits,
})
}
diff --git a/services/proxy/api/cryptoPaymentHandler_test.go b/services/proxy/api/cryptoPaymentHandler_test.go
index e000db1..13e60c0 100644
--- a/services/proxy/api/cryptoPaymentHandler_test.go
+++ b/services/proxy/api/cryptoPaymentHandler_test.go
@@ -68,8 +68,8 @@ func TestCryptoPaymentHandler_HandleConfig(t *testing.T) {
t.Run("success", func(t *testing.T) {
expectedConfig := &common.CryptoPaymentConfig{
- RequestsPerEGLD: 100,
- WalletURL: "https://wallet.com",
+ CreditsPerEGLD: 100,
+ WalletURL: "https://wallet.com",
}
clientStub.GetConfigHandler = func() (*common.CryptoPaymentConfig, error) {
return expectedConfig, nil
@@ -219,7 +219,7 @@ func TestCryptoPaymentHandler_HandleGetAccount(t *testing.T) {
}
clientStub.GetAccountHandler = func(paymentID uint64) (*common.AccountInfo, error) {
assert.Equal(t, uint64(100), paymentID)
- return &common.AccountInfo{PaymentID: 100, NumberOfRequests: 50}, nil
+ return &common.AccountInfo{PaymentID: 100, Credits: 50}, nil
}
w := httptest.NewRecorder()
@@ -278,7 +278,7 @@ func TestCryptoPaymentHandler_HandleAdmin(t *testing.T) {
return &common.UsersDetails{Username: "target", CryptoPaymentID: 100}, nil
}
clientStub.GetAccountHandler = func(paymentID uint64) (*common.AccountInfo, error) {
- return &common.AccountInfo{PaymentID: 100, NumberOfRequests: 50}, nil
+ return &common.AccountInfo{PaymentID: 100, Credits: 50}, nil
}
w := httptest.NewRecorder()
@@ -329,6 +329,6 @@ func TestCryptoPaymentHandler_HandleAdmin(t *testing.T) {
var resp map[string]interface{}
_ = json.NewDecoder(w.Body).Decode(&resp)
assert.Nil(t, resp["paymentId"])
- assert.Equal(t, float64(0), resp["numberOfRequests"])
+ assert.Equal(t, float64(0), resp["credits"])
})
}
diff --git a/services/proxy/common/servicesDTOs.go b/services/proxy/common/servicesDTOs.go
index d9bb5b3..7f7e1f5 100644
--- a/services/proxy/common/servicesDTOs.go
+++ b/services/proxy/common/servicesDTOs.go
@@ -3,7 +3,7 @@ package common
// CryptoPaymentConfig response from crypto-payment service
type CryptoPaymentConfig struct {
IsContractPaused bool `json:"isContractPaused"`
- RequestsPerEGLD uint64 `json:"requestsPerEGLD"`
+ CreditsPerEGLD uint64 `json:"creditsPerEGLD"`
WalletURL string `json:"walletURL"`
ExplorerURL string `json:"explorerURL"`
ContractAddress string `json:"contractAddress"`
@@ -17,7 +17,7 @@ type CreateAddressResponse struct {
// AccountInfo response from account endpoint
type AccountInfo struct {
- PaymentID uint64 `json:"paymentID"`
- Address string `json:"address"`
- NumberOfRequests uint64 `json:"numberOfRequests"`
+ PaymentID uint64 `json:"paymentID"`
+ Address string `json:"address"`
+ Credits uint64 `json:"credits"`
}
diff --git a/services/proxy/process/requestsSynchronizer.go b/services/proxy/process/requestsSynchronizer.go
index f47e9a7..a592095 100644
--- a/services/proxy/process/requestsSynchronizer.go
+++ b/services/proxy/process/requestsSynchronizer.go
@@ -47,10 +47,10 @@ func (rs *requestsSynchronizer) Process() {
}
// The DB should be updated if the contract's value exceeds what we have in the DB for the contract
- if accountInfo.NumberOfRequests > user.SCMaxRequests {
- log.Info("updating user max requests from contract", "user", user.Username, "old_sc", user.SCMaxRequests, "new_sc", accountInfo.NumberOfRequests)
+ if accountInfo.Credits > user.SCMaxRequests {
+ log.Info("updating user max requests from contract", "user", user.Username, "old_sc", user.SCMaxRequests, "new_sc", accountInfo.Credits)
- errUpdate := rs.store.UpdateUserMaxRequestsFromContract(user.Username, accountInfo.NumberOfRequests)
+ errUpdate := rs.store.UpdateUserMaxRequestsFromContract(user.Username, accountInfo.Credits)
if errUpdate != nil {
log.Error("failed to update user max requests", "user", user.Username, "error", errUpdate)
}
diff --git a/services/proxy/process/requestsSynchronizer_test.go b/services/proxy/process/requestsSynchronizer_test.go
index 3dd153a..abc934a 100644
--- a/services/proxy/process/requestsSynchronizer_test.go
+++ b/services/proxy/process/requestsSynchronizer_test.go
@@ -122,8 +122,8 @@ func TestRequestsSynchronizer_Process(t *testing.T) {
crypto := &testscommon.CryptoPaymentClientStub{
GetAccountHandler: func(paymentID uint64) (*common.AccountInfo, error) {
return &common.AccountInfo{
- PaymentID: 1,
- NumberOfRequests: 100,
+ PaymentID: 1,
+ Credits: 100,
}, nil
},
}
@@ -157,8 +157,8 @@ func TestRequestsSynchronizer_Process(t *testing.T) {
crypto := &testscommon.CryptoPaymentClientStub{
GetAccountHandler: func(paymentID uint64) (*common.AccountInfo, error) {
return &common.AccountInfo{
- PaymentID: 1,
- NumberOfRequests: 100,
+ PaymentID: 1,
+ Credits: 100,
}, nil
},
}
@@ -190,8 +190,8 @@ func TestRequestsSynchronizer_Process(t *testing.T) {
crypto := &testscommon.CryptoPaymentClientStub{
GetAccountHandler: func(paymentID uint64) (*common.AccountInfo, error) {
return &common.AccountInfo{
- PaymentID: 1,
- NumberOfRequests: 100,
+ PaymentID: 1,
+ Credits: 100,
}, nil
},
}
diff --git a/services/proxy/serviceWrappers/cryptoPaymentClient_test.go b/services/proxy/serviceWrappers/cryptoPaymentClient_test.go
index 559be32..1640526 100644
--- a/services/proxy/serviceWrappers/cryptoPaymentClient_test.go
+++ b/services/proxy/serviceWrappers/cryptoPaymentClient_test.go
@@ -64,8 +64,8 @@ func TestCryptoPaymentClient_GetConfig(t *testing.T) {
t.Parallel()
expectedConfig := common.CryptoPaymentConfig{
- RequestsPerEGLD: 100,
- WalletURL: "https://wallet.com",
+ CreditsPerEGLD: 100,
+ WalletURL: "https://wallet.com",
}
stub := &testscommon.HttpRequesterStub{
@@ -172,7 +172,7 @@ func TestCryptoPaymentClient_GetAccount(t *testing.T) {
t.Run("success", func(t *testing.T) {
t.Parallel()
- expectedInfo := common.AccountInfo{PaymentID: 1, Address: "addr", NumberOfRequests: 50}
+ expectedInfo := common.AccountInfo{PaymentID: 1, Address: "addr", Credits: 50}
stub := &testscommon.HttpRequesterStub{
DoRequestHandler: func(method string, url string, apiKey string, result any) error {
assert.Equal(t, http.MethodGet, method)